OLD | NEW |
1 // Copyright 2013 The Chromium Authors. All rights reserved. | 1 // Copyright 2013 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 "base/message_loop/message_loop.h" | 5 #include "base/message_loop/message_loop.h" |
6 | 6 |
7 #include <algorithm> | 7 #include <algorithm> |
8 #include <utility> | 8 #include <utility> |
9 | 9 |
10 #include "base/bind.h" | 10 #include "base/bind.h" |
(...skipping 198 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
209 } | 209 } |
210 | 210 |
211 void MessageLoop::RemoveDestructionObserver( | 211 void MessageLoop::RemoveDestructionObserver( |
212 DestructionObserver* destruction_observer) { | 212 DestructionObserver* destruction_observer) { |
213 DCHECK_EQ(this, current()); | 213 DCHECK_EQ(this, current()); |
214 destruction_observers_.RemoveObserver(destruction_observer); | 214 destruction_observers_.RemoveObserver(destruction_observer); |
215 } | 215 } |
216 | 216 |
217 void MessageLoop::AddNestingObserver(NestingObserver* observer) { | 217 void MessageLoop::AddNestingObserver(NestingObserver* observer) { |
218 DCHECK_EQ(this, current()); | 218 DCHECK_EQ(this, current()); |
| 219 CHECK(allow_nesting_); |
219 nesting_observers_.AddObserver(observer); | 220 nesting_observers_.AddObserver(observer); |
220 } | 221 } |
221 | 222 |
222 void MessageLoop::RemoveNestingObserver(NestingObserver* observer) { | 223 void MessageLoop::RemoveNestingObserver(NestingObserver* observer) { |
223 DCHECK_EQ(this, current()); | 224 DCHECK_EQ(this, current()); |
| 225 CHECK(allow_nesting_); |
224 nesting_observers_.RemoveObserver(observer); | 226 nesting_observers_.RemoveObserver(observer); |
225 } | 227 } |
226 | 228 |
227 void MessageLoop::QuitWhenIdle() { | 229 void MessageLoop::QuitWhenIdle() { |
228 DCHECK_EQ(this, current()); | 230 DCHECK_EQ(this, current()); |
229 if (run_loop_) { | 231 if (run_loop_) { |
230 run_loop_->QuitWhenIdle(); | 232 run_loop_->QuitWhenIdle(); |
231 } else { | 233 } else { |
232 NOTREACHED() << "Must be inside Run to call QuitWhenIdle"; | 234 NOTREACHED() << "Must be inside Run to call QuitWhenIdle"; |
233 } | 235 } |
(...skipping 16 matching lines...) Expand all Loading... |
250 MessageLoop::current()->QuitWhenIdle(); | 252 MessageLoop::current()->QuitWhenIdle(); |
251 } | 253 } |
252 | 254 |
253 // static | 255 // static |
254 Closure MessageLoop::QuitWhenIdleClosure() { | 256 Closure MessageLoop::QuitWhenIdleClosure() { |
255 return Bind(&QuitCurrentWhenIdle); | 257 return Bind(&QuitCurrentWhenIdle); |
256 } | 258 } |
257 | 259 |
258 void MessageLoop::SetNestableTasksAllowed(bool allowed) { | 260 void MessageLoop::SetNestableTasksAllowed(bool allowed) { |
259 if (allowed) { | 261 if (allowed) { |
| 262 CHECK(allow_nesting_); |
| 263 |
260 // Kick the native pump just in case we enter a OS-driven nested message | 264 // Kick the native pump just in case we enter a OS-driven nested message |
261 // loop. | 265 // loop. |
262 pump_->ScheduleWork(); | 266 pump_->ScheduleWork(); |
263 } | 267 } |
264 nestable_tasks_allowed_ = allowed; | 268 nestable_tasks_allowed_ = allowed; |
265 } | 269 } |
266 | 270 |
267 bool MessageLoop::NestableTasksAllowed() const { | 271 bool MessageLoop::NestableTasksAllowed() const { |
268 return nestable_tasks_allowed_; | 272 return nestable_tasks_allowed_; |
269 } | 273 } |
(...skipping 90 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
360 void MessageLoop::SetThreadTaskRunnerHandle() { | 364 void MessageLoop::SetThreadTaskRunnerHandle() { |
361 DCHECK_EQ(this, current()); | 365 DCHECK_EQ(this, current()); |
362 // Clear the previous thread task runner first, because only one can exist at | 366 // Clear the previous thread task runner first, because only one can exist at |
363 // a time. | 367 // a time. |
364 thread_task_runner_handle_.reset(); | 368 thread_task_runner_handle_.reset(); |
365 thread_task_runner_handle_.reset(new ThreadTaskRunnerHandle(task_runner_)); | 369 thread_task_runner_handle_.reset(new ThreadTaskRunnerHandle(task_runner_)); |
366 } | 370 } |
367 | 371 |
368 void MessageLoop::RunHandler() { | 372 void MessageLoop::RunHandler() { |
369 DCHECK_EQ(this, current()); | 373 DCHECK_EQ(this, current()); |
| 374 DCHECK(run_loop_); |
| 375 CHECK(allow_nesting_ || run_loop_->run_depth_ == 1); |
370 pump_->Run(this); | 376 pump_->Run(this); |
371 } | 377 } |
372 | 378 |
373 bool MessageLoop::ProcessNextDelayedNonNestableTask() { | 379 bool MessageLoop::ProcessNextDelayedNonNestableTask() { |
374 if (run_loop_->run_depth_ != 1) | 380 if (run_loop_->run_depth_ != 1) |
375 return false; | 381 return false; |
376 | 382 |
377 if (deferred_non_nestable_work_queue_.empty()) | 383 if (deferred_non_nestable_work_queue_.empty()) |
378 return false; | 384 return false; |
379 | 385 |
(...skipping 266 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
646 persistent, | 652 persistent, |
647 mode, | 653 mode, |
648 controller, | 654 controller, |
649 delegate); | 655 delegate); |
650 } | 656 } |
651 #endif | 657 #endif |
652 | 658 |
653 #endif // !defined(OS_NACL_SFI) | 659 #endif // !defined(OS_NACL_SFI) |
654 | 660 |
655 } // namespace base | 661 } // namespace base |
OLD | NEW |