Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(512)

Side by Side Diff: chrome/browser/webdata/web_data_service_unittest.cc

Issue 9370043: Add default intents methods for web data service. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Refactor WaitUntilCalled Created 8 years, 10 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « chrome/browser/webdata/web_data_service.cc ('k') | chrome/browser/webdata/web_intents_table.h » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
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 <string> 5 #include <string>
6 #include <vector> 6 #include <vector>
7 7
8 #include "base/basictypes.h" 8 #include "base/basictypes.h"
9 #include "base/memory/ref_counted.h" 9 #include "base/memory/ref_counted.h"
10 #include "base/memory/scoped_ptr.h" 10 #include "base/memory/scoped_ptr.h"
11 #include "base/memory/scoped_vector.h" 11 #include "base/memory/scoped_vector.h"
12 #include "base/message_loop.h" 12 #include "base/message_loop.h"
13 #include "base/scoped_temp_dir.h" 13 #include "base/scoped_temp_dir.h"
14 #include "base/stl_util.h" 14 #include "base/stl_util.h"
15 #include "base/string16.h" 15 #include "base/string16.h"
16 #include "base/string_util.h" 16 #include "base/string_util.h"
17 #include "base/synchronization/waitable_event.h" 17 #include "base/synchronization/waitable_event.h"
18 #include "base/time.h" 18 #include "base/time.h"
19 #include "base/utf_string_conversions.h" 19 #include "base/utf_string_conversions.h"
20 #include "chrome/browser/autofill/autofill_profile.h" 20 #include "chrome/browser/autofill/autofill_profile.h"
21 #include "chrome/browser/autofill/credit_card.h" 21 #include "chrome/browser/autofill/credit_card.h"
22 #include "chrome/browser/intents/default_web_intent_service.h"
22 #include "chrome/browser/webdata/autofill_change.h" 23 #include "chrome/browser/webdata/autofill_change.h"
23 #include "chrome/browser/webdata/autofill_entry.h" 24 #include "chrome/browser/webdata/autofill_entry.h"
24 #include "chrome/browser/webdata/web_data_service.h" 25 #include "chrome/browser/webdata/web_data_service.h"
25 #include "chrome/browser/webdata/web_data_service_test_util.h" 26 #include "chrome/browser/webdata/web_data_service_test_util.h"
26 #include "chrome/browser/webdata/web_intents_table.h" 27 #include "chrome/browser/webdata/web_intents_table.h"
27 #include "chrome/common/chrome_notification_types.h" 28 #include "chrome/common/chrome_notification_types.h"
28 #include "chrome/common/chrome_paths.h" 29 #include "chrome/common/chrome_paths.h"
29 #include "chrome/common/guid.h" 30 #include "chrome/common/guid.h"
30 #include "chrome/test/base/thread_observer_helper.h" 31 #include "chrome/test/base/thread_observer_helper.h"
31 #include "content/public/browser/notification_details.h" 32 #include "content/public/browser/notification_details.h"
(...skipping 107 matching lines...) Expand 10 before | Expand all | Expand 10 after
139 string16 name1_; 140 string16 name1_;
140 string16 name2_; 141 string16 name2_;
141 string16 value1_; 142 string16 value1_;
142 string16 value2_; 143 string16 value2_;
143 int unique_id1_, unique_id2_; 144 int unique_id1_, unique_id2_;
144 const TimeDelta test_timeout_; 145 const TimeDelta test_timeout_;
145 scoped_refptr<AutofillDBThreadObserverHelper> observer_helper_; 146 scoped_refptr<AutofillDBThreadObserverHelper> observer_helper_;
146 WaitableEvent done_event_; 147 WaitableEvent done_event_;
147 }; 148 };
148 149
149 // Simple consumer for WebIntents data. Stores the result data and quits UI 150 // Run the current message loop. OnWebDataServiceRequestDone will invoke
150 // message loop when callback is invoked. 151 // MessageLoop::Quit on completion, so this call will finish at that point.
152 static void WaitUntilCalled() {
153 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
154 MessageLoop::current()->Run();
155 }
156
157 // Simple consumer for WebIntents service data. Stores the result data and
158 // quits UI message loop when callback is invoked.
151 class WebIntentsConsumer : public WebDataServiceConsumer { 159 class WebIntentsConsumer : public WebDataServiceConsumer {
152 public: 160 public:
153 virtual void OnWebDataServiceRequestDone(WebDataService::Handle h, 161 virtual void OnWebDataServiceRequestDone(WebDataService::Handle h,
154 const WDTypedResult* result) { 162 const WDTypedResult* result) {
155 services_.clear(); 163 services_.clear();
156 if (result) { 164 if (result) {
157 DCHECK(result->GetType() == WEB_INTENTS_RESULT); 165 DCHECK(result->GetType() == WEB_INTENTS_RESULT);
158 services_ = static_cast< 166 services_ = static_cast<
159 const WDResult<std::vector<WebIntentServiceData> >*>(result)-> 167 const WDResult<std::vector<WebIntentServiceData> >*>(result)->
160 GetValue(); 168 GetValue();
161 } 169 }
162 170
163 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); 171 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
164 MessageLoop::current()->Quit(); 172 MessageLoop::current()->Quit();
165 } 173 }
166 174
167 // Run the current message loop. OnWebDataServiceRequestDone will invoke
168 // MessageLoop::Quit on completion, so this call will finish at that point.
169 static void WaitUntilCalled() {
170 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
171 MessageLoop::current()->Run();
172 }
173
174 // Result data from completion callback. 175 // Result data from completion callback.
175 std::vector<WebIntentServiceData> services_; 176 std::vector<WebIntentServiceData> services_;
176 }; 177 };
177 178
179 // Simple consumer for WebIntents defaults data. Stores the result data and
180 // quits UI message loop when callback is invoked.
181 class WebIntentsDefaultsConsumer : public WebDataServiceConsumer {
182 public:
183 virtual void OnWebDataServiceRequestDone(WebDataService::Handle h,
184 const WDTypedResult* result) {
185 services_.clear();
186 if (result) {
187 DCHECK(result->GetType() == WEB_INTENTS_DEFAULTS_RESULT);
188 services_ = static_cast<
189 const WDResult<std::vector<DefaultWebIntentService> >*>(result)->
190 GetValue();
191 }
192
193 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
194 MessageLoop::current()->Quit();
195 }
196
197 // Result data from completion callback.
198 std::vector<DefaultWebIntentService> services_;
199 };
200
178 // Simple consumer for Keywords data. Stores the result data and quits UI 201 // Simple consumer for Keywords data. Stores the result data and quits UI
179 // message loop when callback is invoked. 202 // message loop when callback is invoked.
180 class KeywordsConsumer : public WebDataServiceConsumer { 203 class KeywordsConsumer : public WebDataServiceConsumer {
181 public: 204 public:
182 KeywordsConsumer() : load_succeeded(false) {} 205 KeywordsConsumer() : load_succeeded(false) {}
183 206
184 virtual void OnWebDataServiceRequestDone(WebDataService::Handle h, 207 virtual void OnWebDataServiceRequestDone(WebDataService::Handle h,
185 const WDTypedResult* result) { 208 const WDTypedResult* result) {
186 if (result) { 209 if (result) {
187 load_succeeded = true; 210 load_succeeded = true;
188 DCHECK(result->GetType() == KEYWORDS_RESULT); 211 DCHECK(result->GetType() == KEYWORDS_RESULT);
189 keywords_result = 212 keywords_result =
190 reinterpret_cast<const WDResult<WDKeywordsResult>*>( 213 reinterpret_cast<const WDResult<WDKeywordsResult>*>(
191 result)->GetValue(); 214 result)->GetValue();
192 } 215 }
193 216
194 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); 217 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
195 MessageLoop::current()->Quit(); 218 MessageLoop::current()->Quit();
196 } 219 }
197 220
198 // Run the current message loop. OnWebDataServiceRequestDone will invoke
199 // MessageLoop::Quit on completion, so this call will finish at that point.
200 static void WaitUntilCalled() {
201 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
202 MessageLoop::current()->Run();
203 }
204
205 // True if keywords data was loaded successfully. 221 // True if keywords data was loaded successfully.
206 bool load_succeeded; 222 bool load_succeeded;
207 // Result data from completion callback. 223 // Result data from completion callback.
208 WDKeywordsResult keywords_result; 224 WDKeywordsResult keywords_result;
209 }; 225 };
210 226
211 TEST_F(WebDataServiceAutofillTest, FormFillAdd) { 227 TEST_F(WebDataServiceAutofillTest, FormFillAdd) {
212 const AutofillChange expected_changes[] = { 228 const AutofillChange expected_changes[] = {
213 AutofillChange(AutofillChange::ADD, AutofillKey(name1_, value1_)), 229 AutofillChange(AutofillChange::ADD, AutofillKey(name1_, value1_)),
214 AutofillChange(AutofillChange::ADD, AutofillKey(name2_, value2_)) 230 AutofillChange(AutofillChange::ADD, AutofillKey(name2_, value2_))
(...skipping 413 matching lines...) Expand 10 before | Expand all | Expand 10 after
628 handle2 = wds_->GetCreditCards(&card_consumer2); 644 handle2 = wds_->GetCreditCards(&card_consumer2);
629 MessageLoop::current()->Run(); 645 MessageLoop::current()->Run();
630 EXPECT_EQ(handle2, card_consumer2.handle()); 646 EXPECT_EQ(handle2, card_consumer2.handle());
631 ASSERT_EQ(0U, card_consumer2.result().size()); 647 ASSERT_EQ(0U, card_consumer2.result().size());
632 } 648 }
633 649
634 TEST_F(WebDataServiceTest, WebIntents) { 650 TEST_F(WebDataServiceTest, WebIntents) {
635 WebIntentsConsumer consumer; 651 WebIntentsConsumer consumer;
636 652
637 wds_->GetWebIntentServices(ASCIIToUTF16("share"), &consumer); 653 wds_->GetWebIntentServices(ASCIIToUTF16("share"), &consumer);
638 WebIntentsConsumer::WaitUntilCalled(); 654 WaitUntilCalled();
639 EXPECT_EQ(0U, consumer.services_.size()); 655 EXPECT_EQ(0U, consumer.services_.size());
640 656
641 WebIntentServiceData service; 657 WebIntentServiceData service;
642 service.service_url = GURL("http://google.com"); 658 service.service_url = GURL("http://google.com");
643 service.action = ASCIIToUTF16("share1"); 659 service.action = ASCIIToUTF16("share1");
644 service.type = ASCIIToUTF16("image/*"); 660 service.type = ASCIIToUTF16("image/*");
645 wds_->AddWebIntentService(service); 661 wds_->AddWebIntentService(service);
646 662
647 service.action = ASCIIToUTF16("share"); 663 service.action = ASCIIToUTF16("share");
648 service.type = ASCIIToUTF16("image/*"); 664 service.type = ASCIIToUTF16("image/*");
649 wds_->AddWebIntentService(service); 665 wds_->AddWebIntentService(service);
650 666
651 service.type = ASCIIToUTF16("video/*"); 667 service.type = ASCIIToUTF16("video/*");
652 wds_->AddWebIntentService(service); 668 wds_->AddWebIntentService(service);
653 669
654 wds_->GetWebIntentServices(ASCIIToUTF16("share"), &consumer); 670 wds_->GetWebIntentServices(ASCIIToUTF16("share"), &consumer);
655 WebIntentsConsumer::WaitUntilCalled(); 671 WaitUntilCalled();
656 ASSERT_EQ(2U, consumer.services_.size()); 672 ASSERT_EQ(2U, consumer.services_.size());
657 673
658 if (consumer.services_[0].type != ASCIIToUTF16("image/*")) 674 if (consumer.services_[0].type != ASCIIToUTF16("image/*"))
659 std::swap(consumer.services_[0], consumer.services_[1]); 675 std::swap(consumer.services_[0], consumer.services_[1]);
660 676
661 EXPECT_EQ(service.service_url, consumer.services_[0].service_url); 677 EXPECT_EQ(service.service_url, consumer.services_[0].service_url);
662 EXPECT_EQ(service.action, consumer.services_[0].action); 678 EXPECT_EQ(service.action, consumer.services_[0].action);
663 EXPECT_EQ(ASCIIToUTF16("image/*"), consumer.services_[0].type); 679 EXPECT_EQ(ASCIIToUTF16("image/*"), consumer.services_[0].type);
664 EXPECT_EQ(service.service_url, consumer.services_[1].service_url); 680 EXPECT_EQ(service.service_url, consumer.services_[1].service_url);
665 EXPECT_EQ(service.action, consumer.services_[1].action); 681 EXPECT_EQ(service.action, consumer.services_[1].action);
666 EXPECT_EQ(service.type, consumer.services_[1].type); 682 EXPECT_EQ(service.type, consumer.services_[1].type);
667 683
668 service.type = ASCIIToUTF16("image/*"); 684 service.type = ASCIIToUTF16("image/*");
669 wds_->RemoveWebIntentService(service); 685 wds_->RemoveWebIntentService(service);
670 686
671 wds_->GetWebIntentServices(ASCIIToUTF16("share"), &consumer); 687 wds_->GetWebIntentServices(ASCIIToUTF16("share"), &consumer);
672 WebIntentsConsumer::WaitUntilCalled(); 688 WaitUntilCalled();
673 ASSERT_EQ(1U, consumer.services_.size()); 689 ASSERT_EQ(1U, consumer.services_.size());
674 690
675 service.type = ASCIIToUTF16("video/*"); 691 service.type = ASCIIToUTF16("video/*");
676 EXPECT_EQ(service.service_url, consumer.services_[0].service_url); 692 EXPECT_EQ(service.service_url, consumer.services_[0].service_url);
677 EXPECT_EQ(service.action, consumer.services_[0].action); 693 EXPECT_EQ(service.action, consumer.services_[0].action);
678 EXPECT_EQ(service.type, consumer.services_[0].type); 694 EXPECT_EQ(service.type, consumer.services_[0].type);
679 } 695 }
680 696
681 TEST_F(WebDataServiceTest, WebIntentsForURL) { 697 TEST_F(WebDataServiceTest, WebIntentsForURL) {
682 WebIntentsConsumer consumer; 698 WebIntentsConsumer consumer;
683 699
684 WebIntentServiceData service; 700 WebIntentServiceData service;
685 service.service_url = GURL("http://google.com"); 701 service.service_url = GURL("http://google.com");
686 service.action = ASCIIToUTF16("share1"); 702 service.action = ASCIIToUTF16("share1");
687 service.type = ASCIIToUTF16("image/*"); 703 service.type = ASCIIToUTF16("image/*");
688 wds_->AddWebIntentService(service); 704 wds_->AddWebIntentService(service);
689 705
690 service.action = ASCIIToUTF16("share"); 706 service.action = ASCIIToUTF16("share");
691 service.type = ASCIIToUTF16("image/*"); 707 service.type = ASCIIToUTF16("image/*");
692 wds_->AddWebIntentService(service); 708 wds_->AddWebIntentService(service);
693 709
694 wds_->GetWebIntentServicesForURL( 710 wds_->GetWebIntentServicesForURL(
695 UTF8ToUTF16(service.service_url.spec()), 711 UTF8ToUTF16(service.service_url.spec()),
696 &consumer); 712 &consumer);
697 WebIntentsConsumer::WaitUntilCalled(); 713 WaitUntilCalled();
698 ASSERT_EQ(2U, consumer.services_.size()); 714 ASSERT_EQ(2U, consumer.services_.size());
699 EXPECT_EQ(service, consumer.services_[0]); 715 EXPECT_EQ(service, consumer.services_[0]);
700 service.action = ASCIIToUTF16("share1"); 716 service.action = ASCIIToUTF16("share1");
701 EXPECT_EQ(service, consumer.services_[1]); 717 EXPECT_EQ(service, consumer.services_[1]);
702 } 718 }
703 719
704 TEST_F(WebDataServiceTest, WebIntentsGetAll) { 720 TEST_F(WebDataServiceTest, WebIntentsGetAll) {
705 WebIntentsConsumer consumer; 721 WebIntentsConsumer consumer;
706 722
707 WebIntentServiceData service; 723 WebIntentServiceData service;
708 service.service_url = GURL("http://google.com"); 724 service.service_url = GURL("http://google.com");
709 service.action = ASCIIToUTF16("share"); 725 service.action = ASCIIToUTF16("share");
710 service.type = ASCIIToUTF16("image/*"); 726 service.type = ASCIIToUTF16("image/*");
711 wds_->AddWebIntentService(service); 727 wds_->AddWebIntentService(service);
712 728
713 service.action = ASCIIToUTF16("edit"); 729 service.action = ASCIIToUTF16("edit");
714 wds_->AddWebIntentService(service); 730 wds_->AddWebIntentService(service);
715 731
716 wds_->GetAllWebIntentServices(&consumer); 732 wds_->GetAllWebIntentServices(&consumer);
717 WebIntentsConsumer::WaitUntilCalled(); 733 WaitUntilCalled();
718 ASSERT_EQ(2U, consumer.services_.size()); 734 ASSERT_EQ(2U, consumer.services_.size());
719 735
720 if (consumer.services_[0].action != ASCIIToUTF16("edit")) 736 if (consumer.services_[0].action != ASCIIToUTF16("edit"))
721 std::swap(consumer.services_[0],consumer.services_[1]); 737 std::swap(consumer.services_[0],consumer.services_[1]);
722 738
723 EXPECT_EQ(service, consumer.services_[0]); 739 EXPECT_EQ(service, consumer.services_[0]);
724 service.action = ASCIIToUTF16("share"); 740 service.action = ASCIIToUTF16("share");
725 EXPECT_EQ(service, consumer.services_[1]); 741 EXPECT_EQ(service, consumer.services_[1]);
726 } 742 }
727 743
744 TEST_F(WebDataServiceTest, WebIntentsDefaultsTest) {
745 WebIntentsDefaultsConsumer consumer;
746
747 wds_->GetDefaultWebIntentServicesForAction(ASCIIToUTF16("share"), &consumer);
748 WaitUntilCalled();
749 EXPECT_EQ(0U, consumer.services_.size());
750
751 DefaultWebIntentService default_service;
752 default_service.action = ASCIIToUTF16("share");
753 default_service.type = ASCIIToUTF16("type");
754 default_service.user_date = 1;
755 default_service.suppression = 4;
756 default_service.service_url = "service_url";
757 wds_->AddDefaultWebIntentService(default_service);
758
759 default_service.action = ASCIIToUTF16("share2");
760 default_service.service_url = "service_url_2";
761 wds_->AddDefaultWebIntentService(default_service);
762
763 wds_->GetDefaultWebIntentServicesForAction(ASCIIToUTF16("share"), &consumer);
764 WaitUntilCalled();
765 ASSERT_EQ(1U, consumer.services_.size());
766 EXPECT_EQ("service_url", consumer.services_[0].service_url);
767
768 wds_->GetAllDefaultWebIntentServices(&consumer);
769 WaitUntilCalled();
770 EXPECT_EQ(2U, consumer.services_.size());
771
772 default_service.action = ASCIIToUTF16("share");
773 wds_->RemoveDefaultWebIntentService(default_service);
774
775 wds_->GetDefaultWebIntentServicesForAction(ASCIIToUTF16("share"), &consumer);
776 WaitUntilCalled();
777 EXPECT_EQ(0U, consumer.services_.size());
778
779 wds_->GetDefaultWebIntentServicesForAction(ASCIIToUTF16("share2"), &consumer);
780 WaitUntilCalled();
781 ASSERT_EQ(1U, consumer.services_.size());
782 EXPECT_EQ("service_url_2", consumer.services_[0].service_url);
783
784 wds_->GetAllDefaultWebIntentServices(&consumer);
785 WaitUntilCalled();
786 ASSERT_EQ(1U, consumer.services_.size());
787 EXPECT_EQ("service_url_2", consumer.services_[0].service_url);
788 }
789
728 TEST_F(WebDataServiceTest, DidDefaultSearchProviderChangeOnNewProfile) { 790 TEST_F(WebDataServiceTest, DidDefaultSearchProviderChangeOnNewProfile) {
729 KeywordsConsumer consumer; 791 KeywordsConsumer consumer;
730 wds_->GetKeywords(&consumer); 792 wds_->GetKeywords(&consumer);
731 KeywordsConsumer::WaitUntilCalled(); 793 WaitUntilCalled();
732 ASSERT_TRUE(consumer.load_succeeded); 794 ASSERT_TRUE(consumer.load_succeeded);
733 EXPECT_FALSE(consumer.keywords_result.did_default_search_provider_change); 795 EXPECT_FALSE(consumer.keywords_result.did_default_search_provider_change);
734 EXPECT_EQ(NULL, consumer.keywords_result.default_search_provider_backup); 796 EXPECT_EQ(NULL, consumer.keywords_result.default_search_provider_backup);
735 } 797 }
OLDNEW
« no previous file with comments | « chrome/browser/webdata/web_data_service.cc ('k') | chrome/browser/webdata/web_intents_table.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698