| 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 "extensions/browser/user_script_loader.h" | 5 #include "extensions/browser/user_script_loader.h" |
| 6 | 6 |
| 7 #include <set> | 7 #include <set> |
| 8 #include <string> | 8 #include <string> |
| 9 | 9 |
| 10 #include "base/version.h" | 10 #include "base/version.h" |
| (...skipping 360 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 371 content::NotificationService::current()->Notify( | 371 content::NotificationService::current()->Notify( |
| 372 extensions::NOTIFICATION_USER_SCRIPTS_UPDATED, | 372 extensions::NOTIFICATION_USER_SCRIPTS_UPDATED, |
| 373 content::Source<BrowserContext>(browser_context_), | 373 content::Source<BrowserContext>(browser_context_), |
| 374 content::Details<base::SharedMemory>(shared_memory_.get())); | 374 content::Details<base::SharedMemory>(shared_memory_.get())); |
| 375 FOR_EACH_OBSERVER(Observer, observers_, OnScriptsLoaded(this)); | 375 FOR_EACH_OBSERVER(Observer, observers_, OnScriptsLoaded(this)); |
| 376 } | 376 } |
| 377 | 377 |
| 378 void UserScriptLoader::SendUpdate(content::RenderProcessHost* process, | 378 void UserScriptLoader::SendUpdate(content::RenderProcessHost* process, |
| 379 base::SharedMemory* shared_memory, | 379 base::SharedMemory* shared_memory, |
| 380 const std::set<HostID>& changed_hosts) { | 380 const std::set<HostID>& changed_hosts) { |
| 381 // Don't allow injection of extensions' content scripts into <webview>. | 381 // Don't allow injection of non-whitelisted extensions' content scripts |
| 382 if (process->IsIsolatedGuest() && host_id().id().empty()) | 382 // into <webview>. |
| 383 return; | 383 bool whitelisted_only = process->IsIsolatedGuest() && host_id().id().empty(); |
| 384 | 384 |
| 385 // Make sure we only send user scripts to processes in our browser_context. | 385 // Make sure we only send user scripts to processes in our browser_context. |
| 386 if (!ExtensionsBrowserClient::Get()->IsSameContext( | 386 if (!ExtensionsBrowserClient::Get()->IsSameContext( |
| 387 browser_context_, process->GetBrowserContext())) | 387 browser_context_, process->GetBrowserContext())) |
| 388 return; | 388 return; |
| 389 | 389 |
| 390 // If the process is being started asynchronously, early return. We'll end up | 390 // If the process is being started asynchronously, early return. We'll end up |
| 391 // calling InitUserScripts when it's created which will call this again. | 391 // calling InitUserScripts when it's created which will call this again. |
| 392 base::ProcessHandle handle = process->GetHandle(); | 392 base::ProcessHandle handle = process->GetHandle(); |
| 393 if (!handle) | 393 if (!handle) |
| 394 return; | 394 return; |
| 395 | 395 |
| 396 base::SharedMemoryHandle handle_for_process; | 396 base::SharedMemoryHandle handle_for_process; |
| 397 if (!shared_memory->ShareToProcess(handle, &handle_for_process)) | 397 if (!shared_memory->ShareToProcess(handle, &handle_for_process)) |
| 398 return; // This can legitimately fail if the renderer asserts at startup. | 398 return; // This can legitimately fail if the renderer asserts at startup. |
| 399 | 399 |
| 400 if (base::SharedMemory::IsHandleValid(handle_for_process)) { | 400 if (base::SharedMemory::IsHandleValid(handle_for_process)) { |
| 401 process->Send(new ExtensionMsg_UpdateUserScripts(handle_for_process, | 401 process->Send(new ExtensionMsg_UpdateUserScripts(handle_for_process, |
| 402 host_id(), changed_hosts)); | 402 host_id(), |
| 403 changed_hosts, |
| 404 whitelisted_only)); |
| 403 } | 405 } |
| 404 } | 406 } |
| 405 | 407 |
| 406 } // namespace extensions | 408 } // namespace extensions |
| OLD | NEW |