| Index: chrome/renderer/render_view.cc
|
| diff --git a/chrome/renderer/render_view.cc b/chrome/renderer/render_view.cc
|
| index 3e32e3b3152837ff4797901f9ba4442f50663175..2b34e5c9ff35c5c85180b5faa76d37a5fa04307f 100644
|
| --- a/chrome/renderer/render_view.cc
|
| +++ b/chrome/renderer/render_view.cc
|
| @@ -387,15 +387,17 @@ static bool IsWhitelistedForContentSettings(WebFrame* frame) {
|
| // we would enter an extension app's extent from a non-app. We avoid swapping
|
| // processes to exit an app for now, since we do not yet restore context (such
|
| // as window.opener) if the window navigates back.
|
| -static bool CrossesIntoExtensionExtent(WebFrame* frame, const GURL& new_url) {
|
| +static bool CrossesIntoExtensionExtent(const ExtensionRendererInfo* extensions,
|
| + WebFrame* frame,
|
| + const GURL& new_url) {
|
| // If the URL is still empty, this is a window.open navigation. Check the
|
| // opener's URL.
|
| GURL old_url(frame->url());
|
| if (old_url.is_empty() && frame->opener())
|
| old_url = frame->opener()->url();
|
|
|
| - return !ExtensionRendererInfo::InSameExtent(old_url, new_url) &&
|
| - !ExtensionRendererInfo::GetByURL(old_url);
|
| + return !extensions->InSameExtent(old_url, new_url) &&
|
| + !extensions->GetByURL(old_url);
|
| }
|
|
|
| // Returns the ISO 639_1 language code of the specified |text|, or 'unknown'
|
| @@ -1887,14 +1889,14 @@ void RenderView::LoadNavigationErrorPage(WebFrame* frame,
|
| bool replace) {
|
| GURL failed_url = error.unreachableURL;
|
| std::string alt_html;
|
| - ExtensionRendererInfo* extension = NULL;
|
| + const Extension* extension = NULL;
|
| if (html.empty()) {
|
| // Use a local error page.
|
| int resource_id;
|
| DictionaryValue error_strings;
|
|
|
| if (failed_url.is_valid() && !failed_url.SchemeIs(chrome::kExtensionScheme))
|
| - extension = ExtensionRendererInfo::GetByURL(failed_url);
|
| + extension = render_thread_->GetExtensions()->GetByURL(failed_url);
|
| if (extension) {
|
| LocalizedError::GetAppErrorStrings(error, failed_url, extension,
|
| &error_strings);
|
| @@ -2625,7 +2627,7 @@ void RenderView::show(WebNavigationPolicy policy) {
|
|
|
| // Extensions and apps always allowed to create unrequested popups. The second
|
| // check is necessary to include content scripts.
|
| - if (ExtensionRendererInfo::GetByURL(creator_url_) ||
|
| + if (render_thread_->GetExtensions()->GetByURL(creator_url_) ||
|
| bindings_utils::GetInfoForCurrentContext()) {
|
| opened_by_user_gesture_ = true;
|
| }
|
| @@ -2963,7 +2965,11 @@ WebNavigationPolicy RenderView::decidePolicyForNavigation(
|
| // TODO(creis): For now, we only swap processes to enter an app and not
|
| // exit it, since we currently lose context (e.g., window.opener) if the
|
| // window navigates back. See crbug.com/65953.
|
| - if (!should_fork && CrossesIntoExtensionExtent(frame, url)) {
|
| + if (!should_fork &&
|
| + CrossesIntoExtensionExtent(
|
| + render_thread_->GetExtensions(),
|
| + frame,
|
| + url)) {
|
| // Include the referrer in this case since we're going from a hosted web
|
| // page. (the packaged case is handled previously by the extension
|
| // navigation test)
|
| @@ -3926,8 +3932,8 @@ webkit::npapi::WebPluginDelegate* RenderView::CreatePluginDelegate(
|
| // appropriate permission, or when explicitly enabled on the command line.
|
|
|
| GURL main_frame_url(webview()->mainFrame()->url());
|
| - ExtensionRendererInfo* extension =
|
| - ExtensionRendererInfo::GetByURL(main_frame_url);
|
| + const Extension* extension =
|
| + render_thread_->GetExtensions()->GetByURL(main_frame_url);
|
| bool in_ext = extension != NULL;
|
| bool explicit_enable =
|
| CommandLine::ForCurrentProcess()->HasSwitch(switches::kInternalNaCl);
|
| @@ -5395,24 +5401,16 @@ void RenderView::ExecuteCodeImpl(WebFrame* frame,
|
| frame_it != frame_vector.end(); ++frame_it) {
|
| WebFrame* frame = *frame_it;
|
| if (params.is_javascript) {
|
| - ExtensionRendererInfo* extension =
|
| - ExtensionRendererInfo::GetByID(params.extension_id);
|
| + const Extension* extension =
|
| + render_thread_->GetExtensions()->GetByID(params.extension_id);
|
|
|
| // Since extension info is sent separately from user script info, they can
|
| // be out of sync. We just ignore this situation.
|
| if (!extension)
|
| continue;
|
|
|
| - const std::vector<URLPattern> host_permissions =
|
| - extension->host_permissions();
|
| - if (!Extension::CanExecuteScriptOnPage(
|
| - frame->url(),
|
| - extension->allowed_to_execute_script_everywhere(),
|
| - &host_permissions,
|
| - NULL,
|
| - NULL)) {
|
| + if (!extension->CanExecuteScriptOnPage(frame->url(), NULL, NULL))
|
| continue;
|
| - }
|
|
|
| std::vector<WebScriptSource> sources;
|
| sources.push_back(
|
|
|