IndexedDBFactory now ForceCloses databases.
[chromium-blink-merge.git] / content / browser / browser_plugin / browser_plugin_geolocation_permission_context.cc
blob8a803c4712058bfa89e25f400d99fc12c15ad6d8
1 // Copyright 2013 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
5 #include "content/browser/browser_plugin/browser_plugin_geolocation_permission_context.h"
7 #include "base/bind.h"
8 #include "content/browser/browser_plugin/browser_plugin_guest.h"
9 #include "content/browser/web_contents/web_contents_impl.h"
10 #include "content/public/browser/browser_thread.h"
11 #include "content/public/browser/render_process_host.h"
12 #include "content/public/browser/render_view_host.h"
14 namespace content {
16 BrowserPluginGeolocationPermissionContext::
17 BrowserPluginGeolocationPermissionContext() {
20 BrowserPluginGeolocationPermissionContext::
21 ~BrowserPluginGeolocationPermissionContext() {
24 void BrowserPluginGeolocationPermissionContext::RequestGeolocationPermission(
25 int render_process_id,
26 int render_view_id,
27 int bridge_id,
28 const GURL& requesting_frame,
29 base::Callback<void(bool)> callback) {
30 if (!BrowserThread::CurrentlyOn(BrowserThread::UI)) {
31 BrowserThread::PostTask(
32 BrowserThread::UI, FROM_HERE,
33 base::Bind(
34 &BrowserPluginGeolocationPermissionContext::
35 RequestGeolocationPermission,
36 this,
37 render_process_id,
38 render_view_id,
39 bridge_id,
40 requesting_frame,
41 callback));
42 return;
44 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
46 // Note that callback.Run(true) allows geolocation access, callback.Run(false)
47 // denies geolocation access.
48 // We need to go to the renderer to ask embedder's js if we are allowed to
49 // have geolocation access.
50 RenderViewHost* rvh = RenderViewHost::FromID(render_process_id,
51 render_view_id);
52 if (rvh) {
53 DCHECK(rvh->GetProcess()->IsGuest());
54 WebContentsImpl* guest_web_contents =
55 static_cast<WebContentsImpl*>(rvh->GetDelegate()->GetAsWebContents());
56 BrowserPluginGuest* guest = guest_web_contents->GetBrowserPluginGuest();
57 guest->AskEmbedderForGeolocationPermission(bridge_id,
58 requesting_frame,
59 callback);
63 void BrowserPluginGeolocationPermissionContext::
64 CancelGeolocationPermissionRequest(int render_process_id,
65 int render_view_id,
66 int bridge_id,
67 const GURL& requesting_frame) {
68 if (!BrowserThread::CurrentlyOn(BrowserThread::UI)) {
69 BrowserThread::PostTask(
70 BrowserThread::UI, FROM_HERE,
71 base::Bind(
72 &BrowserPluginGeolocationPermissionContext::
73 CancelGeolocationPermissionRequest,
74 this,
75 render_process_id,
76 render_view_id,
77 bridge_id,
78 requesting_frame));
79 return;
81 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
82 RenderViewHost* rvh = RenderViewHost::FromID(render_process_id,
83 render_view_id);
84 if (rvh) {
85 DCHECK(rvh->GetProcess()->IsGuest());
86 WebContentsImpl* guest_web_contents =
87 static_cast<WebContentsImpl*>(rvh->GetDelegate()->GetAsWebContents());
88 BrowserPluginGuest* guest = guest_web_contents->GetBrowserPluginGuest();
89 if (guest)
90 guest->CancelGeolocationRequest(bridge_id);
94 } // namespace content