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

Side by Side Diff: chrome/browser/ui/webui/sync_internals_ui_unittest.cc

Issue 9224002: Make WebUI objects not derive from WebUI. WebUI objects own the controller. This is the ownership... (Closed) Base URL: svn://chrome-svn/chrome/trunk/src/
Patch Set: sync to head to clear linux_chromeos browsertest failures Created 8 years, 11 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
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 "chrome/browser/ui/webui/sync_internals_ui.h" 5 #include "chrome/browser/ui/webui/sync_internals_ui.h"
6 6
7 #include <cstddef> 7 #include <cstddef>
8 #include <string> 8 #include <string>
9 9
10 #include "base/message_loop.h" 10 #include "base/message_loop.h"
(...skipping 10 matching lines...) Expand all
21 #include "content/test/test_browser_thread.h" 21 #include "content/test/test_browser_thread.h"
22 #include "testing/gmock/include/gmock/gmock.h" 22 #include "testing/gmock/include/gmock/gmock.h"
23 #include "testing/gtest/include/gtest/gtest.h" 23 #include "testing/gtest/include/gtest/gtest.h"
24 24
25 namespace { 25 namespace {
26 26
27 using browser_sync::HasArgsAsList; 27 using browser_sync::HasArgsAsList;
28 using browser_sync::JsArgList; 28 using browser_sync::JsArgList;
29 using browser_sync::JsEventDetails; 29 using browser_sync::JsEventDetails;
30 using content::BrowserThread; 30 using content::BrowserThread;
31 using content::WebContents;
31 using testing::_; 32 using testing::_;
32 using testing::Mock; 33 using testing::Mock;
33 using testing::NiceMock; 34 using testing::NiceMock;
34 using testing::Return; 35 using testing::Return;
35 using testing::StrictMock; 36 using testing::StrictMock;
36 37
37 // Subclass of SyncInternalsUI to mock out ExecuteJavascript. 38 // Subclass of WebUI to mock out ExecuteJavascript.
38 class TestSyncInternalsUI : public SyncInternalsUI { 39 class TestSyncWebUI: public WebUI {
39 public: 40 public:
40 explicit TestSyncInternalsUI(TabContents* contents) 41 explicit TestSyncWebUI(WebContents* web_contents)
41 : SyncInternalsUI(contents) {} 42 : WebUI(web_contents) {}
42 virtual ~TestSyncInternalsUI() {} 43 virtual ~TestSyncWebUI() {}
43 44
44 MOCK_METHOD1(ExecuteJavascript, void(const string16&)); 45 MOCK_METHOD1(ExecuteJavascript, void(const string16&));
45 }; 46 };
46 47
47 // Tests with non-NULL ProfileSyncService. 48 // Tests with non-NULL ProfileSyncService.
48 class SyncInternalsUITestWithService : public ChromeRenderViewHostTestHarness { 49 class SyncInternalsUITestWithService : public ChromeRenderViewHostTestHarness {
49 protected: 50 protected:
50 SyncInternalsUITestWithService() {} 51 SyncInternalsUITestWithService() : sync_internals_ui_(NULL) {}
51 52
52 virtual ~SyncInternalsUITestWithService() {} 53 virtual ~SyncInternalsUITestWithService() {}
53 54
54 virtual void SetUp() { 55 virtual void SetUp() {
55 NiceMock<ProfileMock>* profile_mock = new NiceMock<ProfileMock>(); 56 NiceMock<ProfileMock>* profile_mock = new NiceMock<ProfileMock>();
56 StrictMock<ProfileSyncServiceMock> profile_sync_service_mock; 57 StrictMock<ProfileSyncServiceMock> profile_sync_service_mock;
57 EXPECT_CALL(*profile_mock, GetProfileSyncService()) 58 EXPECT_CALL(*profile_mock, GetProfileSyncService())
58 .WillOnce(Return(&profile_sync_service_mock)); 59 .WillOnce(Return(&profile_sync_service_mock));
59 browser_context_.reset(profile_mock); 60 browser_context_.reset(profile_mock);
60 61
61 ChromeRenderViewHostTestHarness::SetUp(); 62 ChromeRenderViewHostTestHarness::SetUp();
62 63
63 EXPECT_CALL(profile_sync_service_mock, GetJsController()) 64 EXPECT_CALL(profile_sync_service_mock, GetJsController())
64 .WillOnce(Return(mock_js_controller_.AsWeakPtr())); 65 .WillOnce(Return(mock_js_controller_.AsWeakPtr()));
65 66
66 EXPECT_CALL(mock_js_controller_, AddJsEventHandler(_)); 67 EXPECT_CALL(mock_js_controller_, AddJsEventHandler(_));
67 68
68 { 69 {
69 // Needed by |test_sync_internals_ui_|'s constructor. The 70 // Needed by |sync_internals_ui_|'s constructor. The
70 // message loop is provided by ChromeRenderViewHostTestHarness. 71 // message loop is provided by ChromeRenderViewHostTestHarness.
71 content::TestBrowserThread ui_thread_(BrowserThread::UI, 72 content::TestBrowserThread ui_thread_(BrowserThread::UI,
72 MessageLoopForUI::current()); 73 MessageLoopForUI::current());
73 // |test_sync_internals_ui_|'s constructor triggers all the 74 // |sync_internals_ui_|'s constructor triggers all the
74 // expectations above. 75 // expectations above.
75 test_sync_internals_ui_.reset(new TestSyncInternalsUI(contents())); 76 web_ui_.reset(new TestSyncWebUI(contents()));
77 sync_internals_ui_ = new SyncInternalsUI(web_ui_.get());
78 web_ui_->SetController(sync_internals_ui_);
76 } 79 }
77 80
78 Mock::VerifyAndClearExpectations(profile_mock); 81 Mock::VerifyAndClearExpectations(profile_mock);
79 Mock::VerifyAndClearExpectations(&mock_js_controller_); 82 Mock::VerifyAndClearExpectations(&mock_js_controller_);
80 } 83 }
81 84
82 virtual void TearDown() { 85 virtual void TearDown() {
83 Mock::VerifyAndClearExpectations(&mock_js_controller_); 86 Mock::VerifyAndClearExpectations(&mock_js_controller_);
84 87
85 // Called by |test_sync_internals_ui_|'s destructor. 88 // Called by |sync_internals_ui_|'s destructor.
86 EXPECT_CALL(mock_js_controller_, 89 EXPECT_CALL(mock_js_controller_,
87 RemoveJsEventHandler(test_sync_internals_ui_.get())); 90 RemoveJsEventHandler(sync_internals_ui_));
88 test_sync_internals_ui_.reset(); 91 sync_internals_ui_ = NULL;
92 web_ui_.reset();
89 93
90 ChromeRenderViewHostTestHarness::TearDown(); 94 ChromeRenderViewHostTestHarness::TearDown();
91 } 95 }
92 96
93 StrictMock<browser_sync::MockJsController> mock_js_controller_; 97 StrictMock<browser_sync::MockJsController> mock_js_controller_;
94 scoped_ptr<TestSyncInternalsUI> test_sync_internals_ui_; 98 scoped_ptr<TestSyncWebUI> web_ui_;
99 SyncInternalsUI* sync_internals_ui_;
95 }; 100 };
96 101
97 TEST_F(SyncInternalsUITestWithService, HandleJsEvent) { 102 TEST_F(SyncInternalsUITestWithService, HandleJsEvent) {
98 EXPECT_CALL(*test_sync_internals_ui_, 103 EXPECT_CALL(*web_ui_,
99 ExecuteJavascript( 104 ExecuteJavascript(
100 ASCIIToUTF16("chrome.sync.testMessage.fire({});"))); 105 ASCIIToUTF16("chrome.sync.testMessage.fire({});")));
101 106
102 test_sync_internals_ui_->HandleJsEvent("testMessage", JsEventDetails()); 107 sync_internals_ui_->HandleJsEvent("testMessage", JsEventDetails());
103 } 108 }
104 109
105 TEST_F(SyncInternalsUITestWithService, HandleJsReply) { 110 TEST_F(SyncInternalsUITestWithService, HandleJsReply) {
106 EXPECT_CALL( 111 EXPECT_CALL(
107 *test_sync_internals_ui_, 112 *web_ui_,
108 ExecuteJavascript( 113 ExecuteJavascript(
109 ASCIIToUTF16("chrome.sync.testMessage.handleReply(5,true);"))); 114 ASCIIToUTF16("chrome.sync.testMessage.handleReply(5,true);")));
110 115
111 ListValue args; 116 ListValue args;
112 args.Append(Value::CreateIntegerValue(5)); 117 args.Append(Value::CreateIntegerValue(5));
113 args.Append(Value::CreateBooleanValue(true)); 118 args.Append(Value::CreateBooleanValue(true));
114 test_sync_internals_ui_->HandleJsReply("testMessage", JsArgList(&args)); 119 sync_internals_ui_->HandleJsReply("testMessage", JsArgList(&args));
115 } 120 }
116 121
117 TEST_F(SyncInternalsUITestWithService, OnWebUISendBasic) { 122 TEST_F(SyncInternalsUITestWithService, OnWebUISendBasic) {
118 const std::string& name = "testName"; 123 const std::string& name = "testName";
119 ListValue args; 124 ListValue args;
120 args.Append(Value::CreateIntegerValue(10)); 125 args.Append(Value::CreateIntegerValue(10));
121 126
122 EXPECT_CALL(mock_js_controller_, 127 EXPECT_CALL(mock_js_controller_,
123 ProcessJsMessage(name, HasArgsAsList(args), _)); 128 ProcessJsMessage(name, HasArgsAsList(args), _));
124 129
125 test_sync_internals_ui_->controller()->OverrideHandleWebUIMessage( 130 sync_internals_ui_->OverrideHandleWebUIMessage(GURL(), name, args);
126 GURL(), name, args);
127 } 131 }
128 132
129 // Tests with NULL ProfileSyncService. 133 // Tests with NULL ProfileSyncService.
130 class SyncInternalsUITestWithoutService 134 class SyncInternalsUITestWithoutService
131 : public ChromeRenderViewHostTestHarness { 135 : public ChromeRenderViewHostTestHarness {
132 protected: 136 protected:
133 SyncInternalsUITestWithoutService() {} 137 SyncInternalsUITestWithoutService() : sync_internals_ui_(NULL) {}
134 138
135 virtual ~SyncInternalsUITestWithoutService() {} 139 virtual ~SyncInternalsUITestWithoutService() {}
136 140
137 virtual void SetUp() { 141 virtual void SetUp() {
138 NiceMock<ProfileMock>* profile_mock = new NiceMock<ProfileMock>(); 142 NiceMock<ProfileMock>* profile_mock = new NiceMock<ProfileMock>();
139 EXPECT_CALL(*profile_mock, GetProfileSyncService()) 143 EXPECT_CALL(*profile_mock, GetProfileSyncService())
140 .WillOnce(Return(static_cast<ProfileSyncService*>(NULL))); 144 .WillOnce(Return(static_cast<ProfileSyncService*>(NULL)));
141 browser_context_.reset(profile_mock); 145 browser_context_.reset(profile_mock);
142 146
143 ChromeRenderViewHostTestHarness::SetUp(); 147 ChromeRenderViewHostTestHarness::SetUp();
144 148
145 { 149 {
146 // Needed by |test_sync_internals_ui_|'s constructor. The 150 // Needed by |sync_internals_ui_|'s constructor. The
147 // message loop is provided by ChromeRenderViewHostTestHarness. 151 // message loop is provided by ChromeRenderViewHostTestHarness.
148 content::TestBrowserThread ui_thread_(BrowserThread::UI, 152 content::TestBrowserThread ui_thread_(BrowserThread::UI,
149 MessageLoopForUI::current()); 153 MessageLoopForUI::current());
150 // |test_sync_internals_ui_|'s constructor triggers all the 154 // |sync_internals_ui_|'s constructor triggers all the
151 // expectations above. 155 // expectations above.
152 test_sync_internals_ui_.reset(new TestSyncInternalsUI(contents())); 156 web_ui_.reset(new TestSyncWebUI(contents()));
157 sync_internals_ui_ = new SyncInternalsUI(web_ui_.get());
158 web_ui_->SetController(sync_internals_ui_);
153 } 159 }
154 160
155 Mock::VerifyAndClearExpectations(profile_mock); 161 Mock::VerifyAndClearExpectations(profile_mock);
156 } 162 }
157 163
158 scoped_ptr<TestSyncInternalsUI> test_sync_internals_ui_; 164 scoped_ptr<TestSyncWebUI> web_ui_;
165 SyncInternalsUI* sync_internals_ui_;
159 }; 166 };
160 167
161 TEST_F(SyncInternalsUITestWithoutService, HandleJsEvent) { 168 TEST_F(SyncInternalsUITestWithoutService, HandleJsEvent) {
162 EXPECT_CALL(*test_sync_internals_ui_, 169 EXPECT_CALL(*web_ui_,
163 ExecuteJavascript( 170 ExecuteJavascript(
164 ASCIIToUTF16("chrome.sync.testMessage.fire({});"))); 171 ASCIIToUTF16("chrome.sync.testMessage.fire({});")));
165 172
166 test_sync_internals_ui_->HandleJsEvent("testMessage", JsEventDetails()); 173 sync_internals_ui_->HandleJsEvent("testMessage", JsEventDetails());
167 } 174 }
168 175
169 TEST_F(SyncInternalsUITestWithoutService, HandleJsReply) { 176 TEST_F(SyncInternalsUITestWithoutService, HandleJsReply) {
170 EXPECT_CALL( 177 EXPECT_CALL(
171 *test_sync_internals_ui_, 178 *web_ui_,
172 ExecuteJavascript( 179 ExecuteJavascript(
173 ASCIIToUTF16("chrome.sync.testMessage.handleReply(5,true);"))); 180 ASCIIToUTF16("chrome.sync.testMessage.handleReply(5,true);")));
174 181
175 ListValue args; 182 ListValue args;
176 args.Append(Value::CreateIntegerValue(5)); 183 args.Append(Value::CreateIntegerValue(5));
177 args.Append(Value::CreateBooleanValue(true)); 184 args.Append(Value::CreateBooleanValue(true));
178 test_sync_internals_ui_->HandleJsReply( 185 sync_internals_ui_->HandleJsReply(
179 "testMessage", JsArgList(&args)); 186 "testMessage", JsArgList(&args));
180 } 187 }
181 188
182 TEST_F(SyncInternalsUITestWithoutService, OnWebUISendBasic) { 189 TEST_F(SyncInternalsUITestWithoutService, OnWebUISendBasic) {
183 const std::string& name = "testName"; 190 const std::string& name = "testName";
184 ListValue args; 191 ListValue args;
185 args.Append(Value::CreateIntegerValue(5)); 192 args.Append(Value::CreateIntegerValue(5));
186 193
187 // Should drop the message. 194 // Should drop the message.
188 test_sync_internals_ui_->controller()->OverrideHandleWebUIMessage( 195 sync_internals_ui_->OverrideHandleWebUIMessage(GURL(), name, args);
189 GURL(), name, args);
190 } 196 }
191 197
192 // TODO(lipalani) - add a test case to test about:sync with a non null 198 // TODO(lipalani) - add a test case to test about:sync with a non null
193 // service. 199 // service.
194 TEST_F(SyncInternalsUITestWithoutService, OnWebUISendGetAboutInfo) { 200 TEST_F(SyncInternalsUITestWithoutService, OnWebUISendGetAboutInfo) {
195 const char kAboutInfoCall[] = 201 const char kAboutInfoCall[] =
196 "chrome.sync.getAboutInfo.handleReply({\"summary\":\"SYNC DISABLED\"});"; 202 "chrome.sync.getAboutInfo.handleReply({\"summary\":\"SYNC DISABLED\"});";
197 EXPECT_CALL(*test_sync_internals_ui_, 203 EXPECT_CALL(*web_ui_,
198 ExecuteJavascript(ASCIIToUTF16(kAboutInfoCall))); 204 ExecuteJavascript(ASCIIToUTF16(kAboutInfoCall)));
199 205
200 ListValue args; 206 ListValue args;
201 test_sync_internals_ui_->controller()->OverrideHandleWebUIMessage( 207 sync_internals_ui_->OverrideHandleWebUIMessage(
202 GURL(), "getAboutInfo", args); 208 GURL(), "getAboutInfo", args);
203 } 209 }
204 210
205 } // namespace 211 } // namespace
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698