| OLD | NEW |
| 1 // Copyright 2014 The Chromium Authors. All rights reserved. | 1 // Copyright 2014 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #include "base/command_line.h" | 5 #include "base/command_line.h" |
| 6 #include "base/message_loop/message_loop.h" | 6 #include "base/message_loop/message_loop.h" |
| 7 #include "build/build_config.h" | 7 #include "build/build_config.h" |
| 8 #include "chrome/browser/extensions/extension_service.h" | 8 #include "chrome/browser/extensions/extension_service.h" |
| 9 #include "chrome/browser/extensions/extension_web_ui.h" | 9 #include "chrome/browser/extensions/extension_web_ui.h" |
| 10 #include "chrome/browser/extensions/extension_web_ui_override_registrar.h" | 10 #include "chrome/browser/extensions/extension_web_ui_override_registrar.h" |
| (...skipping 53 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 64 #if defined OS_CHROMEOS | 64 #if defined OS_CHROMEOS |
| 65 chromeos::ScopedTestDeviceSettingsService test_device_settings_service_; | 65 chromeos::ScopedTestDeviceSettingsService test_device_settings_service_; |
| 66 chromeos::ScopedTestCrosSettings test_cros_settings_; | 66 chromeos::ScopedTestCrosSettings test_cros_settings_; |
| 67 chromeos::ScopedTestUserManager test_user_manager_; | 67 chromeos::ScopedTestUserManager test_user_manager_; |
| 68 #endif | 68 #endif |
| 69 }; | 69 }; |
| 70 | 70 |
| 71 // Test that component extension url overrides have lower priority than | 71 // Test that component extension url overrides have lower priority than |
| 72 // non-component extension url overrides. | 72 // non-component extension url overrides. |
| 73 TEST_F(ExtensionWebUITest, ExtensionURLOverride) { | 73 TEST_F(ExtensionWebUITest, ExtensionURLOverride) { |
| 74 const char kOverrideResource[] = "1.html"; |
| 74 // Register a non-component extension. | 75 // Register a non-component extension. |
| 75 DictionaryBuilder manifest; | 76 DictionaryBuilder manifest; |
| 76 manifest.Set(manifest_keys::kName, "ext1") | 77 manifest.Set(manifest_keys::kName, "ext1") |
| 77 .Set(manifest_keys::kVersion, "0.1") | 78 .Set(manifest_keys::kVersion, "0.1") |
| 78 .Set(std::string(manifest_keys::kChromeURLOverrides), | 79 .Set(std::string(manifest_keys::kChromeURLOverrides), |
| 79 std::move(DictionaryBuilder().Set("bookmarks", "1.html"))); | 80 std::move(DictionaryBuilder().Set("bookmarks", kOverrideResource))); |
| 80 scoped_refptr<Extension> ext_unpacked( | 81 scoped_refptr<Extension> ext_unpacked( |
| 81 ExtensionBuilder() | 82 ExtensionBuilder() |
| 82 .SetManifest(std::move(manifest)) | 83 .SetManifest(std::move(manifest)) |
| 83 .SetLocation(Manifest::UNPACKED) | 84 .SetLocation(Manifest::UNPACKED) |
| 84 .SetID("abcdefghijabcdefghijabcdefghijaa") | 85 .SetID("abcdefghijabcdefghijabcdefghijaa") |
| 85 .Build()); | 86 .Build()); |
| 86 extension_service_->AddExtension(ext_unpacked.get()); | 87 extension_service_->AddExtension(ext_unpacked.get()); |
| 87 | 88 |
| 88 GURL expected_unpacked_override_url(std::string(ext_unpacked->url().spec()) + | 89 const GURL kExpectedUnpackedOverrideUrl = |
| 89 "1.html"); | 90 ext_unpacked->GetResourceURL(kOverrideResource); |
| 90 GURL url("chrome://bookmarks"); | 91 const GURL kBookmarksUrl("chrome://bookmarks"); |
| 91 EXPECT_TRUE(ExtensionWebUI::HandleChromeURLOverride(&url, profile_.get())); | 92 GURL changed_url = kBookmarksUrl; |
| 92 EXPECT_EQ(url, expected_unpacked_override_url); | 93 EXPECT_TRUE( |
| 94 ExtensionWebUI::HandleChromeURLOverride(&changed_url, profile_.get())); |
| 95 EXPECT_EQ(kExpectedUnpackedOverrideUrl, changed_url); |
| 96 EXPECT_TRUE(ExtensionWebUI::HandleChromeURLOverrideReverse(&changed_url, |
| 97 profile_.get())); |
| 98 EXPECT_EQ(kBookmarksUrl, changed_url); |
| 99 |
| 100 GURL url_plus_fragment = kBookmarksUrl.Resolve("#1"); |
| 101 EXPECT_TRUE(ExtensionWebUI::HandleChromeURLOverride(&url_plus_fragment, |
| 102 profile_.get())); |
| 103 EXPECT_EQ(kExpectedUnpackedOverrideUrl.Resolve("#1"), |
| 104 url_plus_fragment); |
| 105 EXPECT_TRUE(ExtensionWebUI::HandleChromeURLOverrideReverse(&url_plus_fragment, |
| 106 profile_.get())); |
| 107 EXPECT_EQ(kBookmarksUrl.Resolve("#1"), url_plus_fragment); |
| 93 | 108 |
| 94 // Register a component extension | 109 // Register a component extension |
| 110 const char kOverrideResource2[] = "2.html"; |
| 95 DictionaryBuilder manifest2; | 111 DictionaryBuilder manifest2; |
| 96 manifest2.Set(manifest_keys::kName, "ext2") | 112 manifest2.Set(manifest_keys::kName, "ext2") |
| 97 .Set(manifest_keys::kVersion, "0.1") | 113 .Set(manifest_keys::kVersion, "0.1") |
| 98 .Set(std::string(manifest_keys::kChromeURLOverrides), | 114 .Set(std::string(manifest_keys::kChromeURLOverrides), |
| 99 std::move(DictionaryBuilder().Set("bookmarks", "2.html"))); | 115 std::move(DictionaryBuilder().Set("bookmarks", kOverrideResource2))); |
| 100 scoped_refptr<Extension> ext_component( | 116 scoped_refptr<Extension> ext_component( |
| 101 ExtensionBuilder() | 117 ExtensionBuilder() |
| 102 .SetManifest(std::move(manifest2)) | 118 .SetManifest(std::move(manifest2)) |
| 103 .SetLocation(Manifest::COMPONENT) | 119 .SetLocation(Manifest::COMPONENT) |
| 104 .SetID("bbabcdefghijabcdefghijabcdefghij") | 120 .SetID("bbabcdefghijabcdefghijabcdefghij") |
| 105 .Build()); | 121 .Build()); |
| 106 extension_service_->AddComponentExtension(ext_component.get()); | 122 extension_service_->AddComponentExtension(ext_component.get()); |
| 107 | 123 |
| 108 // Despite being registered more recently, the component extension should | 124 // Despite being registered more recently, the component extension should |
| 109 // not take precedence over the non-component extension. | 125 // not take precedence over the non-component extension. |
| 110 url = GURL("chrome://bookmarks"); | 126 changed_url = kBookmarksUrl; |
| 111 EXPECT_TRUE(ExtensionWebUI::HandleChromeURLOverride(&url, profile_.get())); | 127 EXPECT_TRUE( |
| 112 EXPECT_EQ(url, expected_unpacked_override_url); | 128 ExtensionWebUI::HandleChromeURLOverride(&changed_url, profile_.get())); |
| 129 EXPECT_EQ(kExpectedUnpackedOverrideUrl, changed_url); |
| 130 EXPECT_TRUE(ExtensionWebUI::HandleChromeURLOverrideReverse(&changed_url, |
| 131 profile_.get())); |
| 132 EXPECT_EQ(kBookmarksUrl, changed_url); |
| 113 | 133 |
| 114 GURL expected_component_override_url( | 134 GURL kExpectedComponentOverrideUrl = |
| 115 std::string(ext_component->url().spec()) + "2.html"); | 135 ext_component->GetResourceURL(kOverrideResource2); |
| 116 | 136 |
| 117 // Unregister non-component extension. Only component extension remaining. | 137 // Unregister non-component extension. Only component extension remaining. |
| 118 ExtensionWebUI::UnregisterChromeURLOverrides( | 138 ExtensionWebUI::UnregisterChromeURLOverrides( |
| 119 profile_.get(), URLOverrides::GetChromeURLOverrides(ext_unpacked.get())); | 139 profile_.get(), URLOverrides::GetChromeURLOverrides(ext_unpacked.get())); |
| 120 url = GURL("chrome://bookmarks"); | 140 changed_url = kBookmarksUrl; |
| 121 EXPECT_TRUE(ExtensionWebUI::HandleChromeURLOverride(&url, profile_.get())); | 141 EXPECT_TRUE( |
| 122 EXPECT_EQ(url, expected_component_override_url); | 142 ExtensionWebUI::HandleChromeURLOverride(&changed_url, profile_.get())); |
| 143 EXPECT_EQ(kExpectedComponentOverrideUrl, changed_url); |
| 144 EXPECT_TRUE(ExtensionWebUI::HandleChromeURLOverrideReverse(&changed_url, |
| 145 profile_.get())); |
| 146 EXPECT_EQ(kBookmarksUrl, changed_url); |
| 123 | 147 |
| 124 // This time the non-component extension was registered more recently and | 148 // This time the non-component extension was registered more recently and |
| 125 // should still take precedence. | 149 // should still take precedence. |
| 126 ExtensionWebUI::RegisterOrActivateChromeURLOverrides( | 150 ExtensionWebUI::RegisterOrActivateChromeURLOverrides( |
| 127 profile_.get(), URLOverrides::GetChromeURLOverrides(ext_unpacked.get())); | 151 profile_.get(), URLOverrides::GetChromeURLOverrides(ext_unpacked.get())); |
| 128 url = GURL("chrome://bookmarks"); | 152 changed_url = kBookmarksUrl; |
| 129 EXPECT_TRUE(ExtensionWebUI::HandleChromeURLOverride(&url, profile_.get())); | 153 EXPECT_TRUE( |
| 130 EXPECT_EQ(url, expected_unpacked_override_url); | 154 ExtensionWebUI::HandleChromeURLOverride(&changed_url, profile_.get())); |
| 155 EXPECT_EQ(kExpectedUnpackedOverrideUrl, changed_url); |
| 156 EXPECT_TRUE(ExtensionWebUI::HandleChromeURLOverrideReverse(&changed_url, |
| 157 profile_.get())); |
| 158 EXPECT_EQ(kBookmarksUrl, changed_url); |
| 131 } | 159 } |
| 132 | 160 |
| 133 } // namespace extensions | 161 } // namespace extensions |
| OLD | NEW |