Index: chrome/browser/ui/intents/web_intent_picker_controller_browsertest.cc |
diff --git a/chrome/browser/ui/intents/web_intent_picker_controller_browsertest.cc b/chrome/browser/ui/intents/web_intent_picker_controller_browsertest.cc |
index 3e0f178efe125c37bae49215ab68c4b4e65f4d60..491454a5acb0b9f7884f8979c606e39a870d170e 100644 |
--- a/chrome/browser/ui/intents/web_intent_picker_controller_browsertest.cc |
+++ b/chrome/browser/ui/intents/web_intent_picker_controller_browsertest.cc |
@@ -14,6 +14,7 @@ |
#include "chrome/browser/ui/intents/web_intent_picker.h" |
#include "chrome/browser/ui/intents/web_intent_picker_controller.h" |
#include "chrome/browser/ui/intents/web_intent_picker_factory.h" |
+#include "chrome/browser/ui/tab_contents/tab_contents_wrapper.h" |
#include "chrome/browser/webdata/web_data_service.h" |
#include "chrome/test/base/in_process_browser_test.h" |
#include "chrome/test/base/ui_test_utils.h" |
@@ -43,22 +44,58 @@ MATCHER_P(VectorIsOfSize, n, "") { |
class WebIntentPickerMock : public WebIntentPicker { |
public: |
- MOCK_METHOD1(SetServiceURLs, void(const std::vector<GURL>& urls)); |
- MOCK_METHOD2(SetServiceIcon, void(size_t index, const SkBitmap& icon)); |
- MOCK_METHOD1(SetDefaultServiceIcon, void(size_t index)); |
- MOCK_METHOD0(Show, void(void)); |
- MOCK_METHOD0(Close, void(void)); |
+ WebIntentPickerMock() : num_urls_(0), num_default_icons_(0) {} |
+ |
+ virtual void SetServiceURLs(const std::vector<GURL>& urls) { |
+ num_urls_ = urls.size(); |
+ } |
+ |
+ virtual void SetServiceIcon(size_t index, const SkBitmap& icon) {} |
+ |
+ virtual void SetDefaultServiceIcon(size_t index) { |
+ num_default_icons_++; |
+ } |
+ |
+ virtual void WaitFor(int target_num_urls, int target_num_default_icons) { |
+ while (num_urls_ != target_num_urls || |
+ num_default_icons_ != target_num_default_icons) { |
+ MessageLoop::current()->PostTask(FROM_HERE, new MessageLoop::QuitTask()); |
+ ui_test_utils::RunAllPendingInMessageLoop(); |
+ } |
+ } |
+ |
+ virtual void Close() {} |
TabContents* SetInlineDisposition(const GURL& url) { return NULL; } |
+ |
+ int num_urls_; |
+ int num_default_icons_; |
}; |
+ |
class WebIntentPickerFactoryMock : public WebIntentPickerFactory { |
public: |
- MOCK_METHOD3(Create, |
- WebIntentPicker*(Browser* browser, |
- TabContentsWrapper* wrapper, |
- WebIntentPickerDelegate* delegate)); |
- MOCK_METHOD1(ClosePicker, void(WebIntentPicker* picker)); |
+ explicit WebIntentPickerFactoryMock(WebIntentPickerMock* mock) |
+ : picker_(mock) {} |
+ |
+ virtual WebIntentPicker* Create(Browser* browser, |
+ TabContentsWrapper* wrapper, |
+ WebIntentPickerDelegate* delegate) { |
+ return picker_; |
+ } |
+ |
+ virtual void ClosePicker(WebIntentPicker* picker) { |
+ if (picker_) { |
+ picker_->Close(); |
+ picker_ = NULL; |
+ } |
+ } |
+ |
+ void Close() { |
+ picker_ = NULL; |
+ } |
+ |
+ WebIntentPicker* picker_; |
}; |
class WebIntentPickerControllerBrowserTest : public InProcessBrowserTest { |
@@ -72,49 +109,29 @@ class WebIntentPickerControllerBrowserTest : public InProcessBrowserTest { |
web_data_service_->AddWebIntentService(service); |
} |
- void SetPickerExpectations(int expected_service_count, |
- int expected_default_favicons) { |
- EXPECT_CALL(*picker_factory_, Create(_, _, _)). |
- WillOnce(DoAll(SaveArg<2>(&delegate_), Return(&picker_))); |
- EXPECT_CALL(picker_, |
- SetServiceURLs(VectorIsOfSize(expected_service_count))). |
- Times(1); |
- EXPECT_CALL(picker_, SetDefaultServiceIcon(_)). |
- Times(expected_default_favicons); |
- EXPECT_CALL(*picker_factory_, ClosePicker(_)); |
+ void OnSendReturnMessage(WebIntentPickerController* controller) { |
+ controller->OnSendReturnMessage(); |
} |
- void CheckPendingAsync() { |
- if (controller_->pending_async_count() > 0) { |
- MessageLoop::current()->PostTask( |
- FROM_HERE, |
- base::Bind(&WebIntentPickerControllerBrowserTest::CheckPendingAsync, |
- base::Unretained(this))); |
- return; |
- } |
- |
- MessageLoop::current()->Quit(); |
+ void OnServiceChosen(WebIntentPickerController* controller, size_t index) { |
+ controller->OnServiceChosen(index); |
} |
- void WaitForDialogToShow() { |
- CheckPendingAsync(); |
- MessageLoop::current()->Run(); |
+ void SetPickerFactory(WebIntentPickerController* controller, |
+ WebIntentPickerFactory* factory) { |
+ controller->picker_factory_.reset(factory); |
} |
WebIntentPickerMock picker_; |
- // |controller_| takes ownership. |
+ // The picker controller takes ownership. |
WebIntentPickerFactoryMock* picker_factory_; |
- scoped_ptr<WebIntentPickerController> controller_; |
- WebIntentPickerDelegate* delegate_; |
WebDataService* web_data_service_; |
FaviconService* favicon_service_; |
}; |
-// http://crbug.com/104140 |
-IN_PROC_BROWSER_TEST_F(WebIntentPickerControllerBrowserTest, |
- FLAKY_ChooseService) { |
+IN_PROC_BROWSER_TEST_F(WebIntentPickerControllerBrowserTest, ChooseService) { |
web_data_service_ = |
browser()->profile()->GetWebDataService(Profile::EXPLICIT_ACCESS); |
AddWebIntentService(kAction1, kServiceURL1); |
@@ -123,17 +140,26 @@ IN_PROC_BROWSER_TEST_F(WebIntentPickerControllerBrowserTest, |
favicon_service_ = |
browser()->profile()->GetFaviconService(Profile::EXPLICIT_ACCESS); |
- picker_factory_ = new WebIntentPickerFactoryMock(); |
- controller_.reset(new WebIntentPickerController( |
- browser()->GetSelectedTabContentsWrapper(), picker_factory_)); |
+ picker_factory_ = new WebIntentPickerFactoryMock(&picker_); |
+ WebIntentPickerController* controller = browser()-> |
+ GetSelectedTabContentsWrapper()->web_intent_picker_controller(); |
+ SetPickerFactory(controller, picker_factory_); |
- SetPickerExpectations(2, 2); |
+ controller->ShowDialog(browser(), kAction1, kType); |
+ picker_.WaitFor(2, 2); |
+ EXPECT_EQ(2, picker_.num_urls_); |
+ EXPECT_EQ(2, picker_.num_default_icons_); |
- controller_->ShowDialog(NULL, kAction1, kType); |
- WaitForDialogToShow(); |
+ webkit_glue::WebIntentData intent; |
+ intent.action = ASCIIToUTF16("a"); |
+ intent.type = ASCIIToUTF16("b"); |
+ controller->SetIntent(1, intent, 1); |
- delegate_->OnServiceChosen(1); |
+ OnServiceChosen(controller, 1); |
ASSERT_EQ(2, browser()->tab_count()); |
EXPECT_EQ(GURL(kServiceURL2), |
browser()->GetSelectedTabContents()->GetURL()); |
+ |
+ OnSendReturnMessage(controller); |
+ ASSERT_EQ(1, browser()->tab_count()); |
} |