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

Side by Side Diff: chrome/browser/chromeos/login/login_utils_browsertest.cc

Issue 14113053: chrome: Use base::MessageLoop. (Part 3) (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 7 years, 8 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) 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 "chrome/browser/chromeos/login/login_utils.h" 5 #include "chrome/browser/chromeos/login/login_utils.h"
6 6
7 #include "base/basictypes.h" 7 #include "base/basictypes.h"
8 #include "base/bind.h" 8 #include "base/bind.h"
9 #include "base/command_line.h" 9 #include "base/command_line.h"
10 #include "base/files/scoped_temp_dir.h" 10 #include "base/files/scoped_temp_dir.h"
(...skipping 117 matching lines...) Expand 10 before | Expand all | Expand 10 after
128 } 128 }
129 129
130 // Single task of the fake IO loop used in the test, that just waits until 130 // Single task of the fake IO loop used in the test, that just waits until
131 // it is signaled to quit or perform some work. 131 // it is signaled to quit or perform some work.
132 // |completion| is the event to wait for, and |work| is the task to invoke 132 // |completion| is the event to wait for, and |work| is the task to invoke
133 // when signaled. If the task returns false then this quits the IO loop. 133 // when signaled. If the task returns false then this quits the IO loop.
134 void BlockLoop(base::WaitableEvent* completion, base::Callback<bool()> work) { 134 void BlockLoop(base::WaitableEvent* completion, base::Callback<bool()> work) {
135 do { 135 do {
136 completion->Wait(); 136 completion->Wait();
137 } while (work.Run()); 137 } while (work.Run());
138 MessageLoop::current()->QuitNow(); 138 base::MessageLoop::current()->QuitNow();
139 } 139 }
140 140
141 ACTION_P(MockSessionManagerClientRetrievePolicyCallback, policy) { 141 ACTION_P(MockSessionManagerClientRetrievePolicyCallback, policy) {
142 arg0.Run(*policy); 142 arg0.Run(*policy);
143 } 143 }
144 144
145 ACTION_P(MockSessionManagerClientStorePolicyCallback, success) { 145 ACTION_P(MockSessionManagerClientStorePolicyCallback, success) {
146 arg1.Run(success); 146 arg1.Run(success);
147 } 147 }
148 148
(...skipping 12 matching lines...) Expand all
161 // message loop, as does the file thread (which never actually gets 161 // message loop, as does the file thread (which never actually gets
162 // started - so this is a way to fake multiple threads on a single 162 // started - so this is a way to fake multiple threads on a single
163 // test thread). The IO thread does not get the message loop set, 163 // test thread). The IO thread does not get the message loop set,
164 // and is never started. This is necessary so that we skip various 164 // and is never started. This is necessary so that we skip various
165 // bits of initialization that get posted to the IO thread. We do 165 // bits of initialization that get posted to the IO thread. We do
166 // however, at one point in the test, temporarily set the message 166 // however, at one point in the test, temporarily set the message
167 // loop for the IO thread. 167 // loop for the IO thread.
168 LoginUtilsTest() 168 LoginUtilsTest()
169 : fake_io_thread_completion_(false, false), 169 : fake_io_thread_completion_(false, false),
170 fake_io_thread_("fake_io_thread"), 170 fake_io_thread_("fake_io_thread"),
171 loop_(MessageLoop::TYPE_IO), 171 loop_(base::MessageLoop::TYPE_IO),
172 browser_process_(TestingBrowserProcess::GetGlobal()), 172 browser_process_(TestingBrowserProcess::GetGlobal()),
173 local_state_(browser_process_), 173 local_state_(browser_process_),
174 ui_thread_(BrowserThread::UI, &loop_), 174 ui_thread_(BrowserThread::UI, &loop_),
175 db_thread_(BrowserThread::DB, &loop_), 175 db_thread_(BrowserThread::DB, &loop_),
176 file_thread_(BrowserThread::FILE, &loop_), 176 file_thread_(BrowserThread::FILE, &loop_),
177 mock_input_method_manager_(NULL), 177 mock_input_method_manager_(NULL),
178 mock_async_method_caller_(NULL), 178 mock_async_method_caller_(NULL),
179 connector_(NULL), 179 connector_(NULL),
180 cryptohome_(NULL), 180 cryptohome_(NULL),
181 cryptohome_client_(NULL), 181 cryptohome_client_(NULL),
182 prepared_profile_(NULL) {} 182 prepared_profile_(NULL) {}
183 183
184 virtual void SetUp() OVERRIDE { 184 virtual void SetUp() OVERRIDE {
185 // This test is not a full blown InProcessBrowserTest, and doesn't have 185 // This test is not a full blown InProcessBrowserTest, and doesn't have
186 // all the usual threads running. However a lot of subsystems pulled from 186 // all the usual threads running. However a lot of subsystems pulled from
187 // ProfileImpl post to IO (usually from ProfileIOData), and DCHECK that 187 // ProfileImpl post to IO (usually from ProfileIOData), and DCHECK that
188 // those tasks were posted. Those tasks in turn depend on a lot of other 188 // those tasks were posted. Those tasks in turn depend on a lot of other
189 // components that aren't there during this test, so this kludge is used to 189 // components that aren't there during this test, so this kludge is used to
190 // have a running IO loop that doesn't really execute any tasks. 190 // have a running IO loop that doesn't really execute any tasks.
191 // 191 //
192 // See InvokeOnIO() below for a way to perform specific tasks on IO, when 192 // See InvokeOnIO() below for a way to perform specific tasks on IO, when
193 // that's necessary. 193 // that's necessary.
194 194
195 // A thread is needed to create a new MessageLoop, since there can be only 195 // A thread is needed to create a new MessageLoop, since there can be only
196 // one loop per thread. 196 // one loop per thread.
197 fake_io_thread_.StartWithOptions( 197 fake_io_thread_.StartWithOptions(
198 base::Thread::Options(MessageLoop::TYPE_IO, 0)); 198 base::Thread::Options(base::MessageLoop::TYPE_IO, 0));
199 MessageLoop* fake_io_loop = fake_io_thread_.message_loop(); 199 base::MessageLoop* fake_io_loop = fake_io_thread_.message_loop();
200 // Make this loop enter the single task, BlockLoop(). Pass in the completion 200 // Make this loop enter the single task, BlockLoop(). Pass in the completion
201 // event and the work callback. 201 // event and the work callback.
202 fake_io_thread_.StopSoon(); 202 fake_io_thread_.StopSoon();
203 fake_io_loop->PostTask( 203 fake_io_loop->PostTask(
204 FROM_HERE, 204 FROM_HERE,
205 base::Bind( 205 base::Bind(
206 BlockLoop, 206 BlockLoop,
207 &fake_io_thread_completion_, 207 &fake_io_thread_completion_,
208 base::Bind(&LoginUtilsTest::DoIOWork, base::Unretained(this)))); 208 base::Bind(&LoginUtilsTest::DoIOWork, base::Unretained(this))));
209 // Map BrowserThread::IO to this loop. This allows posting to IO but nothing 209 // Map BrowserThread::IO to this loop. This allows posting to IO but nothing
(...skipping 173 matching lines...) Expand 10 before | Expand all | Expand 10 after
383 content::RunMessageLoop(); 383 content::RunMessageLoop();
384 } 384 }
385 385
386 // Helper for BlockLoop, InvokeOnIO and QuitIOLoop. 386 // Helper for BlockLoop, InvokeOnIO and QuitIOLoop.
387 bool DoIOWork() { 387 bool DoIOWork() {
388 bool has_work = !fake_io_thread_work_.is_null(); 388 bool has_work = !fake_io_thread_work_.is_null();
389 if (has_work) 389 if (has_work)
390 fake_io_thread_work_.Run(); 390 fake_io_thread_work_.Run();
391 fake_io_thread_work_.Reset(); 391 fake_io_thread_work_.Reset();
392 BrowserThread::PostTask( 392 BrowserThread::PostTask(
393 BrowserThread::UI, FROM_HERE, 393 BrowserThread::UI, FROM_HERE, base::MessageLoop::QuitWhenIdleClosure());
394 MessageLoop::QuitWhenIdleClosure());
395 // If there was work then keep waiting for more work. 394 // If there was work then keep waiting for more work.
396 // If there was no work then quit the fake IO loop. 395 // If there was no work then quit the fake IO loop.
397 return has_work; 396 return has_work;
398 } 397 }
399 398
400 virtual void OnProfilePrepared(Profile* profile) OVERRIDE { 399 virtual void OnProfilePrepared(Profile* profile) OVERRIDE {
401 EXPECT_FALSE(prepared_profile_); 400 EXPECT_FALSE(prepared_profile_);
402 prepared_profile_ = profile; 401 prepared_profile_ = profile;
403 } 402 }
404 403
(...skipping 116 matching lines...) Expand 10 before | Expand all | Expand 10 after
521 return PrepareDMServiceFetcher(kDMPolicyRequest, response); 520 return PrepareDMServiceFetcher(kDMPolicyRequest, response);
522 } 521 }
523 522
524 protected: 523 protected:
525 ScopedStubCrosEnabler stub_cros_enabler_; 524 ScopedStubCrosEnabler stub_cros_enabler_;
526 525
527 base::Closure fake_io_thread_work_; 526 base::Closure fake_io_thread_work_;
528 base::WaitableEvent fake_io_thread_completion_; 527 base::WaitableEvent fake_io_thread_completion_;
529 base::Thread fake_io_thread_; 528 base::Thread fake_io_thread_;
530 529
531 MessageLoop loop_; 530 base::MessageLoop loop_;
532 TestingBrowserProcess* browser_process_; 531 TestingBrowserProcess* browser_process_;
533 ScopedTestingLocalState local_state_; 532 ScopedTestingLocalState local_state_;
534 533
535 content::TestBrowserThread ui_thread_; 534 content::TestBrowserThread ui_thread_;
536 content::TestBrowserThread db_thread_; 535 content::TestBrowserThread db_thread_;
537 content::TestBrowserThread file_thread_; 536 content::TestBrowserThread file_thread_;
538 scoped_ptr<content::TestBrowserThread> io_thread_; 537 scoped_ptr<content::TestBrowserThread> io_thread_;
539 scoped_ptr<IOThread> io_thread_state_; 538 scoped_ptr<IOThread> io_thread_state_;
540 539
541 MockDBusThreadManager mock_dbus_thread_manager_; 540 MockDBusThreadManager mock_dbus_thread_manager_;
(...skipping 205 matching lines...) Expand 10 before | Expand all | Expand 10 after
747 } 746 }
748 747
749 INSTANTIATE_TEST_CASE_P( 748 INSTANTIATE_TEST_CASE_P(
750 LoginUtilsBlockingLoginTestInstance, 749 LoginUtilsBlockingLoginTestInstance,
751 LoginUtilsBlockingLoginTest, 750 LoginUtilsBlockingLoginTest,
752 testing::Values(0, 1, 2, 3, 4, 5)); 751 testing::Values(0, 1, 2, 3, 4, 5));
753 752
754 } // namespace 753 } // namespace
755 754
756 } 755 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698