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

Side by Side Diff: mojo/common/handle_watcher.cc

Issue 668663006: Standardize usage of virtual/override/final in mojo/ (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 6 years, 2 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
« no previous file with comments | « mojo/cc/output_surface_mojo.h ('k') | mojo/common/message_pump_mojo.h » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
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 "mojo/common/handle_watcher.h" 5 #include "mojo/common/handle_watcher.h"
6 6
7 #include <map> 7 #include <map>
8 8
9 #include "base/atomic_sequence_num.h" 9 #include "base/atomic_sequence_num.h"
10 #include "base/bind.h" 10 #include "base/bind.h"
(...skipping 43 matching lines...) Expand 10 before | Expand all | Expand 10 after
54 }; 54 };
55 55
56 // WatcherBackend -------------------------------------------------------------- 56 // WatcherBackend --------------------------------------------------------------
57 57
58 // WatcherBackend is responsible for managing the requests and interacting with 58 // WatcherBackend is responsible for managing the requests and interacting with
59 // MessagePumpMojo. All access (outside of creation/destruction) is done on the 59 // MessagePumpMojo. All access (outside of creation/destruction) is done on the
60 // thread WatcherThreadManager creates. 60 // thread WatcherThreadManager creates.
61 class WatcherBackend : public MessagePumpMojoHandler { 61 class WatcherBackend : public MessagePumpMojoHandler {
62 public: 62 public:
63 WatcherBackend(); 63 WatcherBackend();
64 virtual ~WatcherBackend(); 64 ~WatcherBackend() override;
65 65
66 void StartWatching(const WatchData& data); 66 void StartWatching(const WatchData& data);
67 67
68 // Cancels a previously scheduled request to start a watch. 68 // Cancels a previously scheduled request to start a watch.
69 void StopWatching(WatcherID watcher_id); 69 void StopWatching(WatcherID watcher_id);
70 70
71 private: 71 private:
72 typedef std::map<Handle, WatchData> HandleToWatchDataMap; 72 typedef std::map<Handle, WatchData> HandleToWatchDataMap;
73 73
74 // Invoked when a handle needs to be removed and notified. 74 // Invoked when a handle needs to be removed and notified.
75 void RemoveAndNotify(const Handle& handle, MojoResult result); 75 void RemoveAndNotify(const Handle& handle, MojoResult result);
76 76
77 // Searches through |handle_to_data_| for |watcher_id|. Returns true if found 77 // Searches through |handle_to_data_| for |watcher_id|. Returns true if found
78 // and sets |handle| to the Handle. Returns false if not a known id. 78 // and sets |handle| to the Handle. Returns false if not a known id.
79 bool GetMojoHandleByWatcherID(WatcherID watcher_id, Handle* handle) const; 79 bool GetMojoHandleByWatcherID(WatcherID watcher_id, Handle* handle) const;
80 80
81 // MessagePumpMojoHandler overrides: 81 // MessagePumpMojoHandler overrides:
82 virtual void OnHandleReady(const Handle& handle) override; 82 void OnHandleReady(const Handle& handle) override;
83 virtual void OnHandleError(const Handle& handle, MojoResult result) override; 83 void OnHandleError(const Handle& handle, MojoResult result) override;
84 84
85 // Maps from assigned id to WatchData. 85 // Maps from assigned id to WatchData.
86 HandleToWatchDataMap handle_to_data_; 86 HandleToWatchDataMap handle_to_data_;
87 87
88 DISALLOW_COPY_AND_ASSIGN(WatcherBackend); 88 DISALLOW_COPY_AND_ASSIGN(WatcherBackend);
89 }; 89 };
90 90
91 WatcherBackend::WatcherBackend() { 91 WatcherBackend::WatcherBackend() {
92 } 92 }
93 93
(...skipping 224 matching lines...) Expand 10 before | Expand all | Expand 10 after
318 class HandleWatcher::StateBase : public base::MessageLoop::DestructionObserver { 318 class HandleWatcher::StateBase : public base::MessageLoop::DestructionObserver {
319 public: 319 public:
320 StateBase(HandleWatcher* watcher, 320 StateBase(HandleWatcher* watcher,
321 const base::Callback<void(MojoResult)>& callback) 321 const base::Callback<void(MojoResult)>& callback)
322 : watcher_(watcher), 322 : watcher_(watcher),
323 callback_(callback), 323 callback_(callback),
324 got_ready_(false) { 324 got_ready_(false) {
325 base::MessageLoop::current()->AddDestructionObserver(this); 325 base::MessageLoop::current()->AddDestructionObserver(this);
326 } 326 }
327 327
328 virtual ~StateBase() { 328 ~StateBase() override {
329 base::MessageLoop::current()->RemoveDestructionObserver(this); 329 base::MessageLoop::current()->RemoveDestructionObserver(this);
330 } 330 }
331 331
332 protected: 332 protected:
333 void NotifyHandleReady(MojoResult result) { 333 void NotifyHandleReady(MojoResult result) {
334 got_ready_ = true; 334 got_ready_ = true;
335 NotifyAndDestroy(result); 335 NotifyAndDestroy(result);
336 } 336 }
337 337
338 bool got_ready() const { return got_ready_; } 338 bool got_ready() const { return got_ready_; }
339 339
340 private: 340 private:
341 virtual void WillDestroyCurrentMessageLoop() override { 341 void WillDestroyCurrentMessageLoop() override {
342 // The current thread is exiting. Simulate a watch error. 342 // The current thread is exiting. Simulate a watch error.
343 NotifyAndDestroy(MOJO_RESULT_ABORTED); 343 NotifyAndDestroy(MOJO_RESULT_ABORTED);
344 } 344 }
345 345
346 void NotifyAndDestroy(MojoResult result) { 346 void NotifyAndDestroy(MojoResult result) {
347 base::Callback<void(MojoResult)> callback = callback_; 347 base::Callback<void(MojoResult)> callback = callback_;
348 watcher_->Stop(); // Destroys |this|. 348 watcher_->Stop(); // Destroys |this|.
349 349
350 callback.Run(result); 350 callback.Run(result);
351 } 351 }
(...skipping 19 matching lines...) Expand all
371 MojoDeadline deadline, 371 MojoDeadline deadline,
372 const base::Callback<void(MojoResult)>& callback) 372 const base::Callback<void(MojoResult)>& callback)
373 : StateBase(watcher, callback), 373 : StateBase(watcher, callback),
374 handle_(handle) { 374 handle_(handle) {
375 DCHECK(MessagePumpMojo::IsCurrent()); 375 DCHECK(MessagePumpMojo::IsCurrent());
376 376
377 MessagePumpMojo::current()->AddHandler( 377 MessagePumpMojo::current()->AddHandler(
378 this, handle, handle_signals, MojoDeadlineToTimeTicks(deadline)); 378 this, handle, handle_signals, MojoDeadlineToTimeTicks(deadline));
379 } 379 }
380 380
381 virtual ~SameThreadWatchingState() { 381 ~SameThreadWatchingState() override {
382 if (!got_ready()) 382 if (!got_ready())
383 MessagePumpMojo::current()->RemoveHandler(handle_); 383 MessagePumpMojo::current()->RemoveHandler(handle_);
384 } 384 }
385 385
386 private: 386 private:
387 // MessagePumpMojoHandler overrides: 387 // MessagePumpMojoHandler overrides:
388 virtual void OnHandleReady(const Handle& handle) override { 388 void OnHandleReady(const Handle& handle) override {
389 StopWatchingAndNotifyReady(handle, MOJO_RESULT_OK); 389 StopWatchingAndNotifyReady(handle, MOJO_RESULT_OK);
390 } 390 }
391 391
392 virtual void OnHandleError(const Handle& handle, MojoResult result) override { 392 void OnHandleError(const Handle& handle, MojoResult result) override {
393 StopWatchingAndNotifyReady(handle, result); 393 StopWatchingAndNotifyReady(handle, result);
394 } 394 }
395 395
396 void StopWatchingAndNotifyReady(const Handle& handle, MojoResult result) { 396 void StopWatchingAndNotifyReady(const Handle& handle, MojoResult result) {
397 DCHECK_EQ(handle.value(), handle_.value()); 397 DCHECK_EQ(handle.value(), handle_.value());
398 MessagePumpMojo::current()->RemoveHandler(handle_); 398 MessagePumpMojo::current()->RemoveHandler(handle_);
399 NotifyHandleReady(result); 399 NotifyHandleReady(result);
400 } 400 }
401 401
402 Handle handle_; 402 Handle handle_;
(...skipping 14 matching lines...) Expand all
417 : StateBase(watcher, callback), 417 : StateBase(watcher, callback),
418 weak_factory_(this) { 418 weak_factory_(this) {
419 watcher_id_ = WatcherThreadManager::GetInstance()->StartWatching( 419 watcher_id_ = WatcherThreadManager::GetInstance()->StartWatching(
420 handle, 420 handle,
421 handle_signals, 421 handle_signals,
422 MojoDeadlineToTimeTicks(deadline), 422 MojoDeadlineToTimeTicks(deadline),
423 base::Bind(&SecondaryThreadWatchingState::NotifyHandleReady, 423 base::Bind(&SecondaryThreadWatchingState::NotifyHandleReady,
424 weak_factory_.GetWeakPtr())); 424 weak_factory_.GetWeakPtr()));
425 } 425 }
426 426
427 virtual ~SecondaryThreadWatchingState() { 427 ~SecondaryThreadWatchingState() override {
428 // If we've been notified the handle is ready (|got_ready()| is true) then 428 // If we've been notified the handle is ready (|got_ready()| is true) then
429 // the watch has been implicitly removed by 429 // the watch has been implicitly removed by
430 // WatcherThreadManager/MessagePumpMojo and we don't have to call 430 // WatcherThreadManager/MessagePumpMojo and we don't have to call
431 // StopWatching(). To do so would needlessly entail posting a task and 431 // StopWatching(). To do so would needlessly entail posting a task and
432 // blocking until the background thread services it. 432 // blocking until the background thread services it.
433 if (!got_ready()) 433 if (!got_ready())
434 WatcherThreadManager::GetInstance()->StopWatching(watcher_id_); 434 WatcherThreadManager::GetInstance()->StopWatching(watcher_id_);
435 } 435 }
436 436
437 private: 437 private:
(...skipping 28 matching lines...) Expand all
466 this, handle, handle_signals, deadline, callback)); 466 this, handle, handle_signals, deadline, callback));
467 } 467 }
468 } 468 }
469 469
470 void HandleWatcher::Stop() { 470 void HandleWatcher::Stop() {
471 state_.reset(); 471 state_.reset();
472 } 472 }
473 473
474 } // namespace common 474 } // namespace common
475 } // namespace mojo 475 } // namespace mojo
OLDNEW
« no previous file with comments | « mojo/cc/output_surface_mojo.h ('k') | mojo/common/message_pump_mojo.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698