OLD | NEW |
1 // Copyright 2014 The Chromium Authors. All rights reserved. | 1 // Copyright 2014 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 "chrome/browser/extensions/active_script_controller.h" | 5 #include "chrome/browser/extensions/active_script_controller.h" |
6 | 6 |
7 #include "base/bind.h" | 7 #include "base/bind.h" |
8 #include "base/bind_helpers.h" | 8 #include "base/bind_helpers.h" |
9 #include "base/metrics/histogram.h" | 9 #include "base/metrics/histogram.h" |
10 #include "base/stl_util.h" | 10 #include "base/stl_util.h" |
(...skipping 124 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
135 | 135 |
136 return LocationBarController::ACTION_NONE; | 136 return LocationBarController::ACTION_NONE; |
137 } | 137 } |
138 | 138 |
139 void ActiveScriptController::OnNavigated() { | 139 void ActiveScriptController::OnNavigated() { |
140 LogUMA(); | 140 LogUMA(); |
141 requesting_extensions_.clear(); | 141 requesting_extensions_.clear(); |
142 pending_requests_.clear(); | 142 pending_requests_.clear(); |
143 } | 143 } |
144 | 144 |
145 void ActiveScriptController::OnNotifyExtensionScriptExecution( | 145 void ActiveScriptController::OnRequestContentScriptPermission( |
146 const std::string& extension_id, | 146 const std::string& extension_id, |
147 int page_id) { | 147 int page_id, |
| 148 int request_id) { |
148 if (!Extension::IdIsValid(extension_id)) { | 149 if (!Extension::IdIsValid(extension_id)) { |
149 NOTREACHED() << "'" << extension_id << "' is not a valid id."; | 150 NOTREACHED() << "'" << extension_id << "' is not a valid id."; |
150 return; | 151 return; |
151 } | 152 } |
152 | 153 |
| 154 // This base::Unretained() is safe, because this can only be called from |
| 155 // itself. |
153 GetPermissionForInjection( | 156 GetPermissionForInjection( |
154 extension_id, | 157 extension_id, |
155 page_id, | 158 page_id, |
156 scoped_ptr<const base::Closure>( | 159 scoped_ptr<const base::Closure>(new base::Closure( |
157 new base::Closure(base::Bind(&base::DoNothing)))); | 160 base::Bind(&ActiveScriptController::GrantContentScriptPermission, |
| 161 base::Unretained(this), |
| 162 request_id)))); |
| 163 } |
| 164 |
| 165 void ActiveScriptController::GrantContentScriptPermission(int request_id) { |
| 166 content::RenderViewHost* render_view_host = |
| 167 web_contents()->GetRenderViewHost(); |
| 168 if (render_view_host) { |
| 169 render_view_host->Send(new ExtensionMsg_GrantContentScriptPermission( |
| 170 render_view_host->GetRoutingID(), |
| 171 request_id)); |
| 172 } |
158 } | 173 } |
159 | 174 |
160 void ActiveScriptController::AddOrProcessRequest( | 175 void ActiveScriptController::AddOrProcessRequest( |
161 const Extension* extension, | 176 const Extension* extension, |
162 scoped_ptr<const base::Closure> request) { | 177 scoped_ptr<const base::Closure> request) { |
163 // If the extension does not require permissions, run it immediately. | 178 // If the extension does not require permissions, run it immediately. |
164 if (!PermissionsData::RequiresActionForScriptExecution(extension)) { | 179 if (!PermissionsData::RequiresActionForScriptExecution(extension)) { |
165 request->Run(); | 180 request->Run(); |
166 return; | 181 return; |
167 } | 182 } |
(...skipping 13 matching lines...) Expand all Loading... |
181 // If this was the first entry, notify the location bar that there's a new | 196 // If this was the first entry, notify the location bar that there's a new |
182 // icon. | 197 // icon. |
183 if (list->size() == 1u) | 198 if (list->size() == 1u) |
184 LocationBarController::NotifyChange(web_contents()); | 199 LocationBarController::NotifyChange(web_contents()); |
185 | 200 |
186 } | 201 } |
187 | 202 |
188 bool ActiveScriptController::OnMessageReceived(const IPC::Message& message) { | 203 bool ActiveScriptController::OnMessageReceived(const IPC::Message& message) { |
189 bool handled = true; | 204 bool handled = true; |
190 IPC_BEGIN_MESSAGE_MAP(ActiveScriptController, message) | 205 IPC_BEGIN_MESSAGE_MAP(ActiveScriptController, message) |
191 IPC_MESSAGE_HANDLER(ExtensionHostMsg_NotifyExtensionScriptExecution, | 206 IPC_MESSAGE_HANDLER(ExtensionHostMsg_RequestContentScriptPermission, |
192 OnNotifyExtensionScriptExecution) | 207 OnRequestContentScriptPermission) |
193 IPC_MESSAGE_UNHANDLED(handled = false) | 208 IPC_MESSAGE_UNHANDLED(handled = false) |
194 IPC_END_MESSAGE_MAP() | 209 IPC_END_MESSAGE_MAP() |
195 return handled; | 210 return handled; |
196 } | 211 } |
197 | 212 |
198 void ActiveScriptController::LogUMA() const { | 213 void ActiveScriptController::LogUMA() const { |
199 UMA_HISTOGRAM_COUNTS_100( | 214 UMA_HISTOGRAM_COUNTS_100( |
200 "Extensions.ActiveScriptController.ShownActiveScriptsOnPage", | 215 "Extensions.ActiveScriptController.ShownActiveScriptsOnPage", |
201 pending_requests_.size()); | 216 pending_requests_.size()); |
202 } | 217 } |
203 | 218 |
204 } // namespace extensions | 219 } // namespace extensions |
OLD | NEW |