| Index: chrome/browser/task_manager/providers/web_contents/subframe_task_browsertest.cc
|
| diff --git a/chrome/browser/task_manager/providers/web_contents/subframe_task_browsertest.cc b/chrome/browser/task_manager/providers/web_contents/subframe_task_browsertest.cc
|
| index 8608ae95fe61db1b9742241ea89ab1a3abad7b16..671e822881f3d09b486ef216d15f53da1996424f 100644
|
| --- a/chrome/browser/task_manager/providers/web_contents/subframe_task_browsertest.cc
|
| +++ b/chrome/browser/task_manager/providers/web_contents/subframe_task_browsertest.cc
|
| @@ -2,12 +2,16 @@
|
| // Use of this source code is governed by a BSD-style license that can be
|
| // found in the LICENSE file.
|
|
|
| +#include "base/command_line.h"
|
| #include "base/macros.h"
|
| #include "base/strings/utf_string_conversions.h"
|
| #include "chrome/browser/task_manager/mock_web_contents_task_manager.h"
|
| +#include "chrome/browser/ui/browser.h"
|
| +#include "chrome/browser/ui/tabs/tab_strip_model.h"
|
| #include "chrome/grit/generated_resources.h"
|
| #include "chrome/test/base/in_process_browser_test.h"
|
| #include "chrome/test/base/ui_test_utils.h"
|
| +#include "content/public/common/content_switches.h"
|
| #include "content/public/test/browser_test_utils.h"
|
| #include "content/public/test/test_utils.h"
|
| #include "net/dns/mock_host_resolver.h"
|
| @@ -30,11 +34,16 @@ base::string16 GetExpectedSubframeTitlePrefix() {
|
| base::string16());
|
| }
|
|
|
| -base::string16 PrefixExpectedTabTitle(const char* title) {
|
| +base::string16 PrefixExpectedTabTitle(const std::string& title) {
|
| return l10n_util::GetStringFUTF16(IDS_TASK_MANAGER_TAB_PREFIX,
|
| base::UTF8ToUTF16(title));
|
| }
|
|
|
| +base::string16 PrefixExpectedTDIRowTitle(const std::string& title) {
|
| + return l10n_util::GetStringFUTF16(IDS_TASK_MANAGER_ISOLATED_SUBFRAMES_PREFIX,
|
| + base::UTF8ToUTF16(title));
|
| +}
|
| +
|
| } // namespace
|
|
|
| // A test for OOPIFs and how they show up in the task manager as
|
| @@ -126,4 +135,78 @@ IN_PROC_BROWSER_TEST_F(SubframeTaskBrowserTest, TaskManagerShowsSubframeTasks) {
|
| simple_page_task->title());
|
| }
|
|
|
| +// A test for top document isolation and how subframes show up in the task
|
| +// manager as SubframeTasks.
|
| +class SubframeTaskTDIBrowserTest : public InProcessBrowserTest {
|
| + public:
|
| + SubframeTaskTDIBrowserTest() {}
|
| + ~SubframeTaskTDIBrowserTest() override {}
|
| +
|
| + void SetUpCommandLine(base::CommandLine* command_line) override {
|
| + InProcessBrowserTest::SetUpCommandLine(command_line);
|
| + command_line->AppendSwitch(switches::kTopDocumentIsolation);
|
| + }
|
| +
|
| + void SetUpOnMainThread() override {
|
| + host_resolver()->AddRule("*", "127.0.0.1");
|
| + ASSERT_TRUE(embedded_test_server()->Start());
|
| + content::SetupCrossSiteRedirector(embedded_test_server());
|
| + }
|
| +
|
| + void NavigateTo(const char* page_url) const {
|
| + ui_test_utils::NavigateToURL(browser(),
|
| + embedded_test_server()->GetURL(page_url));
|
| + }
|
| +
|
| + private:
|
| + DISALLOW_COPY_AND_ASSIGN(SubframeTaskTDIBrowserTest);
|
| +};
|
| +
|
| +// Makes sure that subframe row gets updated with the new title when the main
|
| +// frame's title changes.
|
| +IN_PROC_BROWSER_TEST_F(SubframeTaskTDIBrowserTest,
|
| + SubframeRowGetsUpdatedParentPageTitle) {
|
| + if (content::AreAllSitesIsolatedForTesting()) {
|
| + // If full site isolation is turned on, it supersedes top document
|
| + // isolation, so bail if it is.
|
| + return;
|
| + }
|
| +
|
| + MockWebContentsTaskManager task_manager;
|
| + EXPECT_TRUE(task_manager.tasks().empty());
|
| + task_manager.StartObserving();
|
| +
|
| + // Currently only the about:blank page.
|
| + ASSERT_EQ(1U, task_manager.tasks().size());
|
| + const Task* about_blank_task = task_manager.tasks().front();
|
| + EXPECT_EQ(Task::RENDERER, about_blank_task->GetType());
|
| + EXPECT_EQ(PrefixExpectedTabTitle("about:blank"), about_blank_task->title());
|
| +
|
| + // Start with a known title, make sure everything starts correctly.
|
| + NavigateTo(kCrossSitePageUrl);
|
| +
|
| + ASSERT_EQ(2U, task_manager.tasks().size());
|
| + const Task* main_task = task_manager.tasks()[0];
|
| + const Task* tdi_task = task_manager.tasks()[1];
|
| + EXPECT_EQ(Task::RENDERER, main_task->GetType());
|
| + EXPECT_EQ(Task::RENDERER, tdi_task->GetType());
|
| + std::string main_title = "cross-site iframe test";
|
| + EXPECT_EQ(PrefixExpectedTabTitle(main_title), main_task->title());
|
| + EXPECT_EQ(PrefixExpectedTDIRowTitle(main_title), tdi_task->title());
|
| +
|
| + // Change the title on the main page, and make sure the TDI row reflects it.
|
| + std::string new_title = "new title";
|
| + std::string script = "document.title = '" + new_title + "'";
|
| + content::WebContents* web_contents =
|
| + browser()->tab_strip_model()->GetActiveWebContents();
|
| + content::TitleWatcher title_watcher(web_contents,
|
| + base::UTF8ToUTF16(new_title));
|
| + EXPECT_TRUE(ExecuteScript(web_contents, script));
|
| + base::string16 actual_title = title_watcher.WaitAndGetTitle();
|
| + EXPECT_EQ(new_title, base::UTF16ToUTF8(actual_title));
|
| +
|
| + EXPECT_EQ(PrefixExpectedTabTitle(new_title), main_task->title());
|
| + EXPECT_EQ(PrefixExpectedTDIRowTitle(new_title), tdi_task->title());
|
| +}
|
| +
|
| } // namespace task_manager
|
|
|