Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(185)

Side by Side Diff: extensions/renderer/dispatcher.cc

Issue 2241203003: Pass user session type to extension feature checks (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: split out some stuff Created 4 years, 4 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
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 "extensions/renderer/dispatcher.h" 5 #include "extensions/renderer/dispatcher.h"
6 6
7 #include <stddef.h> 7 #include <stddef.h>
8 8
9 #include <memory> 9 #include <memory>
10 #include <utility> 10 #include <utility>
(...skipping 195 matching lines...) Expand 10 before | Expand all | Expand 10 after
206 206
207 // Note that we can't use Blink public APIs in the constructor becase Blink 207 // Note that we can't use Blink public APIs in the constructor becase Blink
208 // is not initialized at the point we create Dispatcher. 208 // is not initialized at the point we create Dispatcher.
209 Dispatcher::Dispatcher(DispatcherDelegate* delegate) 209 Dispatcher::Dispatcher(DispatcherDelegate* delegate)
210 : delegate_(delegate), 210 : delegate_(delegate),
211 content_watcher_(new ContentWatcher()), 211 content_watcher_(new ContentWatcher()),
212 source_map_(&ResourceBundle::GetSharedInstance()), 212 source_map_(&ResourceBundle::GetSharedInstance()),
213 v8_schema_registry_(new V8SchemaRegistry), 213 v8_schema_registry_(new V8SchemaRegistry),
214 user_script_set_manager_observer_(this), 214 user_script_set_manager_observer_(this),
215 webrequest_used_(false), 215 webrequest_used_(false),
216 activity_logging_enabled_(false) { 216 activity_logging_enabled_(false),
217 session_type_(Feature::SESSION_TYPE_UNSPECIFIED) {
217 const base::CommandLine& command_line = 218 const base::CommandLine& command_line =
218 *(base::CommandLine::ForCurrentProcess()); 219 *(base::CommandLine::ForCurrentProcess());
219 set_idle_notifications_ = 220 set_idle_notifications_ =
220 command_line.HasSwitch(switches::kExtensionProcess) || 221 command_line.HasSwitch(switches::kExtensionProcess) ||
221 command_line.HasSwitch(::switches::kSingleProcess); 222 command_line.HasSwitch(::switches::kSingleProcess);
222 223
223 if (set_idle_notifications_) { 224 if (set_idle_notifications_) {
224 RenderThread::Get()->SetIdleNotificationDelayInMs( 225 RenderThread::Get()->SetIdleNotificationDelayInMs(
225 kInitialExtensionIdleHandlerDelayMs); 226 kInitialExtensionIdleHandlerDelayMs);
226 } 227 }
(...skipping 85 matching lines...) Expand 10 before | Expand all | Expand 10 after
312 } 313 }
313 314
314 void Dispatcher::DidCreateScriptContext( 315 void Dispatcher::DidCreateScriptContext(
315 blink::WebLocalFrame* frame, 316 blink::WebLocalFrame* frame,
316 const v8::Local<v8::Context>& v8_context, 317 const v8::Local<v8::Context>& v8_context,
317 int extension_group, 318 int extension_group,
318 int world_id) { 319 int world_id) {
319 const base::TimeTicks start_time = base::TimeTicks::Now(); 320 const base::TimeTicks start_time = base::TimeTicks::Now();
320 321
321 ScriptContext* context = script_context_set_->Register( 322 ScriptContext* context = script_context_set_->Register(
322 frame, v8_context, extension_group, world_id); 323 frame, v8_context, session_type_, extension_group, world_id);
323 324
324 // Initialize origin permissions for content scripts, which can't be 325 // Initialize origin permissions for content scripts, which can't be
325 // initialized in |OnActivateExtension|. 326 // initialized in |OnActivateExtension|.
326 if (context->context_type() == Feature::CONTENT_SCRIPT_CONTEXT) 327 if (context->context_type() == Feature::CONTENT_SCRIPT_CONTEXT)
327 InitOriginPermissions(context->extension()); 328 InitOriginPermissions(context->extension());
328 329
329 { 330 {
330 std::unique_ptr<ModuleSystem> module_system( 331 std::unique_ptr<ModuleSystem> module_system(
331 new ModuleSystem(context, &source_map_)); 332 new ModuleSystem(context, &source_map_));
332 context->set_module_system(std::move(module_system)); 333 context->set_module_system(std::move(module_system));
(...skipping 99 matching lines...) Expand 10 before | Expand all | Expand 10 after
432 // to find them. 433 // to find them.
433 // 434 //
434 // Perhaps this could be solved with our own event on the service worker 435 // Perhaps this could be solved with our own event on the service worker
435 // saying that an extension is ready, and documenting that extension APIs 436 // saying that an extension is ready, and documenting that extension APIs
436 // won't work before that event has fired? 437 // won't work before that event has fired?
437 return; 438 return;
438 } 439 }
439 440
440 ScriptContext* context = new ScriptContext( 441 ScriptContext* context = new ScriptContext(
441 v8_context, nullptr, extension, Feature::SERVICE_WORKER_CONTEXT, 442 v8_context, nullptr, extension, Feature::SERVICE_WORKER_CONTEXT,
442 extension, Feature::SERVICE_WORKER_CONTEXT); 443 session_type_, extension, Feature::SERVICE_WORKER_CONTEXT);
443 context->set_url(url); 444 context->set_url(url);
444 445
445 if (ExtensionsClient::Get()->ExtensionAPIEnabledInExtensionServiceWorkers()) { 446 if (ExtensionsClient::Get()->ExtensionAPIEnabledInExtensionServiceWorkers()) {
446 WorkerThreadDispatcher::Get()->AddWorkerData(embedded_worker_id); 447 WorkerThreadDispatcher::Get()->AddWorkerData(embedded_worker_id);
447 { 448 {
448 // TODO(lazyboy): Make sure accessing |source_map_| in worker thread is 449 // TODO(lazyboy): Make sure accessing |source_map_| in worker thread is
449 // safe. 450 // safe.
450 std::unique_ptr<ModuleSystem> module_system( 451 std::unique_ptr<ModuleSystem> module_system(
451 new ModuleSystem(context, &source_map_)); 452 new ModuleSystem(context, &source_map_));
452 context->set_module_system(std::move(module_system)); 453 context->set_module_system(std::move(module_system));
(...skipping 496 matching lines...) Expand 10 before | Expand all | Expand 10 after
949 IPC_MESSAGE_HANDLER(ExtensionMsg_TransferBlobs, OnTransferBlobs) 950 IPC_MESSAGE_HANDLER(ExtensionMsg_TransferBlobs, OnTransferBlobs)
950 IPC_MESSAGE_HANDLER(ExtensionMsg_Unloaded, OnUnloaded) 951 IPC_MESSAGE_HANDLER(ExtensionMsg_Unloaded, OnUnloaded)
951 IPC_MESSAGE_HANDLER(ExtensionMsg_UpdatePermissions, OnUpdatePermissions) 952 IPC_MESSAGE_HANDLER(ExtensionMsg_UpdatePermissions, OnUpdatePermissions)
952 IPC_MESSAGE_HANDLER(ExtensionMsg_UpdateTabSpecificPermissions, 953 IPC_MESSAGE_HANDLER(ExtensionMsg_UpdateTabSpecificPermissions,
953 OnUpdateTabSpecificPermissions) 954 OnUpdateTabSpecificPermissions)
954 IPC_MESSAGE_HANDLER(ExtensionMsg_ClearTabSpecificPermissions, 955 IPC_MESSAGE_HANDLER(ExtensionMsg_ClearTabSpecificPermissions,
955 OnClearTabSpecificPermissions) 956 OnClearTabSpecificPermissions)
956 IPC_MESSAGE_HANDLER(ExtensionMsg_UsingWebRequestAPI, OnUsingWebRequestAPI) 957 IPC_MESSAGE_HANDLER(ExtensionMsg_UsingWebRequestAPI, OnUsingWebRequestAPI)
957 IPC_MESSAGE_HANDLER(ExtensionMsg_SetActivityLoggingEnabled, 958 IPC_MESSAGE_HANDLER(ExtensionMsg_SetActivityLoggingEnabled,
958 OnSetActivityLoggingEnabled) 959 OnSetActivityLoggingEnabled)
960 IPC_MESSAGE_HANDLER(ExtensionMsg_SetUserSessionType, OnSetUserSessionType)
959 IPC_MESSAGE_FORWARD(ExtensionMsg_WatchPages, 961 IPC_MESSAGE_FORWARD(ExtensionMsg_WatchPages,
960 content_watcher_.get(), 962 content_watcher_.get(),
961 ContentWatcher::OnWatchPages) 963 ContentWatcher::OnWatchPages)
962 IPC_MESSAGE_UNHANDLED(handled = false) 964 IPC_MESSAGE_UNHANDLED(handled = false)
963 IPC_END_MESSAGE_MAP() 965 IPC_END_MESSAGE_MAP()
964 966
965 return handled; 967 return handled;
966 } 968 }
967 void Dispatcher::IdleNotification() { 969 void Dispatcher::IdleNotification() {
968 if (set_idle_notifications_ && forced_idle_timer_) { 970 if (set_idle_notifications_ && forced_idle_timer_) {
(...skipping 306 matching lines...) Expand 10 before | Expand all | Expand 10 after
1275 void Dispatcher::OnSetActivityLoggingEnabled(bool enabled) { 1277 void Dispatcher::OnSetActivityLoggingEnabled(bool enabled) {
1276 activity_logging_enabled_ = enabled; 1278 activity_logging_enabled_ = enabled;
1277 if (enabled) { 1279 if (enabled) {
1278 for (const std::string& id : active_extension_ids_) 1280 for (const std::string& id : active_extension_ids_)
1279 DOMActivityLogger::AttachToWorld(DOMActivityLogger::kMainWorldId, id); 1281 DOMActivityLogger::AttachToWorld(DOMActivityLogger::kMainWorldId, id);
1280 } 1282 }
1281 script_injection_manager_->set_activity_logging_enabled(enabled); 1283 script_injection_manager_->set_activity_logging_enabled(enabled);
1282 user_script_set_manager_->set_activity_logging_enabled(enabled); 1284 user_script_set_manager_->set_activity_logging_enabled(enabled);
1283 } 1285 }
1284 1286
1287 void Dispatcher::OnSetUserSessionType(Feature::SessionType session_type) {
1288 session_type_ = session_type;
1289 }
1290
1285 void Dispatcher::OnUserScriptsUpdated(const std::set<HostID>& changed_hosts) { 1291 void Dispatcher::OnUserScriptsUpdated(const std::set<HostID>& changed_hosts) {
1286 UpdateActiveExtensions(); 1292 UpdateActiveExtensions();
1287 } 1293 }
1288 1294
1289 void Dispatcher::UpdateActiveExtensions() { 1295 void Dispatcher::UpdateActiveExtensions() {
1290 std::set<std::string> active_extensions = active_extension_ids_; 1296 std::set<std::string> active_extensions = active_extension_ids_;
1291 user_script_set_manager_->GetAllActiveExtensionIds(&active_extensions); 1297 user_script_set_manager_->GetAllActiveExtensionIds(&active_extensions);
1292 delegate_->OnActiveExtensionsUpdated(active_extensions); 1298 delegate_->OnActiveExtensionsUpdated(active_extensions);
1293 } 1299 }
1294 1300
(...skipping 372 matching lines...) Expand 10 before | Expand all | Expand 10 after
1667 // The "guestViewDeny" module must always be loaded last. It registers 1673 // The "guestViewDeny" module must always be loaded last. It registers
1668 // error-providing custom elements for the GuestView types that are not 1674 // error-providing custom elements for the GuestView types that are not
1669 // available, and thus all of those types must have been checked and loaded 1675 // available, and thus all of those types must have been checked and loaded
1670 // (or not loaded) beforehand. 1676 // (or not loaded) beforehand.
1671 if (context_type == Feature::BLESSED_EXTENSION_CONTEXT) { 1677 if (context_type == Feature::BLESSED_EXTENSION_CONTEXT) {
1672 module_system->Require("guestViewDeny"); 1678 module_system->Require("guestViewDeny");
1673 } 1679 }
1674 } 1680 }
1675 1681
1676 } // namespace extensions 1682 } // namespace extensions
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698