diff options
author | mpcomplete@chromium.org <mpcomplete@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2010-04-22 23:56:30 +0000 |
---|---|---|
committer | mpcomplete@chromium.org <mpcomplete@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2010-04-22 23:56:30 +0000 |
commit | 3a8eecb2bb859491b344be321abb4ff3d2b7f0f3 (patch) | |
tree | 07f90f564c2c5d92d38f1fdae15597a523ca31c1 /chrome/renderer/render_thread.cc | |
parent | 58bc899f2ffdc14d78b6f209f57415e79837d7a6 (diff) | |
download | chromium_src-3a8eecb2bb859491b344be321abb4ff3d2b7f0f3.zip chromium_src-3a8eecb2bb859491b344be321abb4ff3d2b7f0f3.tar.gz chromium_src-3a8eecb2bb859491b344be321abb4ff3d2b7f0f3.tar.bz2 |
Implement app process model isolation.
The process grouping logic is unfortunately duplicated in SiteInstance and
RenderView. URLs that are part of extension X's web extent get converted into
a pseudo URL of the form chrome-extension://X/path. This groups pages from an
extension app and its offline resources into the same process.
The rest is mostly plumbing and passing data around.
BUG=41273
Review URL: http://codereview.chromium.org/1735004
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@45384 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'chrome/renderer/render_thread.cc')
-rw-r--r-- | chrome/renderer/render_thread.cc | 23 |
1 files changed, 23 insertions, 0 deletions
diff --git a/chrome/renderer/render_thread.cc b/chrome/renderer/render_thread.cc index 38e068a..b7fb2af 100644 --- a/chrome/renderer/render_thread.cc +++ b/chrome/renderer/render_thread.cc @@ -474,6 +474,15 @@ void RenderThread::OnSetExtensionFunctionNames( ExtensionProcessBindings::SetFunctionNames(names); } +void RenderThread::OnExtensionExtentsUpdated( + const ViewMsg_ExtensionExtentsUpdated_Params& params) { + extension_extents_.resize(params.extension_apps.size()); + for (size_t i = 0; i < params.extension_apps.size(); ++i) { + extension_extents_[i].extension_id = params.extension_apps[i].first; + extension_extents_[i].web_extent = params.extension_apps[i].second; + } +} + void RenderThread::OnPageActionsUpdated( const std::string& extension_id, const std::vector<std::string>& page_actions) { @@ -548,6 +557,8 @@ void RenderThread::OnControlMessageReceived(const IPC::Message& msg) { OnExtensionMessageInvoke) IPC_MESSAGE_HANDLER(ViewMsg_Extension_SetFunctionNames, OnSetExtensionFunctionNames) + IPC_MESSAGE_HANDLER(ViewMsg_ExtensionExtentsUpdated, + OnExtensionExtentsUpdated) IPC_MESSAGE_HANDLER(ViewMsg_PurgeMemory, OnPurgeMemory) IPC_MESSAGE_HANDLER(ViewMsg_PurgePluginListCache, OnPurgePluginListCache) @@ -1012,3 +1023,15 @@ void RenderThread::OnGpuChannelEstablished( gpu_channel_ = NULL; } } + +std::string RenderThread::GetExtensionIdForURL(const GURL& url) { + if (url.SchemeIs(chrome::kExtensionScheme)) + return url.host(); + + for (size_t i = 0; i < extension_extents_.size(); ++i) { + if (extension_extents_[i].web_extent.ContainsURL(url)) + return extension_extents_[i].extension_id; + } + + return std::string(); +} |