Commit 6d397170 authored by Peter Boström's avatar Peter Boström Committed by Commit Bot

Disable extension pinning in Incognito

Prevents leaving user traces in Incognito while still allowing the
window to stay in sync with pinning done in non-Incognito windows.

Bug: chromium:970023
Change-Id: I68a3fe0e6b7696578a2199994ced6db5a3c71faa
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/1990148
Auto-Submit: Peter Boström <pbos@chromium.org>
Reviewed-by: default avatarDevlin <rdevlin.cronin@chromium.org>
Commit-Queue: Devlin <rdevlin.cronin@chromium.org>
Cr-Commit-Position: refs/heads/master@{#734112}
parent 47bce5d5
...@@ -285,8 +285,13 @@ bool ExtensionContextMenuModel::IsCommandIdEnabled(int command_id) const { ...@@ -285,8 +285,13 @@ bool ExtensionContextMenuModel::IsCommandIdEnabled(int command_id) const {
const GURL& url = web_contents->GetLastCommittedURL(); const GURL& url = web_contents->GetLastCommittedURL();
return IsPageAccessCommandEnabled(*extension, url, command_id); return IsPageAccessCommandEnabled(*extension, url, command_id);
} }
// The following, if they are present, are always enabled. // Extension pinning/unpinning is not available for Incognito as this leaves
// a trace of user activity.
case TOGGLE_VISIBILITY: case TOGGLE_VISIBILITY:
if (base::FeatureList::IsEnabled(features::kExtensionsToolbarMenu))
return !browser_->profile()->IsOffTheRecord();
return true;
// Manage extensions is always enabled.
case MANAGE_EXTENSIONS: case MANAGE_EXTENSIONS:
return true; return true;
default: default:
......
...@@ -5,6 +5,7 @@ ...@@ -5,6 +5,7 @@
#include "chrome/browser/ui/views/extensions/extensions_menu_item_view.h" #include "chrome/browser/ui/views/extensions/extensions_menu_item_view.h"
#include "chrome/app/vector_icons/vector_icons.h" #include "chrome/app/vector_icons/vector_icons.h"
#include "chrome/browser/profiles/profile.h"
#include "chrome/browser/ui/browser.h" #include "chrome/browser/ui/browser.h"
#include "chrome/browser/ui/toolbar/toolbar_action_view_controller.h" #include "chrome/browser/ui/toolbar/toolbar_action_view_controller.h"
#include "chrome/browser/ui/toolbar/toolbar_actions_model.h" #include "chrome/browser/ui/toolbar/toolbar_actions_model.h"
...@@ -62,6 +63,9 @@ ExtensionsMenuItemView::ExtensionsMenuItemView( ...@@ -62,6 +63,9 @@ ExtensionsMenuItemView::ExtensionsMenuItemView(
auto pin_button = CreateBubbleMenuItem(EXTENSION_PINNING, this); auto pin_button = CreateBubbleMenuItem(EXTENSION_PINNING, this);
pin_button->set_ink_drop_base_color(icon_color); pin_button->set_ink_drop_base_color(icon_color);
// Extension pinning is not available in Incognito as it leaves a trace of
// user activity.
pin_button->SetEnabled(!browser->profile()->IsOffTheRecord());
pin_button_ = pin_button.get(); pin_button_ = pin_button.get();
AddChildView(std::move(pin_button)); AddChildView(std::move(pin_button));
......
...@@ -29,6 +29,7 @@ ...@@ -29,6 +29,7 @@
#include "extensions/common/extension.h" #include "extensions/common/extension.h"
#include "extensions/test/test_extension_dir.h" #include "extensions/test/test_extension_dir.h"
#include "net/dns/mock_host_resolver.h" #include "net/dns/mock_host_resolver.h"
#include "ui/views/controls/button/image_button.h"
#include "ui/views/layout/animating_layout_manager.h" #include "ui/views/layout/animating_layout_manager.h"
#include "ui/views/layout/animating_layout_manager_test_util.h" #include "ui/views/layout/animating_layout_manager_test_util.h"
#include "ui/views/test/widget_test.h" #include "ui/views/test/widget_test.h"
...@@ -38,8 +39,10 @@ class ExtensionsMenuViewBrowserTest : public DialogBrowserTest { ...@@ -38,8 +39,10 @@ class ExtensionsMenuViewBrowserTest : public DialogBrowserTest {
protected: protected:
Profile* profile() { return browser()->profile(); } Profile* profile() { return browser()->profile(); }
void LoadTestExtension(const std::string& extension) { void LoadTestExtension(const std::string& extension,
bool allow_incognito = false) {
extensions::ChromeTestExtensionLoader loader(profile()); extensions::ChromeTestExtensionLoader loader(profile());
loader.set_allow_incognito_access(allow_incognito);
base::FilePath test_data_dir; base::FilePath test_data_dir;
base::PathService::Get(chrome::DIR_TEST_DATA, &test_data_dir); base::PathService::Get(chrome::DIR_TEST_DATA, &test_data_dir);
extensions_.push_back( extensions_.push_back(
...@@ -51,6 +54,10 @@ class ExtensionsMenuViewBrowserTest : public DialogBrowserTest { ...@@ -51,6 +54,10 @@ class ExtensionsMenuViewBrowserTest : public DialogBrowserTest {
DialogBrowserTest::SetUp(); DialogBrowserTest::SetUp();
} }
void SetUpIncognitoBrowser() {
incognito_browser_ = CreateIncognitoBrowser();
}
void SetUpOnMainThread() override { void SetUpOnMainThread() override {
DialogBrowserTest::SetUpOnMainThread(); DialogBrowserTest::SetUpOnMainThread();
host_resolver()->AddRule("*", "127.0.0.1"); host_resolver()->AddRule("*", "127.0.0.1");
...@@ -192,15 +199,17 @@ class ExtensionsMenuViewBrowserTest : public DialogBrowserTest { ...@@ -192,15 +199,17 @@ class ExtensionsMenuViewBrowserTest : public DialogBrowserTest {
} }
} }
void ClickExtensionsMenuButton() { void ClickExtensionsMenuButton(Browser* browser) {
ui::MouseEvent click_event(ui::ET_MOUSE_PRESSED, gfx::Point(), gfx::Point(), ui::MouseEvent click_event(ui::ET_MOUSE_PRESSED, gfx::Point(), gfx::Point(),
base::TimeTicks(), ui::EF_LEFT_MOUSE_BUTTON, 0); base::TimeTicks(), ui::EF_LEFT_MOUSE_BUTTON, 0);
BrowserView::GetBrowserViewForBrowser(browser()) BrowserView::GetBrowserViewForBrowser(browser)
->toolbar() ->toolbar()
->GetExtensionsButton() ->GetExtensionsButton()
->OnMousePressed(click_event); ->OnMousePressed(click_event);
} }
void ClickExtensionsMenuButton() { ClickExtensionsMenuButton(browser()); }
ExtensionsToolbarContainer* GetExtensionsToolbarContainer() const { ExtensionsToolbarContainer* GetExtensionsToolbarContainer() const {
return BrowserView::GetBrowserViewForBrowser(browser()) return BrowserView::GetBrowserViewForBrowser(browser())
->toolbar() ->toolbar()
...@@ -244,6 +253,7 @@ class ExtensionsMenuViewBrowserTest : public DialogBrowserTest { ...@@ -244,6 +253,7 @@ class ExtensionsMenuViewBrowserTest : public DialogBrowserTest {
std::string ui_test_name_; std::string ui_test_name_;
base::test::ScopedFeatureList scoped_feature_list_; base::test::ScopedFeatureList scoped_feature_list_;
Browser* incognito_browser_ = nullptr;
std::vector<scoped_refptr<const extensions::Extension>> extensions_; std::vector<scoped_refptr<const extensions::Extension>> extensions_;
}; };
...@@ -372,6 +382,32 @@ IN_PROC_BROWSER_TEST_F(ExtensionsMenuViewBrowserTest, ...@@ -372,6 +382,32 @@ IN_PROC_BROWSER_TEST_F(ExtensionsMenuViewBrowserTest,
DismissUi(); DismissUi();
} }
IN_PROC_BROWSER_TEST_F(ExtensionsMenuViewBrowserTest,
PinningDisabledInIncognito) {
LoadTestExtension("extensions/uitest/window_open", true);
SetUpIncognitoBrowser();
// Make sure the pinning item is disabled for context menus in the Incognito
// browser.
extensions::ExtensionContextMenuModel menu(
extensions_[0].get(), incognito_browser_,
extensions::ExtensionContextMenuModel::VISIBLE, nullptr,
true /* can_show_icon_in_toolbar */);
EXPECT_FALSE(menu.IsCommandIdEnabled(
extensions::ExtensionContextMenuModel::TOGGLE_VISIBILITY));
// Show menu and verify that the in-menu pin button is disabled too.
ClickExtensionsMenuButton(incognito_browser_);
ASSERT_TRUE(VerifyUi());
ASSERT_EQ(1u, GetExtensionsMenuItemView().size());
EXPECT_EQ(
views::Button::STATE_DISABLED,
GetExtensionsMenuItemView().front()->pin_button_for_testing()->state());
DismissUi();
}
IN_PROC_BROWSER_TEST_F(ExtensionsMenuViewBrowserTest, IN_PROC_BROWSER_TEST_F(ExtensionsMenuViewBrowserTest,
ManageExtensionsOpensExtensionsPage) { ManageExtensionsOpensExtensionsPage) {
ShowUi(""); ShowUi("");
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment