summaryrefslogtreecommitdiff
path: root/chromium/chrome/browser/extensions/api/extension_action/extension_action_apitest.cc
diff options
context:
space:
mode:
Diffstat (limited to 'chromium/chrome/browser/extensions/api/extension_action/extension_action_apitest.cc')
-rw-r--r--chromium/chrome/browser/extensions/api/extension_action/extension_action_apitest.cc61
1 files changed, 61 insertions, 0 deletions
diff --git a/chromium/chrome/browser/extensions/api/extension_action/extension_action_apitest.cc b/chromium/chrome/browser/extensions/api/extension_action/extension_action_apitest.cc
index fb57664c7ca..f12831ad5e7 100644
--- a/chromium/chrome/browser/extensions/api/extension_action/extension_action_apitest.cc
+++ b/chromium/chrome/browser/extensions/api/extension_action/extension_action_apitest.cc
@@ -9,14 +9,20 @@
#include "base/run_loop.h"
#include "base/scoped_observer.h"
#include "base/strings/stringprintf.h"
+#include "chrome/browser/extensions/extension_action.h"
+#include "chrome/browser/extensions/extension_action_manager.h"
#include "chrome/browser/extensions/extension_apitest.h"
#include "chrome/browser/sessions/session_tab_helper.h"
#include "chrome/browser/ui/browser.h"
#include "chrome/browser/ui/tabs/tab_strip_model.h"
+#include "chrome/test/base/ui_test_utils.h"
+#include "content/public/browser/web_contents.h"
+#include "content/public/test/test_utils.h"
#include "extensions/browser/browsertest_util.h"
#include "extensions/browser/state_store.h"
#include "extensions/test/extension_test_message_listener.h"
#include "extensions/test/test_extension_dir.h"
+#include "ui/base/window_open_disposition.h"
namespace extensions {
namespace {
@@ -160,4 +166,59 @@ IN_PROC_BROWSER_TEST_F(ExtensionActionAPITest, TestNoUnnecessaryIO) {
}
}
+// Verify that tab-specific values are cleared on navigation and on tab
+// removal. Regression test for https://crbug.com/834033.
+IN_PROC_BROWSER_TEST_F(ExtensionActionAPITest,
+ ValuesAreClearedOnNavigationAndTabRemoval) {
+ ASSERT_TRUE(StartEmbeddedTestServer());
+
+ TestExtensionDir test_dir;
+ test_dir.WriteManifest(
+ R"({
+ "name": "Extension",
+ "description": "An extension",
+ "manifest_version": 2,
+ "version": "0.1",
+ "browser_action": {}
+ })");
+ const Extension* extension = LoadExtension(test_dir.UnpackedPath());
+ ASSERT_TRUE(extension);
+
+ auto* action_manager = ExtensionActionManager::Get(profile());
+ ExtensionAction* action = action_manager->GetExtensionAction(*extension);
+ ASSERT_TRUE(action);
+
+ GURL initial_url = embedded_test_server()->GetURL("/title1.html");
+ ui_test_utils::NavigateToURLWithDisposition(
+ browser(), initial_url, WindowOpenDisposition::NEW_FOREGROUND_TAB,
+ ui_test_utils::BROWSER_TEST_WAIT_FOR_NAVIGATION);
+
+ TabStripModel* tab_strip_model = browser()->tab_strip_model();
+ content::WebContents* web_contents = tab_strip_model->GetActiveWebContents();
+ int tab_id = SessionTabHelper::IdForTab(web_contents).id();
+
+ // There should be no explicit title to start, but should be one if we set
+ // one.
+ EXPECT_FALSE(action->HasTitle(tab_id));
+ action->SetTitle(tab_id, "alpha");
+ EXPECT_TRUE(action->HasTitle(tab_id));
+
+ // Navigating should clear the title.
+ GURL second_url = embedded_test_server()->GetURL("/title2.html");
+ ui_test_utils::NavigateToURL(browser(), second_url);
+
+ EXPECT_EQ(second_url, web_contents->GetLastCommittedURL());
+ EXPECT_FALSE(action->HasTitle(tab_id));
+
+ action->SetTitle(tab_id, "alpha");
+ {
+ content::WebContentsDestroyedWatcher destroyed_watcher(web_contents);
+ tab_strip_model->CloseWebContentsAt(tab_strip_model->active_index(),
+ TabStripModel::CLOSE_NONE);
+ destroyed_watcher.Wait();
+ }
+ // The title should have been cleared on tab removal as well.
+ EXPECT_FALSE(action->HasTitle(tab_id));
+}
+
} // namespace extensions