diff options
author | aa@chromium.org <aa@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2010-07-01 01:20:59 +0000 |
---|---|---|
committer | aa@chromium.org <aa@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2010-07-01 01:20:59 +0000 |
commit | 4fdbc1492aa5003c6fdc0df7f95b3ae9046380e2 (patch) | |
tree | e806806102de20b0fab1c1d497d1332839b6a77f /chrome/renderer | |
parent | 17d40f00b7d7a078649fb142961f612c29553ec0 (diff) | |
download | chromium_src-4fdbc1492aa5003c6fdc0df7f95b3ae9046380e2.zip chromium_src-4fdbc1492aa5003c6fdc0df7f95b3ae9046380e2.tar.gz chromium_src-4fdbc1492aa5003c6fdc0df7f95b3ae9046380e2.tar.bz2 |
Add the concept of browse extent.
BUG=46636
Review URL: http://codereview.chromium.org/2862034
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@51327 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'chrome/renderer')
-rw-r--r-- | chrome/renderer/render_thread.cc | 17 | ||||
-rw-r--r-- | chrome/renderer/render_thread.h | 5 | ||||
-rw-r--r-- | chrome/renderer/render_view.cc | 13 |
3 files changed, 28 insertions, 7 deletions
diff --git a/chrome/renderer/render_thread.cc b/chrome/renderer/render_thread.cc index 87155c3b..d0d9eed 100644 --- a/chrome/renderer/render_thread.cc +++ b/chrome/renderer/render_thread.cc @@ -484,8 +484,10 @@ 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; + extension_extents_[i].extension_id = params.extension_apps[i].extension_id; + extension_extents_[i].web_extent = params.extension_apps[i].web_extent; + extension_extents_[i].browse_extent = + params.extension_apps[i].browse_extent; } } @@ -1040,7 +1042,7 @@ void RenderThread::OnGpuChannelEstablished( } } -std::string RenderThread::GetExtensionIdForURL(const GURL& url) { +std::string RenderThread::GetExtensionIdByURL(const GURL& url) { if (url.SchemeIs(chrome::kExtensionScheme)) return url.host(); @@ -1051,3 +1053,12 @@ std::string RenderThread::GetExtensionIdForURL(const GURL& url) { return std::string(); } + +std::string RenderThread::GetExtensionIdByBrowseExtent(const GURL& url) { + for (size_t i = 0; i < extension_extents_.size(); ++i) { + if (extension_extents_[i].browse_extent.ContainsURL(url)) + return extension_extents_[i].extension_id; + } + + return std::string(); +} diff --git a/chrome/renderer/render_thread.h b/chrome/renderer/render_thread.h index 5b8d024..03a865b 100644 --- a/chrome/renderer/render_thread.h +++ b/chrome/renderer/render_thread.h @@ -220,7 +220,9 @@ class RenderThread : public RenderThreadBase, // none. This includes web URLs that are part of an extension's web extent. // TODO(mpcomplete): this doesn't feel like it belongs here. Find a better // place. - std::string GetExtensionIdForURL(const GURL& url); + std::string GetExtensionIdByURL(const GURL& url); + + std::string GetExtensionIdByBrowseExtent(const GURL& url); private: // Contains extension-related data that the renderer needs to know about. @@ -229,6 +231,7 @@ class RenderThread : public RenderThreadBase, struct ExtensionInfo { std::string extension_id; ExtensionExtent web_extent; + ExtensionExtent browse_extent; }; virtual void OnControlMessageReceived(const IPC::Message& msg); diff --git a/chrome/renderer/render_view.cc b/chrome/renderer/render_view.cc index 59ec64a..d66d791 100644 --- a/chrome/renderer/render_view.cc +++ b/chrome/renderer/render_view.cc @@ -344,10 +344,17 @@ static bool CrossesExtensionExtents(WebFrame* frame, const GURL& new_url) { old_url = frame->opener()->url(); std::string old_extension = - RenderThread::current()->GetExtensionIdForURL(old_url); + RenderThread::current()->GetExtensionIdByURL(old_url); + if (!old_extension.empty()) { + if (RenderThread::current()->GetExtensionIdByBrowseExtent(new_url) == + old_extension) { + return false; + } + } + std::string new_extension = - RenderThread::current()->GetExtensionIdForURL(new_url); - return (old_extension != new_extension); + RenderThread::current()->GetExtensionIdByURL(new_url); + return old_extension != new_extension; } // Returns the ISO 639_1 language code of the specified |text|, or 'unknown' |