| 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 <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 Loading... |
| 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 Loading... |
| 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 } |
| OLD | NEW |