diff options
author | Allan Sandfeld Jensen <allan.jensen@qt.io> | 2021-07-01 13:23:52 +0200 |
---|---|---|
committer | Allan Sandfeld Jensen <allan.jensen@qt.io> | 2021-07-01 11:25:08 +0000 |
commit | 5d013f5804a0d91fcf6c626b2d6fb6eca5c845b0 (patch) | |
tree | 49758e2556cca8f7d386b49a6c41b3bcb7c20b48 /chromium/chrome/browser/extensions/api/tab_groups | |
parent | 189d4fd8fad9e3c776873be51938cd31a42b6177 (diff) | |
download | qtwebengine-chromium-5d013f5804a0d91fcf6c626b2d6fb6eca5c845b0.tar.gz |
BASELINE: Update Chromium to 90.0.4430.228
Change-Id: I2d24c073cefc4842980b84cc7e9c5419c107c501
Reviewed-by: Allan Sandfeld Jensen <allan.jensen@qt.io>
Diffstat (limited to 'chromium/chrome/browser/extensions/api/tab_groups')
-rw-r--r-- | chromium/chrome/browser/extensions/api/tab_groups/tab_groups_api.cc | 30 | ||||
-rw-r--r-- | chromium/chrome/browser/extensions/api/tab_groups/tab_groups_api_unittest.cc | 34 |
2 files changed, 49 insertions, 15 deletions
diff --git a/chromium/chrome/browser/extensions/api/tab_groups/tab_groups_api.cc b/chromium/chrome/browser/extensions/api/tab_groups/tab_groups_api.cc index 2a624978225..a1079a10ec9 100644 --- a/chromium/chrome/browser/extensions/api/tab_groups/tab_groups_api.cc +++ b/chromium/chrome/browser/extensions/api/tab_groups/tab_groups_api.cc @@ -123,7 +123,10 @@ ExtensionFunction::ResponseAction TabGroupsQueryFunction::Run() { } } - TabStripModel* tab_strip = browser->tab_strip_model(); + TabStripModel* tab_strip = + ExtensionTabUtil::GetEditableTabStripModel(browser); + if (!tab_strip) + return RespondNow(Error(tabs_constants::kTabStripNotEditableQueryError)); for (const tab_groups::TabGroupId& id : tab_strip->group_model()->ListTabGroups()) { const tab_groups::TabGroupVisualData* visual_data = @@ -184,8 +187,11 @@ ExtensionFunction::ResponseAction TabGroupsUpdateFunction::Run() { if (params->update_properties.title.get()) title = base::UTF8ToUTF16(*params->update_properties.title); - TabGroup* tab_group = - browser->tab_strip_model()->group_model()->GetTabGroup(id); + TabStripModel* tab_strip_model = + ExtensionTabUtil::GetEditableTabStripModel(browser); + if (!tab_strip_model) + return RespondNow(Error(tabs_constants::kTabStripNotEditableError)); + TabGroup* tab_group = tab_strip_model->group_model()->GetTabGroup(id); tab_groups::TabGroupVisualData new_visual_data(title, color, collapsed); tab_group->SetVisualData(std::move(new_visual_data)); @@ -232,12 +238,12 @@ bool TabGroupsMoveFunction::MoveGroup(int group_id, return false; } - if (!source_browser->window()->IsTabStripEditable()) { + TabStripModel* source_tab_strip = + ExtensionTabUtil::GetEditableTabStripModel(source_browser); + if (!source_tab_strip) { *error = tabs_constants::kTabStripNotEditableError; return false; } - - TabStripModel* source_tab_strip = source_browser->tab_strip_model(); gfx::Range tabs = source_tab_strip->group_model()->GetTabGroup(*group)->ListTabs(); if (tabs.length() == 0) @@ -252,11 +258,6 @@ bool TabGroupsMoveFunction::MoveGroup(int group_id, return false; } - if (!target_browser->window()->IsTabStripEditable()) { - *error = tabs_constants::kTabStripNotEditableError; - return false; - } - // TODO(crbug.com/990158): Rather than calling is_type_normal(), should // this call SupportsWindowFeature(Browser::FEATURE_TABSTRIP)? if (!target_browser->is_type_normal()) { @@ -271,7 +272,12 @@ bool TabGroupsMoveFunction::MoveGroup(int group_id, // If windowId is different from the current window, move between windows. if (target_browser != source_browser) { - TabStripModel* target_tab_strip = target_browser->tab_strip_model(); + TabStripModel* target_tab_strip = + ExtensionTabUtil::GetEditableTabStripModel(target_browser); + if (!target_tab_strip) { + *error = tabs_constants::kTabStripNotEditableError; + return false; + } if (new_index > target_tab_strip->count() || new_index < 0) new_index = target_tab_strip->count(); diff --git a/chromium/chrome/browser/extensions/api/tab_groups/tab_groups_api_unittest.cc b/chromium/chrome/browser/extensions/api/tab_groups/tab_groups_api_unittest.cc index efebc9b2638..4934de996d4 100644 --- a/chromium/chrome/browser/extensions/api/tab_groups/tab_groups_api_unittest.cc +++ b/chromium/chrome/browser/extensions/api/tab_groups/tab_groups_api_unittest.cc @@ -17,6 +17,7 @@ #include "chrome/browser/extensions/api/tab_groups/tab_groups_event_router.h" #include "chrome/browser/extensions/api/tab_groups/tab_groups_event_router_factory.h" #include "chrome/browser/extensions/api/tab_groups/tab_groups_util.h" +#include "chrome/browser/extensions/api/tabs/tabs_constants.h" #include "chrome/browser/extensions/extension_function_test_utils.h" #include "chrome/browser/extensions/extension_service_test_base.h" #include "chrome/browser/extensions/extension_tab_util.h" @@ -124,13 +125,12 @@ void TabGroupsApiUnitTest::SetUp() { InitializeEmptyExtensionService(); // Create a browser window. - TestBrowserWindow* window = new TestBrowserWindow; + browser_window_ = std::make_unique<TestBrowserWindow>(); // TestBrowserWindowOwner handles its own lifetime, and also cleans up // |window2|. - new TestBrowserWindowOwner(window); Browser::CreateParams params(profile(), /* user_gesture */ true); params.type = Browser::TYPE_NORMAL; - params.window = window; + params.window = browser_window_.get(); browser_ = std::unique_ptr<Browser>(Browser::Create(params)); BrowserList::SetLastActive(browser_.get()); @@ -545,4 +545,32 @@ TEST_F(TabGroupsApiUnitTest, TabGroupsOnMoved) { api::tab_groups::OnMoved::kEventName)); } +// Test that tab groups aren't edited while dragging. +TEST_F(TabGroupsApiUnitTest, IsTabStripEditable) { + scoped_refptr<const Extension> extension = CreateTabGroupsExtension(); + int group_id = tab_groups_util::GetGroupId( + browser()->tab_strip_model()->AddToNewGroup({0})); + const std::string args = + base::StringPrintf(R"([%d, {"index": %d}])", group_id, 1); + + // Succeed moving group in normal case. + { + auto function = base::MakeRefCounted<TabGroupsMoveFunction>(); + function->set_extension(extension); + ASSERT_TRUE(extension_function_test_utils::RunFunction( + function.get(), args, browser(), api_test_utils::NONE)); + } + + // Gracefully cancel group tab drag if tab strip isn't editable. + { + browser_window()->SetIsTabStripEditable(false); + auto function = base::MakeRefCounted<TabGroupsMoveFunction>(); + function->set_extension(extension); + std::string error = + extension_function_test_utils::RunFunctionAndReturnError( + function.get(), args, browser()); + EXPECT_EQ(tabs_constants::kTabStripNotEditableError, error); + } +} + } // namespace extensions |