OLD | NEW |
1 // Copyright 2013 The Chromium Authors. All rights reserved. | 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 | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #include "content/browser/browser_plugin/browser_plugin_geolocation_permission_c
ontext.h" | 5 #include "content/browser/browser_plugin/browser_plugin_geolocation_permission_c
ontext.h" |
6 | 6 |
7 #include "base/bind.h" | 7 #include "base/bind.h" |
8 #include "content/browser/browser_plugin/browser_plugin_guest.h" | 8 #include "content/browser/browser_plugin/browser_plugin_guest.h" |
9 #include "content/browser/web_contents/web_contents_impl.h" | 9 #include "content/browser/web_contents/web_contents_impl.h" |
10 #include "content/public/browser/browser_thread.h" | 10 #include "content/public/browser/browser_thread.h" |
11 #include "content/public/browser/render_process_host.h" | 11 #include "content/public/browser/render_process_host.h" |
12 #include "content/public/browser/render_view_host.h" | 12 #include "content/public/browser/render_view_host.h" |
13 | 13 |
14 namespace content { | 14 namespace content { |
15 | 15 |
16 BrowserPluginGeolocationPermissionContext:: | 16 BrowserPluginGeolocationPermissionContext:: |
17 BrowserPluginGeolocationPermissionContext() { | 17 BrowserPluginGeolocationPermissionContext() { |
18 } | 18 } |
19 | 19 |
20 BrowserPluginGeolocationPermissionContext:: | 20 BrowserPluginGeolocationPermissionContext:: |
21 ~BrowserPluginGeolocationPermissionContext() { | 21 ~BrowserPluginGeolocationPermissionContext() { |
22 } | 22 } |
23 | 23 |
24 void BrowserPluginGeolocationPermissionContext::RequestGeolocationPermission( | 24 void BrowserPluginGeolocationPermissionContext::RequestGeolocationPermission( |
25 int render_process_id, | 25 int render_process_id, |
26 int render_view_id, | 26 int render_view_id, |
27 int bridge_id, | 27 int bridge_id, |
28 const GURL& requesting_frame, | 28 const GURL& requesting_frame, |
| 29 bool user_gesture, |
29 base::Callback<void(bool)> callback) { | 30 base::Callback<void(bool)> callback) { |
30 if (!BrowserThread::CurrentlyOn(BrowserThread::UI)) { | 31 if (!BrowserThread::CurrentlyOn(BrowserThread::UI)) { |
31 BrowserThread::PostTask( | 32 BrowserThread::PostTask( |
32 BrowserThread::UI, FROM_HERE, | 33 BrowserThread::UI, FROM_HERE, |
33 base::Bind( | 34 base::Bind( |
34 &BrowserPluginGeolocationPermissionContext:: | 35 &BrowserPluginGeolocationPermissionContext:: |
35 RequestGeolocationPermission, | 36 RequestGeolocationPermission, |
36 this, | 37 this, |
37 render_process_id, | 38 render_process_id, |
38 render_view_id, | 39 render_view_id, |
39 bridge_id, | 40 bridge_id, |
40 requesting_frame, | 41 requesting_frame, |
| 42 user_gesture, |
41 callback)); | 43 callback)); |
42 return; | 44 return; |
43 } | 45 } |
44 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); | 46 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); |
45 | 47 |
46 // Note that callback.Run(true) allows geolocation access, callback.Run(false) | 48 // Note that callback.Run(true) allows geolocation access, callback.Run(false) |
47 // denies geolocation access. | 49 // denies geolocation access. |
48 // We need to go to the renderer to ask embedder's js if we are allowed to | 50 // We need to go to the renderer to ask embedder's js if we are allowed to |
49 // have geolocation access. | 51 // have geolocation access. |
50 RenderViewHost* rvh = RenderViewHost::FromID(render_process_id, | 52 RenderViewHost* rvh = RenderViewHost::FromID(render_process_id, |
51 render_view_id); | 53 render_view_id); |
52 if (rvh) { | 54 if (rvh) { |
53 DCHECK(rvh->GetProcess()->IsGuest()); | 55 DCHECK(rvh->GetProcess()->IsGuest()); |
54 WebContentsImpl* guest_web_contents = | 56 WebContentsImpl* guest_web_contents = |
55 static_cast<WebContentsImpl*>(rvh->GetDelegate()->GetAsWebContents()); | 57 static_cast<WebContentsImpl*>(rvh->GetDelegate()->GetAsWebContents()); |
56 BrowserPluginGuest* guest = guest_web_contents->GetBrowserPluginGuest(); | 58 BrowserPluginGuest* guest = guest_web_contents->GetBrowserPluginGuest(); |
57 guest->AskEmbedderForGeolocationPermission(bridge_id, | 59 guest->AskEmbedderForGeolocationPermission(bridge_id, |
58 requesting_frame, | 60 requesting_frame, |
| 61 user_gesture, |
59 callback); | 62 callback); |
60 } | 63 } |
61 } | 64 } |
62 | 65 |
63 void BrowserPluginGeolocationPermissionContext:: | 66 void BrowserPluginGeolocationPermissionContext:: |
64 CancelGeolocationPermissionRequest(int render_process_id, | 67 CancelGeolocationPermissionRequest(int render_process_id, |
65 int render_view_id, | 68 int render_view_id, |
66 int bridge_id, | 69 int bridge_id, |
67 const GURL& requesting_frame) { | 70 const GURL& requesting_frame) { |
68 if (!BrowserThread::CurrentlyOn(BrowserThread::UI)) { | 71 if (!BrowserThread::CurrentlyOn(BrowserThread::UI)) { |
(...skipping 16 matching lines...) Expand all Loading... |
85 DCHECK(rvh->GetProcess()->IsGuest()); | 88 DCHECK(rvh->GetProcess()->IsGuest()); |
86 WebContentsImpl* guest_web_contents = | 89 WebContentsImpl* guest_web_contents = |
87 static_cast<WebContentsImpl*>(rvh->GetDelegate()->GetAsWebContents()); | 90 static_cast<WebContentsImpl*>(rvh->GetDelegate()->GetAsWebContents()); |
88 BrowserPluginGuest* guest = guest_web_contents->GetBrowserPluginGuest(); | 91 BrowserPluginGuest* guest = guest_web_contents->GetBrowserPluginGuest(); |
89 if (guest) | 92 if (guest) |
90 guest->CancelGeolocationRequest(bridge_id); | 93 guest->CancelGeolocationRequest(bridge_id); |
91 } | 94 } |
92 } | 95 } |
93 | 96 |
94 } // namespace content | 97 } // namespace content |
OLD | NEW |