summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDevlin Cronin <rdevlin.cronin@chromium.org>2015-10-05 10:16:21 -0700
committerDevlin Cronin <rdevlin.cronin@chromium.org>2015-10-05 17:17:32 +0000
commit64a14d8ddcf9eb1857c317c86b62feeac93f974e (patch)
tree334895e37ec8e96d1ac9f13f782125f10e42d243
parentb34cf9a6d886714de108f8243586ebfd60b75012 (diff)
downloadchromium_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}
-rw-r--r--chrome/app/generated_resources.grd3
-rw-r--r--chrome/browser/extensions/api/developer_private/extension_info_generator_unittest.cc4
-rw-r--r--chrome/browser/extensions/api/developer_private/inspectable_views_finder.cc21
-rw-r--r--chrome/browser/extensions/api/developer_private/inspectable_views_finder.h1
-rw-r--r--chrome/browser/resources/extensions/extension_list.js36
-rw-r--r--chrome/browser/ui/webui/extensions/extension_settings_handler.cc2
-rw-r--r--chrome/common/extensions/api/developer_private.idl1
-rw-r--r--chrome/test/data/extensions/api_test/developer/generated_output/behllobkkfkfnphdnhnkndlbkcpglgmj.json4
-rw-r--r--chrome/test/data/extensions/api_test/developer/generated_output/hpiknbiabeeppbpihjehijgoemciehgk.json4
-rw-r--r--third_party/closure_compiler/externs/developer_private.js1
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