diff options
author | Devlin Cronin <rdevlin.cronin@chromium.org> | 2015-10-05 10:16:21 -0700 |
---|---|---|
committer | Devlin Cronin <rdevlin.cronin@chromium.org> | 2015-10-05 17:17:32 +0000 |
commit | 64a14d8ddcf9eb1857c317c86b62feeac93f974e (patch) | |
tree | 334895e37ec8e96d1ac9f13f782125f10e42d243 | |
parent | b34cf9a6d886714de108f8243586ebfd60b75012 (diff) | |
download | chromium_src-64a14d8ddcf9eb1857c317c86b62feeac93f974e.zip chromium_src-64a14d8ddcf9eb1857c317c86b62feeac93f974e.tar.gz chromium_src-64a14d8ddcf9eb1857c317c86b62feeac93f974e.tar.bz2 |
[Extensions Page] Fix multiple errors
Fix:
- the launch app link being visible when the app was disabled (533280).
- fake incognito background page inspect links (534957).
- overly sticky incognito warnings (528952).
- multiple inspect links for the same url (492012). (FWIW, this one is just
because we started showing frames separately with no indication.)
BUG=533280
BUG=534957
BUG=528952
BUG=492012
Review URL: https://codereview.chromium.org/1373403002
Cr-Commit-Position: refs/heads/master@{#351841}
(cherry picked from commit 36bdeb3fb8984da7875aa970ba9f95c0d64c221c)
Review URL: https://codereview.chromium.org/1367403008 .
Cr-Commit-Position: refs/branch-heads/2490@{#487}
Cr-Branched-From: 7790a3535f2a81a03685eca31a32cf69ae0c114f-refs/heads/master@{#344925}
10 files changed, 48 insertions, 29 deletions
diff --git a/chrome/app/generated_resources.grd b/chrome/app/generated_resources.grd index cfd14da..eb25261 100644 --- a/chrome/app/generated_resources.grd +++ b/chrome/app/generated_resources.grd @@ -4467,6 +4467,9 @@ Even if you have downloaded files from this website before, the website might ha <message name="IDS_EXTENSIONS_VIEW_INACTIVE" desc="Text that signifies that the extension view is an inactive transient page."> (Inactive) </message> + <message name="IDS_EXTENSIONS_VIEW_IFRAME" desc="Text that signifies that the extension view is an iframe."> + (iframe) + </message> <message name="IDS_EXTENSIONS_BACKGROUND_PAGE" desc="Display name for an autogenerated background page."> background page </message> diff --git a/chrome/browser/extensions/api/developer_private/extension_info_generator_unittest.cc b/chrome/browser/extensions/api/developer_private/extension_info_generator_unittest.cc index 65e3aec..5e43a11 100644 --- a/chrome/browser/extensions/api/developer_private/extension_info_generator_unittest.cc +++ b/chrome/browser/extensions/api/developer_private/extension_info_generator_unittest.cc @@ -289,10 +289,10 @@ TEST_F(ExtensionInfoGeneratorUnitTest, GenerateExtensionsJSONData) { InspectableViewsFinder::ViewList views; views.push_back(InspectableViewsFinder::ConstructView( GURL("chrome-extension://behllobkkfkfnphdnhnkndlbkcpglgmj/bar.html"), - 42, 88, false, VIEW_TYPE_TAB_CONTENTS)); + 42, 88, true, false, VIEW_TYPE_TAB_CONTENTS)); views.push_back(InspectableViewsFinder::ConstructView( GURL("chrome-extension://behllobkkfkfnphdnhnkndlbkcpglgmj/dog.html"), - 0, 0, false, VIEW_TYPE_TAB_CONTENTS)); + 0, 0, false, true, VIEW_TYPE_TAB_CONTENTS)); base::FilePath expected_outputs_path = data_dir().AppendASCII("api_test") diff --git a/chrome/browser/extensions/api/developer_private/inspectable_views_finder.cc b/chrome/browser/extensions/api/developer_private/inspectable_views_finder.cc index 98f2193..93d90f4 100644 --- a/chrome/browser/extensions/api/developer_private/inspectable_views_finder.cc +++ b/chrome/browser/extensions/api/developer_private/inspectable_views_finder.cc @@ -4,6 +4,7 @@ #include "chrome/browser/extensions/api/developer_private/inspectable_views_finder.h" +#include "chrome/browser/extensions/extension_util.h" #include "chrome/browser/profiles/profile.h" #include "chrome/common/extensions/api/developer_private.h" #include "content/public/browser/render_frame_host.h" @@ -17,6 +18,7 @@ #include "extensions/common/constants.h" #include "extensions/common/extension.h" #include "extensions/common/manifest_handlers/background_info.h" +#include "extensions/common/manifest_handlers/incognito_info.h" #include "url/gurl.h" namespace extensions { @@ -34,6 +36,7 @@ InspectableViewsFinder::View InspectableViewsFinder::ConstructView( int render_process_id, int render_frame_id, bool incognito, + bool is_iframe, ViewType type) { linked_ptr<api::developer_private::ExtensionView> view( new api::developer_private::ExtensionView()); @@ -43,6 +46,7 @@ InspectableViewsFinder::View InspectableViewsFinder::ConstructView( // reasons, but it's not a high priority to change. view->render_view_id = render_frame_id; view->incognito = incognito; + view->is_iframe = is_iframe; switch (type) { case VIEW_TYPE_APP_WINDOW: view->type = api::developer_private::VIEW_TYPE_APP_WINDOW; @@ -111,7 +115,16 @@ void InspectableViewsFinder::GetViewsForExtensionForProfile( if (!is_incognito) GetAppWindowViewsForExtension(extension, result); // Include a link to start the lazy background page, if applicable. - if (BackgroundInfo::HasLazyBackgroundPage(&extension) && + bool include_lazy_background = true; + // Don't include the lazy background page for incognito if the extension isn't + // enabled incognito or doesn't have a separate background page in incognito. + if (is_incognito && + (!util::IsIncognitoEnabled(extension.id(), profile) || + !IncognitoInfo::IsSplitMode(&extension))) { + include_lazy_background = false; + } + if (include_lazy_background && + BackgroundInfo::HasLazyBackgroundPage(&extension) && is_enabled && !process_manager->GetBackgroundHostForExtension(extension.id())) { result->push_back(ConstructView( @@ -119,6 +132,7 @@ void InspectableViewsFinder::GetViewsForExtensionForProfile( -1, -1, is_incognito, + false, VIEW_TYPE_EXTENSION_BACKGROUND_PAGE)); } } @@ -149,9 +163,10 @@ void InspectableViewsFinder::GetViewsForExtensionProcess( url = extension_host->initial_url(); } + bool is_iframe = web_contents->GetMainFrame() != host; content::RenderProcessHost* process = host->GetProcess(); result->push_back(ConstructView(url, process->GetID(), host->GetRoutingID(), - is_incognito, host_type)); + is_incognito, is_iframe, host_type)); } } @@ -177,7 +192,7 @@ void InspectableViewsFinder::GetAppWindowViewsForExtension( content::RenderProcessHost* process = web_contents->GetRenderProcessHost(); result->push_back(ConstructView( url, process->GetID(), web_contents->GetMainFrame()->GetRoutingID(), - false, GetViewType(web_contents))); + false, false, GetViewType(web_contents))); } } diff --git a/chrome/browser/extensions/api/developer_private/inspectable_views_finder.h b/chrome/browser/extensions/api/developer_private/inspectable_views_finder.h index 4171437..20346aa 100644 --- a/chrome/browser/extensions/api/developer_private/inspectable_views_finder.h +++ b/chrome/browser/extensions/api/developer_private/inspectable_views_finder.h @@ -39,6 +39,7 @@ class InspectableViewsFinder { int render_process_id, int render_view_id, bool incognito, + bool is_iframe, ViewType type); // Return a list of inspectable views for the given |extension|. diff --git a/chrome/browser/resources/extensions/extension_list.js b/chrome/browser/resources/extensions/extension_list.js index 5c720ef..2bbed63 100644 --- a/chrome/browser/resources/extensions/extension_list.js +++ b/chrome/browser/resources/extensions/extension_list.js @@ -7,6 +7,8 @@ cr.define('extensions', function() { 'use strict'; + var ExtensionType = chrome.developerPrivate.ExtensionType; + /** * @param {string} name The name of the template to clone. * @return {!Element} The freshly cloned template. @@ -138,12 +140,6 @@ cr.define('extensions', function() { permissionsPromptIsShowing_: false, /** - * Necessary to only show the butterbar once. - * @private {boolean} - */ - butterbarShown_: false, - - /** * Whether or not any initial navigation (like scrolling to an extension, * or opening an options page) has occurred. * @private {boolean} @@ -498,14 +494,8 @@ cr.define('extensions', function() { function(e) { var butterBar = wrapper.querySelector('.butter-bar'); var checked = e.target.checked; - if (!this.butterbarShown_) { - butterBar.hidden = !checked || - extension.type == - chrome.developerPrivate.ExtensionType.HOSTED_APP; - this.butterbarShown_ = !butterBar.hidden; - } else { - butterBar.hidden = true; - } + butterBar.hidden = !checked || + extension.type == ExtensionType.HOSTED_APP; chrome.developerPrivate.updateExtensionConfiguration({ extensionId: extension.id, incognitoAccess: e.target.checked @@ -651,11 +641,11 @@ cr.define('extensions', function() { incognito.disabled = !extension.incognitoAccess.isEnabled; incognito.checked = extension.incognitoAccess.isActive; }); - - // Hide butterBar if incognito is not enabled for the extension. - var butterBar = wrapper.querySelector('.butter-bar'); - butterBar.hidden = - butterBar.hidden || !extension.incognitoAccess.isEnabled; + var showButterBar = isActive && + extension.incognitoAccess.isActive && + extension.type != ExtensionType.HOSTED_APP; + // The 'allow in incognito' butter bar. + this.updateVisibility_(wrapper, '.butter-bar', showButterBar); // The 'collect errors' checkbox. This should only be visible if the // error console is enabled - we can detect this by the existence of the @@ -711,8 +701,8 @@ cr.define('extensions', function() { // The 'Launch' link. this.updateVisibility_( wrapper, '.launch-link', - isUnpacked && extension.type == - chrome.developerPrivate.ExtensionType.PLATFORM_APP); + isUnpacked && extension.type == ExtensionType.PLATFORM_APP && + isActive); // The 'Errors' link. var hasErrors = extension.runtimeErrors.length > 0 || @@ -895,7 +885,9 @@ cr.define('extensions', function() { (view.incognito ? ' ' + loadTimeData.getString('viewIncognito') : '') + (view.renderProcessId == -1 ? - ' ' + loadTimeData.getString('viewInactive') : ''); + ' ' + loadTimeData.getString('viewInactive') : '') + + (view.isIframe ? + ' ' + loadTimeData.getString('viewIframe') : ''); link.textContent = label; link.clickHandler = function(e) { chrome.developerPrivate.openDevTools({ diff --git a/chrome/browser/ui/webui/extensions/extension_settings_handler.cc b/chrome/browser/ui/webui/extensions/extension_settings_handler.cc index 20c1cf9..41d5d4b 100644 --- a/chrome/browser/ui/webui/extensions/extension_settings_handler.cc +++ b/chrome/browser/ui/webui/extensions/extension_settings_handler.cc @@ -94,6 +94,8 @@ void ExtensionSettingsHandler::GetLocalizedValues( l10n_util::GetStringUTF16(IDS_EXTENSIONS_VIEW_INCOGNITO)); source->AddString("viewInactive", l10n_util::GetStringUTF16(IDS_EXTENSIONS_VIEW_INACTIVE)); + source->AddString("viewIframe", + l10n_util::GetStringUTF16(IDS_EXTENSIONS_VIEW_IFRAME)); source->AddString("backgroundPage", l10n_util::GetStringUTF16(IDS_EXTENSIONS_BACKGROUND_PAGE)); source->AddString("extensionSettingsEnable", diff --git a/chrome/common/extensions/api/developer_private.idl b/chrome/common/extensions/api/developer_private.idl index 34abec6..15e7dc0 100644 --- a/chrome/common/extensions/api/developer_private.idl +++ b/chrome/common/extensions/api/developer_private.idl @@ -154,6 +154,7 @@ namespace developerPrivate { // This actually refers to a render frame. long renderViewId; boolean incognito; + boolean isIframe; ViewType type; }; diff --git a/chrome/test/data/extensions/api_test/developer/generated_output/behllobkkfkfnphdnhnkndlbkcpglgmj.json b/chrome/test/data/extensions/api_test/developer/generated_output/behllobkkfkfnphdnhnkndlbkcpglgmj.json index 6a591a38..adf92ff 100644 --- a/chrome/test/data/extensions/api_test/developer/generated_output/behllobkkfkfnphdnhnkndlbkcpglgmj.json +++ b/chrome/test/data/extensions/api_test/developer/generated_output/behllobkkfkfnphdnhnkndlbkcpglgmj.json @@ -43,12 +43,14 @@ "userMayModify": true, "version": "1.0.0.0", "views": [ { - "incognito": false, + "isIframe": false, + "incognito": true, "renderProcessId": 42, "renderViewId": 88, "type": "TAB_CONTENTS", "url": "chrome-extension://behllobkkfkfnphdnhnkndlbkcpglgmj/bar.html" }, { + "isIframe": true, "incognito": false, "renderProcessId": 0, "renderViewId": 0, diff --git a/chrome/test/data/extensions/api_test/developer/generated_output/hpiknbiabeeppbpihjehijgoemciehgk.json b/chrome/test/data/extensions/api_test/developer/generated_output/hpiknbiabeeppbpihjehijgoemciehgk.json index 05ceb57..3bbb5cc 100644 --- a/chrome/test/data/extensions/api_test/developer/generated_output/hpiknbiabeeppbpihjehijgoemciehgk.json +++ b/chrome/test/data/extensions/api_test/developer/generated_output/hpiknbiabeeppbpihjehijgoemciehgk.json @@ -43,12 +43,14 @@ "userMayModify": true, "version": "2", "views": [ { - "incognito": false, + "isIframe": false, + "incognito": true, "renderProcessId": 42, "renderViewId": 88, "type": "TAB_CONTENTS", "url": "chrome-extension://hpiknbiabeeppbpihjehijgoemciehgk/bar.html" }, { + "isIframe": true, "incognito": false, "renderProcessId": 0, "renderViewId": 0, diff --git a/third_party/closure_compiler/externs/developer_private.js b/third_party/closure_compiler/externs/developer_private.js index c4a94f3..8fe54fb 100644 --- a/third_party/closure_compiler/externs/developer_private.js +++ b/third_party/closure_compiler/externs/developer_private.js @@ -219,6 +219,7 @@ var HomePage; * renderProcessId: number, * renderViewId: number, * incognito: boolean, + * isIframe: boolean, * type: !chrome.developerPrivate.ViewType * }} * @see https://developer.chrome.com/extensions/developerPrivate#type-ExtensionView |