Index: chrome/browser/extensions/api/tabs/tabs_api_unittest.cc |
diff --git a/chrome/browser/extensions/api/tabs/tabs_api_unittest.cc b/chrome/browser/extensions/api/tabs/tabs_api_unittest.cc |
index 7a5cc4bce9e30476f2d3a93ab6dd9c0d55367e04..5b8193f8d30dd390be582240cb71dc7f7586935a 100644 |
--- a/chrome/browser/extensions/api/tabs/tabs_api_unittest.cc |
+++ b/chrome/browser/extensions/api/tabs/tabs_api_unittest.cc |
@@ -2,11 +2,13 @@ |
// Use of this source code is governed by a BSD-style license that can be |
// found in the LICENSE file. |
+#include "base/strings/stringprintf.h" |
#include "base/strings/utf_string_conversions.h" |
#include "chrome/browser/extensions/api/tabs/tabs_api.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" |
+#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/test_browser_window.h" |
@@ -14,6 +16,7 @@ |
#include "content/public/common/browser_side_navigation_policy.h" |
#include "content/public/test/browser_side_navigation_test_utils.h" |
#include "content/public/test/web_contents_tester.h" |
+#include "extensions/browser/api_test_utils.h" |
#include "extensions/common/extension_builder.h" |
#include "extensions/common/test_util.h" |
@@ -216,4 +219,54 @@ TEST_F(TabsApiUnitTest, QueryWithHostPermission) { |
} |
} |
+// Test that using the PDF extension for tab updates is treated as a |
+// renderer-initiated navigation. crbug.com/660498 |
+TEST_F(TabsApiUnitTest, PDFExtensionNavigation) { |
+ DictionaryBuilder manifest; |
+ manifest.Set("name", "pdfext") |
+ .Set("description", "desc") |
+ .Set("version", "0.1") |
+ .Set("manifest_version", 2) |
+ .Set("permissions", ListBuilder().Append("tabs").Build()); |
+ scoped_refptr<const Extension> extension = |
+ ExtensionBuilder() |
+ .SetManifest(manifest.Build()) |
+ .SetID(extension_misc::kPdfExtensionId) |
+ .Build(); |
+ ASSERT_TRUE(extension); |
+ |
+ content::WebContents* web_contents = |
+ content::WebContentsTester::CreateTestWebContents(profile(), nullptr); |
+ ASSERT_TRUE(web_contents); |
+ content::WebContentsTester* web_contents_tester = |
+ content::WebContentsTester::For(web_contents); |
+ const GURL kGoogle("http://www.google.com"); |
+ web_contents_tester->NavigateAndCommit(kGoogle); |
+ EXPECT_EQ(kGoogle, web_contents->GetLastCommittedURL()); |
+ EXPECT_EQ(kGoogle, web_contents->GetVisibleURL()); |
+ |
+ SessionTabHelper::CreateForWebContents(web_contents); |
+ int tab_id = SessionTabHelper::IdForTab(web_contents); |
+ browser()->tab_strip_model()->AppendWebContents(web_contents, true); |
+ |
+ scoped_refptr<TabsUpdateFunction> function = new TabsUpdateFunction(); |
+ function->set_extension(extension.get()); |
+ function->set_browser_context(profile()); |
+ std::unique_ptr<base::ListValue> args( |
+ extension_function_test_utils::ParseList(base::StringPrintf( |
+ "[%d, {\"url\":\"http://example.com\"}]", tab_id))); |
+ function->SetArgs(args.get()); |
+ api_test_utils::SendResponseHelper response_helper(function.get()); |
+ function->RunWithValidation()->Execute(); |
+ |
+ EXPECT_EQ(kGoogle, web_contents->GetLastCommittedURL()); |
+ EXPECT_EQ(kGoogle, web_contents->GetVisibleURL()); |
+ |
+ // Clean up. |
+ response_helper.WaitForResponse(); |
+ while (!browser()->tab_strip_model()->empty()) |
+ browser()->tab_strip_model()->CloseWebContentsAt(0, 0); |
+ base::RunLoop().RunUntilIdle(); |
+} |
+ |
} // namespace extensions |