| 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 "base/bind.h" | 5 #include "base/bind.h" |
| 6 #include "base/command_line.h" | 6 #include "base/command_line.h" |
| 7 #include "base/json/json_writer.h" | 7 #include "base/json/json_writer.h" |
| 8 #include "chrome/browser/extensions/extension_apitest.h" | 8 #include "chrome/browser/extensions/extension_apitest.h" |
| 9 #include "chrome/browser/extensions/extension_service.h" | 9 #include "chrome/browser/extensions/extension_service.h" |
| 10 #include "chrome/browser/extensions/extension_test_message_listener.h" | 10 #include "chrome/browser/extensions/extension_test_message_listener.h" |
| (...skipping 15 matching lines...) Expand all Loading... |
| 26 using settings_namespace::LOCAL; | 26 using settings_namespace::LOCAL; |
| 27 using settings_namespace::Namespace; | 27 using settings_namespace::Namespace; |
| 28 using settings_namespace::SYNC; | 28 using settings_namespace::SYNC; |
| 29 using settings_namespace::ToString; | 29 using settings_namespace::ToString; |
| 30 | 30 |
| 31 namespace { | 31 namespace { |
| 32 | 32 |
| 33 // TODO(kalman): test both EXTENSION_SETTINGS and APP_SETTINGS. | 33 // TODO(kalman): test both EXTENSION_SETTINGS and APP_SETTINGS. |
| 34 const syncable::ModelType kModelType = syncable::EXTENSION_SETTINGS; | 34 const syncable::ModelType kModelType = syncable::EXTENSION_SETTINGS; |
| 35 | 35 |
| 36 class NoopSyncChangeProcessor : public SyncChangeProcessor { | 36 class NoopSyncChangeProcessor : public csync::SyncChangeProcessor { |
| 37 public: | 37 public: |
| 38 virtual SyncError ProcessSyncChanges( | 38 virtual csync::SyncError ProcessSyncChanges( |
| 39 const tracked_objects::Location& from_here, | 39 const tracked_objects::Location& from_here, |
| 40 const SyncChangeList& change_list) OVERRIDE { | 40 const csync::SyncChangeList& change_list) OVERRIDE { |
| 41 return SyncError(); | 41 return csync::SyncError(); |
| 42 } | 42 } |
| 43 | 43 |
| 44 virtual ~NoopSyncChangeProcessor() {}; | 44 virtual ~NoopSyncChangeProcessor() {}; |
| 45 }; | 45 }; |
| 46 | 46 |
| 47 class SyncChangeProcessorDelegate : public SyncChangeProcessor { | 47 class SyncChangeProcessorDelegate : public csync::SyncChangeProcessor { |
| 48 public: | 48 public: |
| 49 explicit SyncChangeProcessorDelegate(SyncChangeProcessor* recipient) | 49 explicit SyncChangeProcessorDelegate(csync::SyncChangeProcessor* recipient) |
| 50 : recipient_(recipient) { | 50 : recipient_(recipient) { |
| 51 DCHECK(recipient_); | 51 DCHECK(recipient_); |
| 52 } | 52 } |
| 53 virtual ~SyncChangeProcessorDelegate() {} | 53 virtual ~SyncChangeProcessorDelegate() {} |
| 54 | 54 |
| 55 // SyncChangeProcessor implementation. | 55 // csync::SyncChangeProcessor implementation. |
| 56 virtual SyncError ProcessSyncChanges( | 56 virtual csync::SyncError ProcessSyncChanges( |
| 57 const tracked_objects::Location& from_here, | 57 const tracked_objects::Location& from_here, |
| 58 const SyncChangeList& change_list) OVERRIDE { | 58 const csync::SyncChangeList& change_list) OVERRIDE { |
| 59 return recipient_->ProcessSyncChanges(from_here, change_list); | 59 return recipient_->ProcessSyncChanges(from_here, change_list); |
| 60 } | 60 } |
| 61 | 61 |
| 62 private: | 62 private: |
| 63 // The recipient of all sync changes. | 63 // The recipient of all sync changes. |
| 64 SyncChangeProcessor* recipient_; | 64 csync::SyncChangeProcessor* recipient_; |
| 65 | 65 |
| 66 DISALLOW_COPY_AND_ASSIGN(SyncChangeProcessorDelegate); | 66 DISALLOW_COPY_AND_ASSIGN(SyncChangeProcessorDelegate); |
| 67 }; | 67 }; |
| 68 | 68 |
| 69 } // namespace | 69 } // namespace |
| 70 | 70 |
| 71 class ExtensionSettingsApiTest : public ExtensionApiTest { | 71 class ExtensionSettingsApiTest : public ExtensionApiTest { |
| 72 protected: | 72 protected: |
| 73 void ReplyWhenSatisfied( | 73 void ReplyWhenSatisfied( |
| 74 Namespace settings_namespace, | 74 Namespace settings_namespace, |
| (...skipping 17 matching lines...) Expand all Loading... |
| 92 } | 92 } |
| 93 | 93 |
| 94 void FinalReplyWhenSatisfied( | 94 void FinalReplyWhenSatisfied( |
| 95 Namespace settings_namespace, | 95 Namespace settings_namespace, |
| 96 const std::string& normal_action, | 96 const std::string& normal_action, |
| 97 const std::string& incognito_action) { | 97 const std::string& incognito_action) { |
| 98 MaybeLoadAndReplyWhenSatisfied( | 98 MaybeLoadAndReplyWhenSatisfied( |
| 99 settings_namespace, normal_action, incognito_action, NULL, true); | 99 settings_namespace, normal_action, incognito_action, NULL, true); |
| 100 } | 100 } |
| 101 | 101 |
| 102 void InitSync(SyncChangeProcessor* sync_processor) { | 102 void InitSync(csync::SyncChangeProcessor* sync_processor) { |
| 103 MessageLoop::current()->RunAllPending(); | 103 MessageLoop::current()->RunAllPending(); |
| 104 InitSyncWithSyncableService( | 104 InitSyncWithSyncableService( |
| 105 sync_processor, | 105 sync_processor, |
| 106 browser()->profile()->GetExtensionService()->settings_frontend()-> | 106 browser()->profile()->GetExtensionService()->settings_frontend()-> |
| 107 GetBackendForSync(kModelType)); | 107 GetBackendForSync(kModelType)); |
| 108 } | 108 } |
| 109 | 109 |
| 110 void SendChanges(const SyncChangeList& change_list) { | 110 void SendChanges(const csync::SyncChangeList& change_list) { |
| 111 MessageLoop::current()->RunAllPending(); | 111 MessageLoop::current()->RunAllPending(); |
| 112 SendChangesToSyncableService( | 112 SendChangesToSyncableService( |
| 113 change_list, | 113 change_list, |
| 114 browser()->profile()->GetExtensionService()->settings_frontend()-> | 114 browser()->profile()->GetExtensionService()->settings_frontend()-> |
| 115 GetBackendForSync(kModelType)); | 115 GetBackendForSync(kModelType)); |
| 116 } | 116 } |
| 117 | 117 |
| 118 private: | 118 private: |
| 119 const Extension* MaybeLoadAndReplyWhenSatisfied( | 119 const Extension* MaybeLoadAndReplyWhenSatisfied( |
| 120 Namespace settings_namespace, | 120 Namespace settings_namespace, |
| (...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 152 scoped_ptr<DictionaryValue> message(new DictionaryValue()); | 152 scoped_ptr<DictionaryValue> message(new DictionaryValue()); |
| 153 message->SetString("namespace", ToString(settings_namespace)); | 153 message->SetString("namespace", ToString(settings_namespace)); |
| 154 message->SetString("action", action); | 154 message->SetString("action", action); |
| 155 message->SetBoolean("isFinalAction", is_final_action); | 155 message->SetBoolean("isFinalAction", is_final_action); |
| 156 std::string message_json; | 156 std::string message_json; |
| 157 base::JSONWriter::Write(message.get(), &message_json); | 157 base::JSONWriter::Write(message.get(), &message_json); |
| 158 return message_json; | 158 return message_json; |
| 159 } | 159 } |
| 160 | 160 |
| 161 void InitSyncWithSyncableService( | 161 void InitSyncWithSyncableService( |
| 162 SyncChangeProcessor* sync_processor, SyncableService* settings_service) { | 162 csync::SyncChangeProcessor* sync_processor, |
| 163 csync::SyncableService* settings_service) { |
| 163 EXPECT_FALSE(settings_service->MergeDataAndStartSyncing( | 164 EXPECT_FALSE(settings_service->MergeDataAndStartSyncing( |
| 164 kModelType, | 165 kModelType, |
| 165 SyncDataList(), | 166 csync::SyncDataList(), |
| 166 scoped_ptr<SyncChangeProcessor>( | 167 scoped_ptr<csync::SyncChangeProcessor>( |
| 167 new SyncChangeProcessorDelegate(sync_processor)), | 168 new SyncChangeProcessorDelegate(sync_processor)), |
| 168 scoped_ptr<SyncErrorFactory>( | 169 scoped_ptr<csync::SyncErrorFactory>( |
| 169 new SyncErrorFactoryMock())).IsSet()); | 170 new csync::SyncErrorFactoryMock())).IsSet()); |
| 170 } | 171 } |
| 171 | 172 |
| 172 void SendChangesToSyncableService( | 173 void SendChangesToSyncableService( |
| 173 const SyncChangeList& change_list, SyncableService* settings_service) { | 174 const csync::SyncChangeList& change_list, |
| 175 csync::SyncableService* settings_service) { |
| 174 EXPECT_FALSE( | 176 EXPECT_FALSE( |
| 175 settings_service->ProcessSyncChanges(FROM_HERE, change_list).IsSet()); | 177 settings_service->ProcessSyncChanges(FROM_HERE, change_list).IsSet()); |
| 176 } | 178 } |
| 177 }; | 179 }; |
| 178 | 180 |
| 179 IN_PROC_BROWSER_TEST_F(ExtensionSettingsApiTest, SimpleTest) { | 181 IN_PROC_BROWSER_TEST_F(ExtensionSettingsApiTest, SimpleTest) { |
| 180 CommandLine::ForCurrentProcess()->AppendSwitch( | 182 CommandLine::ForCurrentProcess()->AppendSwitch( |
| 181 switches::kEnableExperimentalExtensionApis); | 183 switches::kEnableExperimentalExtensionApis); |
| 182 ASSERT_TRUE(RunExtensionTest("settings/simple_test")) << message_; | 184 ASSERT_TRUE(RunExtensionTest("settings/simple_test")) << message_; |
| 183 } | 185 } |
| (...skipping 122 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 306 | 308 |
| 307 const Extension* extension = | 309 const Extension* extension = |
| 308 LoadAndReplyWhenSatisfied(SYNC, | 310 LoadAndReplyWhenSatisfied(SYNC, |
| 309 "assertNoNotifications", "assertNoNotifications", "split_incognito"); | 311 "assertNoNotifications", "assertNoNotifications", "split_incognito"); |
| 310 const std::string& extension_id = extension->id(); | 312 const std::string& extension_id = extension->id(); |
| 311 | 313 |
| 312 NoopSyncChangeProcessor sync_processor; | 314 NoopSyncChangeProcessor sync_processor; |
| 313 InitSync(&sync_processor); | 315 InitSync(&sync_processor); |
| 314 | 316 |
| 315 // Set "foo" to "bar" via sync. | 317 // Set "foo" to "bar" via sync. |
| 316 SyncChangeList sync_changes; | 318 csync::SyncChangeList sync_changes; |
| 317 StringValue bar("bar"); | 319 StringValue bar("bar"); |
| 318 sync_changes.push_back(settings_sync_util::CreateAdd( | 320 sync_changes.push_back(settings_sync_util::CreateAdd( |
| 319 extension_id, "foo", bar, kModelType)); | 321 extension_id, "foo", bar, kModelType)); |
| 320 SendChanges(sync_changes); | 322 SendChanges(sync_changes); |
| 321 | 323 |
| 322 ReplyWhenSatisfied(SYNC, | 324 ReplyWhenSatisfied(SYNC, |
| 323 "assertAddFooNotification", "assertAddFooNotification"); | 325 "assertAddFooNotification", "assertAddFooNotification"); |
| 324 ReplyWhenSatisfied(SYNC, "clearNotifications", "clearNotifications"); | 326 ReplyWhenSatisfied(SYNC, "clearNotifications", "clearNotifications"); |
| 325 | 327 |
| 326 // Remove "foo" via sync. | 328 // Remove "foo" via sync. |
| (...skipping 27 matching lines...) Expand all Loading... |
| 354 | 356 |
| 355 const Extension* extension = | 357 const Extension* extension = |
| 356 LoadAndReplyWhenSatisfied(LOCAL, | 358 LoadAndReplyWhenSatisfied(LOCAL, |
| 357 "assertNoNotifications", "assertNoNotifications", "split_incognito"); | 359 "assertNoNotifications", "assertNoNotifications", "split_incognito"); |
| 358 const std::string& extension_id = extension->id(); | 360 const std::string& extension_id = extension->id(); |
| 359 | 361 |
| 360 NoopSyncChangeProcessor sync_processor; | 362 NoopSyncChangeProcessor sync_processor; |
| 361 InitSync(&sync_processor); | 363 InitSync(&sync_processor); |
| 362 | 364 |
| 363 // Set "foo" to "bar" via sync. | 365 // Set "foo" to "bar" via sync. |
| 364 SyncChangeList sync_changes; | 366 csync::SyncChangeList sync_changes; |
| 365 StringValue bar("bar"); | 367 StringValue bar("bar"); |
| 366 sync_changes.push_back(settings_sync_util::CreateAdd( | 368 sync_changes.push_back(settings_sync_util::CreateAdd( |
| 367 extension_id, "foo", bar, kModelType)); | 369 extension_id, "foo", bar, kModelType)); |
| 368 SendChanges(sync_changes); | 370 SendChanges(sync_changes); |
| 369 | 371 |
| 370 ReplyWhenSatisfied(LOCAL, "assertNoNotifications", "assertNoNotifications"); | 372 ReplyWhenSatisfied(LOCAL, "assertNoNotifications", "assertNoNotifications"); |
| 371 | 373 |
| 372 // Remove "foo" via sync. | 374 // Remove "foo" via sync. |
| 373 sync_changes.clear(); | 375 sync_changes.clear(); |
| 374 sync_changes.push_back(settings_sync_util::CreateDelete( | 376 sync_changes.push_back(settings_sync_util::CreateDelete( |
| 375 extension_id, "foo", kModelType)); | 377 extension_id, "foo", kModelType)); |
| 376 SendChanges(sync_changes); | 378 SendChanges(sync_changes); |
| 377 | 379 |
| 378 FinalReplyWhenSatisfied(LOCAL, | 380 FinalReplyWhenSatisfied(LOCAL, |
| 379 "assertNoNotifications", "assertNoNotifications"); | 381 "assertNoNotifications", "assertNoNotifications"); |
| 380 | 382 |
| 381 EXPECT_TRUE(catcher.GetNextResult()) << catcher.message(); | 383 EXPECT_TRUE(catcher.GetNextResult()) << catcher.message(); |
| 382 EXPECT_TRUE(catcher_incognito.GetNextResult()) << catcher.message(); | 384 EXPECT_TRUE(catcher_incognito.GetNextResult()) << catcher.message(); |
| 383 } | 385 } |
| 384 | 386 |
| 385 } // namespace extensions | 387 } // namespace extensions |
| OLD | NEW |