| OLD | NEW |
| 1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2011 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/file_util.h" | 5 #include "base/file_util.h" |
| 6 #include "base/json/json_value_serializer.h" | 6 #include "base/json/json_value_serializer.h" |
| 7 #include "base/path_service.h" | 7 #include "base/path_service.h" |
| 8 #include "base/scoped_temp_dir.h" | 8 #include "base/scoped_temp_dir.h" |
| 9 #include "base/utf_string_conversions.h" | 9 #include "base/utf_string_conversions.h" |
| 10 #include "chrome/browser/extensions/test_extension_service.h" | 10 #include "chrome/browser/extensions/test_extension_service.h" |
| 11 #include "chrome/browser/intents/web_intents_registry.h" | 11 #include "chrome/browser/intents/web_intents_registry.h" |
| 12 #include "chrome/browser/webdata/web_data_service.h" | 12 #include "chrome/browser/webdata/web_data_service.h" |
| 13 #include "chrome/common/chrome_paths.h" | 13 #include "chrome/common/chrome_paths.h" |
| 14 #include "chrome/common/extensions/extension_set.h" |
| 14 #include "content/test/test_browser_thread.h" | 15 #include "content/test/test_browser_thread.h" |
| 15 #include "testing/gmock/include/gmock/gmock.h" | 16 #include "testing/gmock/include/gmock/gmock.h" |
| 16 #include "testing/gtest/include/gtest/gtest.h" | 17 #include "testing/gtest/include/gtest/gtest.h" |
| 17 | 18 |
| 18 using content::BrowserThread; | 19 using content::BrowserThread; |
| 19 using webkit_glue::WebIntentServiceData; | 20 using webkit_glue::WebIntentServiceData; |
| 20 | 21 |
| 21 class MockExtensionService: public TestExtensionService { | 22 class MockExtensionService: public TestExtensionService { |
| 22 public: | 23 public: |
| 23 virtual ~MockExtensionService() {} | 24 virtual ~MockExtensionService() {} |
| 24 MOCK_CONST_METHOD0(extensions, const ExtensionList*()); | 25 MOCK_CONST_METHOD0(extensions, const ExtensionSet*()); |
| 25 }; | 26 }; |
| 26 | 27 |
| 27 // TODO(groby): Unify loading functions with extension_manifest_unittest code. | |
| 28 DictionaryValue* LoadManifestFile(const std::string& filename, | |
| 29 std::string* error) { | |
| 30 FilePath path; | |
| 31 PathService::Get(chrome::DIR_TEST_DATA, &path); | |
| 32 path = path.AppendASCII("extensions") | |
| 33 .AppendASCII("manifest_tests") | |
| 34 .AppendASCII(filename.c_str()); | |
| 35 EXPECT_TRUE(file_util::PathExists(path)); | |
| 36 | |
| 37 JSONFileValueSerializer serializer(path); | |
| 38 return static_cast<DictionaryValue*>(serializer.Deserialize(NULL, error)); | |
| 39 } | |
| 40 | |
| 41 namespace { | 28 namespace { |
| 42 | 29 |
| 43 scoped_refptr<Extension> LoadExtensionWithLocation( | 30 // TODO(groby): Unify loading functions with extension_manifest_unittest code. |
| 44 DictionaryValue* value, | 31 DictionaryValue* LoadManifestFile(const FilePath& path, |
| 45 Extension::Location location, | 32 std::string* error) { |
| 46 bool strict_error_checks, | 33 EXPECT_TRUE(file_util::PathExists(path)); |
| 47 std::string* error) { | 34 JSONFileValueSerializer serializer(path); |
| 48 FilePath path; | 35 return static_cast<DictionaryValue*>(serializer.Deserialize(NULL, error)); |
| 49 PathService::Get(chrome::DIR_TEST_DATA, &path); | |
| 50 path = path.AppendASCII("extensions").AppendASCII("manifest_tests"); | |
| 51 int flags = Extension::NO_FLAGS; | |
| 52 if (strict_error_checks) | |
| 53 flags |= Extension::STRICT_ERROR_CHECKS; | |
| 54 return Extension::Create(path.DirName(), location, *value, flags, error); | |
| 55 } | 36 } |
| 56 | 37 |
| 57 scoped_refptr<Extension> LoadExtensionWithLocation( | 38 scoped_refptr<Extension> LoadExtensionWithLocation( |
| 58 const std::string& name, | 39 const std::string& name, |
| 59 Extension::Location location, | 40 Extension::Location location, |
| 60 bool strict_error_checks, | 41 bool strict_error_checks, |
| 61 std::string* error) { | 42 std::string* error) { |
| 62 scoped_ptr<DictionaryValue> value(LoadManifestFile(name, error)); | 43 FilePath path; |
| 44 PathService::Get(chrome::DIR_TEST_DATA, &path); |
| 45 path = path.AppendASCII("extensions") |
| 46 .AppendASCII("manifest_tests") |
| 47 .AppendASCII(name.c_str()); |
| 48 scoped_ptr<DictionaryValue> value(LoadManifestFile(path, error)); |
| 63 if (!value.get()) | 49 if (!value.get()) |
| 64 return NULL; | 50 return NULL; |
| 65 return LoadExtensionWithLocation(value.get(), location, | 51 int flags = Extension::NO_FLAGS; |
| 66 strict_error_checks, error); | 52 if (strict_error_checks) |
| 53 flags |= Extension::STRICT_ERROR_CHECKS; |
| 54 return Extension::CreateWithId(path.DirName(), |
| 55 location, |
| 56 *value, |
| 57 flags, |
| 58 Extension::GenerateIdForPath(path), |
| 59 error); |
| 67 } | 60 } |
| 68 | 61 |
| 69 scoped_refptr<Extension> LoadExtension(const std::string& name, | 62 scoped_refptr<Extension> LoadExtension(const std::string& name, |
| 70 std::string* error) { | 63 std::string* error) { |
| 71 return LoadExtensionWithLocation(name, Extension::INTERNAL, false, error); | 64 return LoadExtensionWithLocation(name, Extension::INTERNAL, false, error); |
| 72 } | 65 } |
| 73 | 66 |
| 74 scoped_refptr<Extension> LoadAndExpectSuccess(const std::string& name) { | 67 scoped_refptr<Extension> LoadAndExpectSuccess(const std::string& name) { |
| 75 std::string error; | 68 std::string error; |
| 76 scoped_refptr<Extension> extension = LoadExtension(name, &error); | 69 scoped_refptr<Extension> extension = LoadExtension(name, &error); |
| (...skipping 30 matching lines...) Expand all Loading... |
| 107 db_thread_.Stop(); | 100 db_thread_.Stop(); |
| 108 MessageLoop::current()->PostTask(FROM_HERE, new MessageLoop::QuitTask); | 101 MessageLoop::current()->PostTask(FROM_HERE, new MessageLoop::QuitTask); |
| 109 MessageLoop::current()->Run(); | 102 MessageLoop::current()->Run(); |
| 110 } | 103 } |
| 111 | 104 |
| 112 MessageLoopForUI message_loop_; | 105 MessageLoopForUI message_loop_; |
| 113 content::TestBrowserThread ui_thread_; | 106 content::TestBrowserThread ui_thread_; |
| 114 content::TestBrowserThread db_thread_; | 107 content::TestBrowserThread db_thread_; |
| 115 scoped_refptr<WebDataService> wds_; | 108 scoped_refptr<WebDataService> wds_; |
| 116 MockExtensionService extension_service_; | 109 MockExtensionService extension_service_; |
| 117 ExtensionList extensions_; | 110 ExtensionSet extensions_; |
| 118 WebIntentsRegistry registry_; | 111 WebIntentsRegistry registry_; |
| 119 ScopedTempDir temp_dir_; | 112 ScopedTempDir temp_dir_; |
| 120 }; | 113 }; |
| 121 | 114 |
| 122 // Simple consumer for WebIntentsRegistry notifications. Stores result data and | 115 // Simple consumer for WebIntentsRegistry notifications. Stores result data and |
| 123 // terminates UI thread when callback is invoked. | 116 // terminates UI thread when callback is invoked. |
| 124 class TestConsumer: public WebIntentsRegistry::Consumer { | 117 class TestConsumer: public WebIntentsRegistry::Consumer { |
| 125 public: | 118 public: |
| 126 virtual void OnIntentsQueryDone( | 119 virtual void OnIntentsQueryDone( |
| 127 WebIntentsRegistry::QueryID id, | 120 WebIntentsRegistry::QueryID id, |
| (...skipping 78 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 206 std::swap(consumer.services_[0],consumer.services_[1]); | 199 std::swap(consumer.services_[0],consumer.services_[1]); |
| 207 | 200 |
| 208 service.action = ASCIIToUTF16("share"); | 201 service.action = ASCIIToUTF16("share"); |
| 209 EXPECT_EQ(service, consumer.services_[0]); | 202 EXPECT_EQ(service, consumer.services_[0]); |
| 210 | 203 |
| 211 service.action = ASCIIToUTF16("search"); | 204 service.action = ASCIIToUTF16("search"); |
| 212 EXPECT_EQ(service, consumer.services_[1]); | 205 EXPECT_EQ(service, consumer.services_[1]); |
| 213 } | 206 } |
| 214 | 207 |
| 215 TEST_F(WebIntentsRegistryTest, GetExtensionIntents) { | 208 TEST_F(WebIntentsRegistryTest, GetExtensionIntents) { |
| 216 extensions_.push_back(LoadAndExpectSuccess("intent_valid.json")); | 209 extensions_.Insert(LoadAndExpectSuccess("intent_valid.json")); |
| 217 extensions_.push_back(LoadAndExpectSuccess("intent_valid_2.json")); | 210 extensions_.Insert(LoadAndExpectSuccess("intent_valid_2.json")); |
| 211 ASSERT_EQ(2U, extensions_.size()); |
| 218 | 212 |
| 219 TestConsumer consumer; | 213 TestConsumer consumer; |
| 220 consumer.expected_id_ = registry_.GetAllIntentProviders(&consumer); | 214 consumer.expected_id_ = registry_.GetAllIntentProviders(&consumer); |
| 221 consumer.WaitForData(); | 215 consumer.WaitForData(); |
| 222 ASSERT_EQ(2U, consumer.services_.size()); | 216 ASSERT_EQ(2U, consumer.services_.size()); |
| 223 } | 217 } |
| 224 | 218 |
| 225 TEST_F(WebIntentsRegistryTest, GetSomeExtensionIntents) { | 219 TEST_F(WebIntentsRegistryTest, GetSomeExtensionIntents) { |
| 226 extensions_.push_back(LoadAndExpectSuccess("intent_valid.json")); | 220 extensions_.Insert(LoadAndExpectSuccess("intent_valid.json")); |
| 227 extensions_.push_back(LoadAndExpectSuccess("intent_valid_2.json")); | 221 extensions_.Insert(LoadAndExpectSuccess("intent_valid_2.json")); |
| 222 ASSERT_EQ(2U, extensions_.size()); |
| 228 | 223 |
| 229 TestConsumer consumer; | 224 TestConsumer consumer; |
| 230 consumer.expected_id_ = registry_.GetIntentProviders( | 225 consumer.expected_id_ = registry_.GetIntentProviders( |
| 231 ASCIIToUTF16("http://webintents.org/edit"), ASCIIToUTF16("*"), | 226 ASCIIToUTF16("http://webintents.org/edit"), ASCIIToUTF16("*"), |
| 232 &consumer); | 227 &consumer); |
| 233 consumer.WaitForData(); | 228 consumer.WaitForData(); |
| 234 ASSERT_EQ(1U, consumer.services_.size()); | 229 ASSERT_EQ(1U, consumer.services_.size()); |
| 235 } | 230 } |
| 236 | 231 |
| 237 TEST_F(WebIntentsRegistryTest, GetIntentsFromMixedSources) { | 232 TEST_F(WebIntentsRegistryTest, GetIntentsFromMixedSources) { |
| 238 extensions_.push_back(LoadAndExpectSuccess("intent_valid.json")); | 233 extensions_.Insert(LoadAndExpectSuccess("intent_valid.json")); |
| 239 extensions_.push_back(LoadAndExpectSuccess("intent_valid_2.json")); | 234 extensions_.Insert(LoadAndExpectSuccess("intent_valid_2.json")); |
| 235 ASSERT_EQ(2U, extensions_.size()); |
| 240 | 236 |
| 241 webkit_glue::WebIntentServiceData service; | 237 webkit_glue::WebIntentServiceData service; |
| 242 service.service_url = GURL("http://somewhere.com/intent/edit.html"); | 238 service.service_url = GURL("http://somewhere.com/intent/edit.html"); |
| 243 service.action = ASCIIToUTF16("http://webintents.org/edit"); | 239 service.action = ASCIIToUTF16("http://webintents.org/edit"); |
| 244 service.type = ASCIIToUTF16("image/*"); | 240 service.type = ASCIIToUTF16("image/*"); |
| 245 service.title = ASCIIToUTF16("Image Editing Service"); | 241 service.title = ASCIIToUTF16("Image Editing Service"); |
| 246 registry_.RegisterIntentProvider(service); | 242 registry_.RegisterIntentProvider(service); |
| 247 | 243 |
| 248 TestConsumer consumer; | 244 TestConsumer consumer; |
| 249 consumer.expected_id_ = registry_.GetIntentProviders( | 245 consumer.expected_id_ = registry_.GetIntentProviders( |
| (...skipping 73 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 323 consumer.expected_id_ = registry_.GetIntentProviders( | 319 consumer.expected_id_ = registry_.GetIntentProviders( |
| 324 ASCIIToUTF16("http://webintents.org/share"), | 320 ASCIIToUTF16("http://webintents.org/share"), |
| 325 ASCIIToUTF16("*"), &consumer); | 321 ASCIIToUTF16("*"), &consumer); |
| 326 consumer.WaitForData(); | 322 consumer.WaitForData(); |
| 327 ASSERT_EQ(4U, consumer.services_.size()); | 323 ASSERT_EQ(4U, consumer.services_.size()); |
| 328 EXPECT_EQ(services[0], consumer.services_[0]); | 324 EXPECT_EQ(services[0], consumer.services_[0]); |
| 329 EXPECT_EQ(services[1], consumer.services_[1]); | 325 EXPECT_EQ(services[1], consumer.services_[1]); |
| 330 EXPECT_EQ(services[2], consumer.services_[2]); | 326 EXPECT_EQ(services[2], consumer.services_[2]); |
| 331 EXPECT_EQ(services[3], consumer.services_[3]); | 327 EXPECT_EQ(services[3], consumer.services_[3]); |
| 332 } | 328 } |
| OLD | NEW |