| OLD | NEW |
| 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 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 | 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 "chrome/common/extensions/extension.h" | 5 #include "chrome/common/extensions/extension.h" |
| 6 | 6 |
| 7 #include "base/file_path.h" | 7 #include "base/file_path.h" |
| 8 #include "base/file_util.h" | 8 #include "base/file_util.h" |
| 9 #include "base/format_macros.h" | 9 #include "base/format_macros.h" |
| 10 #include "base/json/json_file_value_serializer.h" | 10 #include "base/json/json_file_value_serializer.h" |
| 11 #include "base/path_service.h" | 11 #include "base/path_service.h" |
| 12 #include "base/string_number_conversions.h" | 12 #include "base/string_number_conversions.h" |
| 13 #include "base/stringprintf.h" | 13 #include "base/stringprintf.h" |
| 14 #include "base/utf_string_conversions.h" | 14 #include "base/utf_string_conversions.h" |
| 15 #include "chrome/common/chrome_paths.h" | 15 #include "chrome/common/chrome_paths.h" |
| 16 #include "chrome/common/extensions/api/extension_action/action_info.h" |
| 16 #include "chrome/common/extensions/command.h" | 17 #include "chrome/common/extensions/command.h" |
| 17 #include "chrome/common/extensions/extension_file_util.h" | 18 #include "chrome/common/extensions/extension_file_util.h" |
| 18 #include "chrome/common/extensions/extension_manifest_constants.h" | 19 #include "chrome/common/extensions/extension_manifest_constants.h" |
| 19 #include "chrome/common/extensions/extension_resource.h" | 20 #include "chrome/common/extensions/extension_resource.h" |
| 20 #include "chrome/common/extensions/features/feature.h" | 21 #include "chrome/common/extensions/features/feature.h" |
| 21 #include "chrome/common/extensions/permissions/api_permission.h" | 22 #include "chrome/common/extensions/permissions/api_permission.h" |
| 22 #include "chrome/common/extensions/permissions/permission_set.h" | 23 #include "chrome/common/extensions/permissions/permission_set.h" |
| 23 #include "chrome/common/extensions/permissions/socket_permission.h" | 24 #include "chrome/common/extensions/permissions/socket_permission.h" |
| 24 #include "chrome/common/extensions/permissions/usb_device_permission.h" | 25 #include "chrome/common/extensions/permissions/usb_device_permission.h" |
| 25 #include "chrome/common/url_constants.h" | 26 #include "chrome/common/url_constants.h" |
| 26 #include "extensions/common/error_utils.h" | 27 #include "extensions/common/error_utils.h" |
| 27 #include "googleurl/src/gurl.h" | 28 #include "googleurl/src/gurl.h" |
| 28 #include "net/base/mime_sniffer.h" | 29 #include "net/base/mime_sniffer.h" |
| 29 #include "net/base/mock_host_resolver.h" | 30 #include "net/base/mock_host_resolver.h" |
| 30 #include "skia/ext/image_operations.h" | 31 #include "skia/ext/image_operations.h" |
| 31 #include "testing/gtest/include/gtest/gtest.h" | 32 #include "testing/gtest/include/gtest/gtest.h" |
| 32 #include "third_party/skia/include/core/SkBitmap.h" | 33 #include "third_party/skia/include/core/SkBitmap.h" |
| 33 #include "ui/gfx/codec/png_codec.h" | 34 #include "ui/gfx/codec/png_codec.h" |
| 34 | 35 |
| 35 using content::SocketPermissionRequest; | 36 using content::SocketPermissionRequest; |
| 36 using extensions::APIPermission; | |
| 37 using extensions::APIPermissionSet; | |
| 38 using extensions::ErrorUtils; | |
| 39 using extensions::Extension; | |
| 40 using extensions::Feature; | |
| 41 using extensions::PermissionSet; | |
| 42 using extensions::SocketPermission; | |
| 43 using extensions::URLPatternSet; | |
| 44 using extensions::UsbDevicePermission; | |
| 45 | 37 |
| 46 namespace keys = extension_manifest_keys; | 38 namespace keys = extension_manifest_keys; |
| 47 namespace values = extension_manifest_values; | 39 namespace values = extension_manifest_values; |
| 48 namespace errors = extension_manifest_errors; | 40 namespace errors = extension_manifest_errors; |
| 49 | 41 |
| 42 namespace extensions { |
| 50 namespace { | 43 namespace { |
| 51 | 44 |
| 52 scoped_refptr<Extension> LoadManifestUnchecked( | 45 scoped_refptr<Extension> LoadManifestUnchecked( |
| 53 const std::string& dir, | 46 const std::string& dir, |
| 54 const std::string& test_file, | 47 const std::string& test_file, |
| 55 Extension::Location location, | 48 Extension::Location location, |
| 56 int extra_flags, | 49 int extra_flags, |
| 57 std::string* error) { | 50 std::string* error) { |
| 58 FilePath path; | 51 FilePath path; |
| 59 PathService::Get(chrome::DIR_TEST_DATA, &path); | 52 PathService::Get(chrome::DIR_TEST_DATA, &path); |
| (...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 94 const std::string& test_file) { | 87 const std::string& test_file) { |
| 95 return LoadManifest(dir, test_file, Extension::NO_FLAGS); | 88 return LoadManifest(dir, test_file, Extension::NO_FLAGS); |
| 96 } | 89 } |
| 97 | 90 |
| 98 static scoped_refptr<Extension> LoadManifestStrict( | 91 static scoped_refptr<Extension> LoadManifestStrict( |
| 99 const std::string& dir, | 92 const std::string& dir, |
| 100 const std::string& test_file) { | 93 const std::string& test_file) { |
| 101 return LoadManifest(dir, test_file, Extension::NO_FLAGS); | 94 return LoadManifest(dir, test_file, Extension::NO_FLAGS); |
| 102 } | 95 } |
| 103 | 96 |
| 104 static scoped_ptr<Extension::ActionInfo> LoadAction( | 97 static scoped_ptr<ActionInfo> LoadAction( |
| 105 const std::string& manifest) { | 98 const std::string& manifest) { |
| 106 scoped_refptr<Extension> extension = LoadManifest("page_action", | 99 scoped_refptr<Extension> extension = LoadManifest("page_action", |
| 107 manifest); | 100 manifest); |
| 108 EXPECT_TRUE(extension->page_action_info()); | 101 EXPECT_TRUE(extension->page_action_info()); |
| 109 if (extension->page_action_info()) { | 102 if (extension->page_action_info()) { |
| 110 return make_scoped_ptr(new Extension::ActionInfo( | 103 return make_scoped_ptr(new ActionInfo( |
| 111 *extension->page_action_info())); | 104 *extension->page_action_info())); |
| 112 } | 105 } |
| 113 ADD_FAILURE() << "Expected manifest in " << manifest | 106 ADD_FAILURE() << "Expected manifest in " << manifest |
| 114 << " to include a page_action section."; | 107 << " to include a page_action section."; |
| 115 return scoped_ptr<Extension::ActionInfo>(); | 108 return scoped_ptr<ActionInfo>(); |
| 116 } | 109 } |
| 117 | 110 |
| 118 static void LoadActionAndExpectError(const std::string& manifest, | 111 static void LoadActionAndExpectError(const std::string& manifest, |
| 119 const std::string& expected_error) { | 112 const std::string& expected_error) { |
| 120 std::string error; | 113 std::string error; |
| 121 scoped_refptr<Extension> extension = LoadManifestUnchecked("page_action", | 114 scoped_refptr<Extension> extension = LoadManifestUnchecked("page_action", |
| 122 manifest, Extension::INTERNAL, Extension::NO_FLAGS, &error); | 115 manifest, Extension::INTERNAL, Extension::NO_FLAGS, &error); |
| 123 EXPECT_FALSE(extension); | 116 EXPECT_FALSE(extension); |
| 124 EXPECT_EQ(expected_error, error); | 117 EXPECT_EQ(expected_error, error); |
| 125 } | 118 } |
| (...skipping 81 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 207 &err, &warnings)); | 200 &err, &warnings)); |
| 208 EXPECT_EQ(0U, warnings.size()); | 201 EXPECT_EQ(0U, warnings.size()); |
| 209 | 202 |
| 210 EXPECT_EQ(extension->path().AppendASCII("test.html").value(), | 203 EXPECT_EQ(extension->path().AppendASCII("test.html").value(), |
| 211 extension->GetResource("test.html").GetFilePath().value()); | 204 extension->GetResource("test.html").GetFilePath().value()); |
| 212 EXPECT_EQ(extension->path().AppendASCII("test.js").value(), | 205 EXPECT_EQ(extension->path().AppendASCII("test.js").value(), |
| 213 extension->GetResource("test.js").GetFilePath().value()); | 206 extension->GetResource("test.js").GetFilePath().value()); |
| 214 } | 207 } |
| 215 | 208 |
| 216 TEST(ExtensionTest, LoadPageActionHelper) { | 209 TEST(ExtensionTest, LoadPageActionHelper) { |
| 217 scoped_ptr<Extension::ActionInfo> action; | 210 scoped_ptr<ActionInfo> action; |
| 218 | 211 |
| 219 // First try with an empty dictionary. | 212 // First try with an empty dictionary. |
| 220 action = LoadAction("page_action_empty.json"); | 213 action = LoadAction("page_action_empty.json"); |
| 221 ASSERT_TRUE(action != NULL); | 214 ASSERT_TRUE(action != NULL); |
| 222 | 215 |
| 223 // Now setup some values to use in the action. | 216 // Now setup some values to use in the action. |
| 224 const std::string id("MyExtensionActionId"); | 217 const std::string id("MyExtensionActionId"); |
| 225 const std::string name("MyExtensionActionName"); | 218 const std::string name("MyExtensionActionName"); |
| 226 std::string img1("image1.png"); | 219 std::string img1("image1.png"); |
| 227 | 220 |
| (...skipping 521 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 749 EXPECT_FALSE(extension->from_webstore()); | 742 EXPECT_FALSE(extension->from_webstore()); |
| 750 } | 743 } |
| 751 | 744 |
| 752 TEST(ExtensionTest, BrowserActionSynthesizesCommand) { | 745 TEST(ExtensionTest, BrowserActionSynthesizesCommand) { |
| 753 scoped_refptr<Extension> extension; | 746 scoped_refptr<Extension> extension; |
| 754 | 747 |
| 755 extension = LoadManifest("api_test/browser_action/synthesized", | 748 extension = LoadManifest("api_test/browser_action/synthesized", |
| 756 "manifest.json"); | 749 "manifest.json"); |
| 757 // An extension with a browser action but no extension command specified | 750 // An extension with a browser action but no extension command specified |
| 758 // should get a command assigned to it. | 751 // should get a command assigned to it. |
| 759 const extensions::Command* command = extension->browser_action_command(); | 752 const Command* command = extension->browser_action_command(); |
| 760 ASSERT_TRUE(command != NULL); | 753 ASSERT_TRUE(command != NULL); |
| 761 ASSERT_EQ(ui::VKEY_UNKNOWN, command->accelerator().key_code()); | 754 ASSERT_EQ(ui::VKEY_UNKNOWN, command->accelerator().key_code()); |
| 762 } | 755 } |
| 763 | 756 |
| 764 // Base class for testing the CanExecuteScriptOnPage and CanCaptureVisiblePage | 757 // Base class for testing the CanExecuteScriptOnPage and CanCaptureVisiblePage |
| 765 // methods of Extension for extensions with various permissions. | 758 // methods of Extension for extensions with various permissions. |
| 766 class ExtensionScriptAndCaptureVisibleTest : public testing::Test { | 759 class ExtensionScriptAndCaptureVisibleTest : public testing::Test { |
| 767 protected: | 760 protected: |
| 768 ExtensionScriptAndCaptureVisibleTest() | 761 ExtensionScriptAndCaptureVisibleTest() |
| 769 : http_url("http://www.google.com"), | 762 : http_url("http://www.google.com"), |
| (...skipping 517 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1287 | 1280 |
| 1288 TEST(ExtensionTest, GetSyncTypeExtensionWithTwoPlugins) { | 1281 TEST(ExtensionTest, GetSyncTypeExtensionWithTwoPlugins) { |
| 1289 scoped_refptr<Extension> extension( | 1282 scoped_refptr<Extension> extension( |
| 1290 MakeSyncTestExtension(EXTENSION, GURL(), GURL(), | 1283 MakeSyncTestExtension(EXTENSION, GURL(), GURL(), |
| 1291 Extension::INTERNAL, 2, FilePath(), | 1284 Extension::INTERNAL, 2, FilePath(), |
| 1292 Extension::NO_FLAGS)); | 1285 Extension::NO_FLAGS)); |
| 1293 if (extension) | 1286 if (extension) |
| 1294 EXPECT_EQ(extension->GetSyncType(), Extension::SYNC_TYPE_NONE); | 1287 EXPECT_EQ(extension->GetSyncType(), Extension::SYNC_TYPE_NONE); |
| 1295 } | 1288 } |
| 1296 #endif // !defined(OS_CHROMEOS) | 1289 #endif // !defined(OS_CHROMEOS) |
| 1290 |
| 1291 } // namespace extensions |
| OLD | NEW |