1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 2 // Use of this source code is governed by a BSD-style license that can be 3 // found in the LICENSE file. 4 5 #include "base/logging.h" 6 #include "chrome/browser/extensions/extension_apitest.h" 7 #include "chrome/browser/extensions/extension_service.h" 8 #include "chrome/browser/profiles/profile.h" 9 #include "chrome/browser/ui/browser.h" 10 #include "chrome/browser/ui/tabs/tab_strip_model.h" 11 #include "chrome/test/base/ui_test_utils.h" 12 #include "content/public/browser/web_contents.h" 13 #include "content/public/test/browser_test_utils.h" 14 #include "extensions/common/switches.h" 15 #include "net/dns/mock_host_resolver.h" 16 #include "url/gurl.h" 17 18 class ExtensionIconSourceTest : public ExtensionApiTest { 19 protected: 20 virtual void SetUpCommandLine(CommandLine* command_line) OVERRIDE { 21 ExtensionApiTest::SetUpCommandLine(command_line); 22 command_line->AppendSwitch( 23 extensions::switches::kAllowLegacyExtensionManifests); 24 } 25 }; 26 27 // Times out on Mac and Win. http://crbug.com/238705 28 #if defined(OS_WIN) || defined(OS_MACOSX) 29 #define MAYBE_IconsLoaded DISABLED_IconsLoaded 30 #else 31 #define MAYBE_IconsLoaded IconsLoaded 32 #endif 33 34 IN_PROC_BROWSER_TEST_F(ExtensionIconSourceTest, MAYBE_IconsLoaded) { 35 base::FilePath basedir = test_data_dir_.AppendASCII("icons"); 36 ASSERT_TRUE(LoadExtension(basedir.AppendASCII("extension_with_permission"))); 37 ASSERT_TRUE(LoadExtension(basedir.AppendASCII("extension_no_permission"))); 38 std::string result; 39 40 // Test that the icons are loaded and that the chrome://extension-icon 41 // parameters work correctly. 42 ui_test_utils::NavigateToURL( 43 browser(), 44 GURL("chrome-extension://gbmgkahjioeacddebbnengilkgbkhodg/index.html")); 45 ASSERT_TRUE(content::ExecuteScriptAndExtractString( 46 browser()->tab_strip_model()->GetActiveWebContents(), 47 "window.domAutomationController.send(document.title)", 48 &result)); 49 EXPECT_EQ(result, "Loaded"); 50 51 // Verify that the an extension can't load chrome://extension-icon icons 52 // without the management permission. 53 ui_test_utils::NavigateToURL( 54 browser(), 55 GURL("chrome-extension://apocjbpjpkghdepdngjlknfpmabcmlao/index.html")); 56 ASSERT_TRUE(content::ExecuteScriptAndExtractString( 57 browser()->tab_strip_model()->GetActiveWebContents(), 58 "window.domAutomationController.send(document.title)", 59 &result)); 60 EXPECT_EQ(result, "Not Loaded"); 61 } 62 63 IN_PROC_BROWSER_TEST_F(ExtensionIconSourceTest, InvalidURL) { 64 std::string result; 65 66 // Test that navigation to an invalid url works. 67 ui_test_utils::NavigateToURL( 68 browser(), 69 GURL("chrome://extension-icon/invalid")); 70 71 ASSERT_TRUE(content::ExecuteScriptAndExtractString( 72 browser()->tab_strip_model()->GetActiveWebContents(), 73 "window.domAutomationController.send(document.title)", 74 &result)); 75 EXPECT_EQ(result, "invalid (96\xC3\x97""96)"); 76 } 77 78 // Times out on Mac and Win. http://crbug.com/238705 79 #if defined(OS_WIN) || defined(OS_MACOSX) 80 #define MAYBE_IconsLoadedIncognito DISABLED_IconsLoadedIncognito 81 #else 82 #define MAYBE_IconsLoadedIncognito IconsLoadedIncognito 83 #endif 84 85 IN_PROC_BROWSER_TEST_F(ExtensionIconSourceTest, MAYBE_IconsLoadedIncognito) { 86 base::FilePath basedir = test_data_dir_.AppendASCII("icons"); 87 ASSERT_TRUE(LoadExtensionIncognito( 88 basedir.AppendASCII("extension_with_permission"))); 89 ASSERT_TRUE(LoadExtensionIncognito( 90 basedir.AppendASCII("extension_no_permission"))); 91 std::string result; 92 93 // Test that the icons are loaded and that the chrome://extension-icon 94 // parameters work correctly. 95 Browser* otr_browser = ui_test_utils::OpenURLOffTheRecord( 96 browser()->profile(), 97 GURL("chrome-extension://gbmgkahjioeacddebbnengilkgbkhodg/index.html")); 98 ASSERT_TRUE(content::ExecuteScriptAndExtractString( 99 otr_browser->tab_strip_model()->GetActiveWebContents(), 100 "window.domAutomationController.send(document.title)", 101 &result)); 102 EXPECT_EQ(result, "Loaded"); 103 104 // Verify that the an extension can't load chrome://extension-icon icons 105 // without the management permission. 106 ui_test_utils::OpenURLOffTheRecord( 107 browser()->profile(), 108 GURL("chrome-extension://apocjbpjpkghdepdngjlknfpmabcmlao/index.html")); 109 ASSERT_TRUE(content::ExecuteScriptAndExtractString( 110 otr_browser->tab_strip_model()->GetActiveWebContents(), 111 "window.domAutomationController.send(document.title)", 112 &result)); 113 EXPECT_EQ(result, "Not Loaded"); 114 } 115