| // Copyright 2012 The Chromium Authors | 
 | // Use of this source code is governed by a BSD-style license that can be | 
 | // found in the LICENSE file. | 
 |  | 
 | #include "build/build_config.h" | 
 | #include "chrome/browser/extensions/extension_apitest.h" | 
 | #include "chrome/browser/profiles/profile.h" | 
 | #include "content/public/browser/web_contents.h" | 
 | #include "content/public/test/browser_test.h" | 
 | #include "content/public/test/browser_test_utils.h" | 
 | #include "extensions/buildflags/buildflags.h" | 
 | #include "url/gurl.h" | 
 |  | 
 | static_assert(BUILDFLAG(ENABLE_EXTENSIONS_CORE)); | 
 |  | 
 | using ExtensionIconSourceTest = extensions::ExtensionApiTest; | 
 |  | 
 | IN_PROC_BROWSER_TEST_F(ExtensionIconSourceTest, IconsLoaded) { | 
 |   base::FilePath basedir = test_data_dir_.AppendASCII("icons"); | 
 |   ASSERT_TRUE(LoadExtension(basedir.AppendASCII("extension_with_permission"))); | 
 |   ASSERT_TRUE(LoadExtension(basedir.AppendASCII("extension_no_permission"))); | 
 |  | 
 |   // Test that the icons are loaded and that the chrome://extension-icon | 
 |   // parameters work correctly. | 
 |   auto* web_contents = GetActiveWebContents(); | 
 |   ASSERT_TRUE(NavigateToURL( | 
 |       web_contents, | 
 |       GURL("chrome-extension://gbmgkahjioeacddebbnengilkgbkhodg/index.html"))); | 
 |   ASSERT_TRUE(content::WaitForLoadStop(web_contents)); | 
 |   EXPECT_EQ(content::EvalJs(web_contents, "document.title"), "Loaded"); | 
 |  | 
 |   // Verify that the an extension can't load chrome://extension-icon icons | 
 |   // without the management permission. | 
 |   ASSERT_TRUE(NavigateToURL( | 
 |       web_contents, | 
 |       GURL("chrome-extension://apocjbpjpkghdepdngjlknfpmabcmlao/index.html"))); | 
 |   ASSERT_TRUE(content::WaitForLoadStop(web_contents)); | 
 |   EXPECT_EQ(content::EvalJs(web_contents, "document.title"), "Not Loaded"); | 
 | } | 
 |  | 
 | IN_PROC_BROWSER_TEST_F(ExtensionIconSourceTest, InvalidURL) { | 
 |   // Test that navigation to an invalid url works. | 
 |   auto* web_contents = GetActiveWebContents(); | 
 |   ASSERT_TRUE( | 
 |       NavigateToURL(web_contents, GURL("chrome://extension-icon/invalid"))); | 
 |   ASSERT_TRUE(content::WaitForLoadStop(web_contents)); | 
 |  | 
 |   EXPECT_EQ(content::EvalJs(web_contents, "document.title"), | 
 |             "invalid (96\xC3\x97" | 
 |             "96)"); | 
 | } | 
 |  | 
 | IN_PROC_BROWSER_TEST_F(ExtensionIconSourceTest, IconsLoadedIncognito) { | 
 |   base::FilePath basedir = test_data_dir_.AppendASCII("icons"); | 
 |   ASSERT_TRUE(LoadExtension(basedir.AppendASCII("extension_with_permission"), | 
 |                             {.allow_in_incognito = true})); | 
 |   ASSERT_TRUE(LoadExtension(basedir.AppendASCII("extension_no_permission"), | 
 |                             {.allow_in_incognito = true})); | 
 |  | 
 |   // Test that the icons are loaded and that the chrome://extension-icon | 
 |   // parameters work correctly. | 
 |   auto* web_contents = PlatformOpenURLOffTheRecord( | 
 |       profile(), | 
 |       GURL("chrome-extension://gbmgkahjioeacddebbnengilkgbkhodg/index.html")); | 
 |   ASSERT_TRUE(content::WaitForLoadStop(web_contents)); | 
 |   EXPECT_EQ(content::EvalJs(web_contents, "document.title"), "Loaded"); | 
 |  | 
 |   // Verify that the an extension can't load chrome://extension-icon icons | 
 |   // without the management permission. | 
 |   web_contents = PlatformOpenURLOffTheRecord( | 
 |       profile(), | 
 |       GURL("chrome-extension://apocjbpjpkghdepdngjlknfpmabcmlao/index.html")); | 
 |   ASSERT_TRUE(content::WaitForLoadStop(web_contents)); | 
 |   EXPECT_EQ(content::EvalJs(web_contents, "document.title"), "Not Loaded"); | 
 | } |