| OLD | NEW |
| 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 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_guest.h" | 5 #include "content/browser/browser_plugin/browser_plugin_guest.h" |
| 6 | 6 |
| 7 #include <algorithm> | 7 #include <algorithm> |
| 8 | 8 |
| 9 #include "base/message_loop/message_loop.h" | 9 #include "base/message_loop/message_loop.h" |
| 10 #include "base/strings/string_util.h" | 10 #include "base/strings/string_util.h" |
| (...skipping 94 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 105 | 105 |
| 106 private: | 106 private: |
| 107 virtual ~DownloadRequest() {} | 107 virtual ~DownloadRequest() {} |
| 108 base::Callback<void(bool)> callback_; | 108 base::Callback<void(bool)> callback_; |
| 109 }; | 109 }; |
| 110 | 110 |
| 111 class BrowserPluginGuest::GeolocationRequest : public PermissionRequest { | 111 class BrowserPluginGuest::GeolocationRequest : public PermissionRequest { |
| 112 public: | 112 public: |
| 113 GeolocationRequest(const base::WeakPtr<BrowserPluginGuest>& guest, | 113 GeolocationRequest(const base::WeakPtr<BrowserPluginGuest>& guest, |
| 114 GeolocationCallback callback, | 114 GeolocationCallback callback, |
| 115 int bridge_id) | 115 int bridge_id, |
| 116 bool user_gesture) |
| 116 : PermissionRequest(guest), | 117 : PermissionRequest(guest), |
| 117 callback_(callback), | 118 callback_(callback), |
| 118 bridge_id_(bridge_id) { | 119 bridge_id_(bridge_id), |
| 120 user_gesture_(user_gesture) { |
| 119 RecordAction( | 121 RecordAction( |
| 120 base::UserMetricsAction("BrowserPlugin.Guest.PermissionRequest.Geolocati
on")); | 122 base::UserMetricsAction("BrowserPlugin.Guest.PermissionRequest.Geolocati
on")); |
| 121 } | 123 } |
| 122 | 124 |
| 123 virtual void RespondImpl(bool should_allow, | 125 virtual void RespondImpl(bool should_allow, |
| 124 const std::string& user_input) OVERRIDE { | 126 const std::string& user_input) OVERRIDE { |
| 125 WebContents* web_contents = guest_->embedder_web_contents(); | 127 WebContents* web_contents = guest_->embedder_web_contents(); |
| 126 if (should_allow && web_contents) { | 128 if (should_allow && web_contents) { |
| 127 // If renderer side embedder decides to allow gelocation, we need to check | 129 // If renderer side embedder decides to allow gelocation, we need to check |
| 128 // if the app/embedder itself has geolocation access. | 130 // if the app/embedder itself has geolocation access. |
| 129 BrowserContext* browser_context = web_contents->GetBrowserContext(); | 131 BrowserContext* browser_context = web_contents->GetBrowserContext(); |
| 130 if (browser_context) { | 132 if (browser_context) { |
| 131 GeolocationPermissionContext* geolocation_context = | 133 GeolocationPermissionContext* geolocation_context = |
| 132 browser_context->GetGeolocationPermissionContext(); | 134 browser_context->GetGeolocationPermissionContext(); |
| 133 if (geolocation_context) { | 135 if (geolocation_context) { |
| 134 base::Callback<void(bool)> geolocation_callback = base::Bind( | 136 base::Callback<void(bool)> geolocation_callback = base::Bind( |
| 135 &BrowserPluginGuest::SetGeolocationPermission, | 137 &BrowserPluginGuest::SetGeolocationPermission, |
| 136 guest_, | 138 guest_, |
| 137 callback_, | 139 callback_, |
| 138 bridge_id_); | 140 bridge_id_); |
| 139 geolocation_context->RequestGeolocationPermission( | 141 geolocation_context->RequestGeolocationPermission( |
| 140 web_contents->GetRenderProcessHost()->GetID(), | 142 web_contents->GetRenderProcessHost()->GetID(), |
| 141 web_contents->GetRoutingID(), | 143 web_contents->GetRoutingID(), |
| 142 // The geolocation permission request here is not initiated | 144 // The geolocation permission request here is not initiated |
| 143 // through WebGeolocationPermissionRequest. We are only interested | 145 // through WebGeolocationPermissionRequest. We are only interested |
| 144 // in the fact whether the embedder/app has geolocation | 146 // in the fact whether the embedder/app has geolocation |
| 145 // permission. Therefore we use an invalid |bridge_id|. | 147 // permission. Therefore we use an invalid |bridge_id|. |
| 146 -1 /* bridge_id */, | 148 -1 /* bridge_id */, |
| 147 web_contents->GetLastCommittedURL(), | 149 web_contents->GetLastCommittedURL(), |
| 150 user_gesture_, |
| 148 geolocation_callback); | 151 geolocation_callback); |
| 149 return; | 152 return; |
| 150 } | 153 } |
| 151 } | 154 } |
| 152 } | 155 } |
| 153 guest_->SetGeolocationPermission(callback_, bridge_id_, false); | 156 guest_->SetGeolocationPermission(callback_, bridge_id_, false); |
| 154 } | 157 } |
| 155 | 158 |
| 156 private: | 159 private: |
| 157 virtual ~GeolocationRequest() {} | 160 virtual ~GeolocationRequest() {} |
| 158 base::Callback<void(bool)> callback_; | 161 base::Callback<void(bool)> callback_; |
| 159 int bridge_id_; | 162 int bridge_id_; |
| 163 bool user_gesture_; |
| 160 }; | 164 }; |
| 161 | 165 |
| 162 class BrowserPluginGuest::MediaRequest : public PermissionRequest { | 166 class BrowserPluginGuest::MediaRequest : public PermissionRequest { |
| 163 public: | 167 public: |
| 164 MediaRequest(const base::WeakPtr<BrowserPluginGuest>& guest, | 168 MediaRequest(const base::WeakPtr<BrowserPluginGuest>& guest, |
| 165 const MediaStreamRequest& request, | 169 const MediaStreamRequest& request, |
| 166 const MediaResponseCallback& callback) | 170 const MediaResponseCallback& callback) |
| 167 : PermissionRequest(guest), | 171 : PermissionRequest(guest), |
| 168 request_(request), | 172 request_(request), |
| 169 callback_(callback) { | 173 callback_(callback) { |
| (...skipping 880 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1050 } | 1054 } |
| 1051 | 1055 |
| 1052 void BrowserPluginGuest::SetDelegate(BrowserPluginGuestDelegate* delegate) { | 1056 void BrowserPluginGuest::SetDelegate(BrowserPluginGuestDelegate* delegate) { |
| 1053 DCHECK(!delegate_); | 1057 DCHECK(!delegate_); |
| 1054 delegate_.reset(delegate); | 1058 delegate_.reset(delegate); |
| 1055 } | 1059 } |
| 1056 | 1060 |
| 1057 void BrowserPluginGuest::AskEmbedderForGeolocationPermission( | 1061 void BrowserPluginGuest::AskEmbedderForGeolocationPermission( |
| 1058 int bridge_id, | 1062 int bridge_id, |
| 1059 const GURL& requesting_frame, | 1063 const GURL& requesting_frame, |
| 1064 bool user_gesture, |
| 1060 const GeolocationCallback& callback) { | 1065 const GeolocationCallback& callback) { |
| 1061 base::DictionaryValue request_info; | 1066 base::DictionaryValue request_info; |
| 1062 request_info.Set(browser_plugin::kURL, | 1067 request_info.Set(browser_plugin::kURL, |
| 1063 base::Value::CreateStringValue(requesting_frame.spec())); | 1068 base::Value::CreateStringValue(requesting_frame.spec())); |
| 1064 | 1069 |
| 1065 int request_id = | 1070 int request_id = |
| 1066 RequestPermission(BROWSER_PLUGIN_PERMISSION_TYPE_GEOLOCATION, | 1071 RequestPermission(BROWSER_PLUGIN_PERMISSION_TYPE_GEOLOCATION, |
| 1067 new GeolocationRequest(weak_ptr_factory_.GetWeakPtr(), | 1072 new GeolocationRequest(weak_ptr_factory_.GetWeakPtr(), |
| 1068 callback, | 1073 callback, |
| 1069 bridge_id), | 1074 bridge_id, |
| 1075 user_gesture), |
| 1070 request_info); | 1076 request_info); |
| 1071 | 1077 |
| 1072 DCHECK(bridge_id_to_request_id_map_.find(bridge_id) == | 1078 DCHECK(bridge_id_to_request_id_map_.find(bridge_id) == |
| 1073 bridge_id_to_request_id_map_.end()); | 1079 bridge_id_to_request_id_map_.end()); |
| 1074 bridge_id_to_request_id_map_[bridge_id] = request_id; | 1080 bridge_id_to_request_id_map_[bridge_id] = request_id; |
| 1075 } | 1081 } |
| 1076 | 1082 |
| 1077 int BrowserPluginGuest::RemoveBridgeID(int bridge_id) { | 1083 int BrowserPluginGuest::RemoveBridgeID(int bridge_id) { |
| 1078 std::map<int, int>::iterator bridge_itr = | 1084 std::map<int, int>::iterator bridge_itr = |
| 1079 bridge_id_to_request_id_map_.find(bridge_id); | 1085 bridge_id_to_request_id_map_.find(bridge_id); |
| (...skipping 846 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1926 base::Value::CreateStringValue(request_method)); | 1932 base::Value::CreateStringValue(request_method)); |
| 1927 request_info.Set(browser_plugin::kURL, base::Value::CreateStringValue(url)); | 1933 request_info.Set(browser_plugin::kURL, base::Value::CreateStringValue(url)); |
| 1928 | 1934 |
| 1929 RequestPermission(BROWSER_PLUGIN_PERMISSION_TYPE_DOWNLOAD, | 1935 RequestPermission(BROWSER_PLUGIN_PERMISSION_TYPE_DOWNLOAD, |
| 1930 new DownloadRequest(weak_ptr_factory_.GetWeakPtr(), | 1936 new DownloadRequest(weak_ptr_factory_.GetWeakPtr(), |
| 1931 callback), | 1937 callback), |
| 1932 request_info); | 1938 request_info); |
| 1933 } | 1939 } |
| 1934 | 1940 |
| 1935 } // namespace content | 1941 } // namespace content |
| OLD | NEW |