summaryrefslogtreecommitdiff
path: root/chromium/base/win/object_watcher.cc
diff options
context:
space:
mode:
authorAllan Sandfeld Jensen <allan.jensen@qt.io>2017-01-04 14:17:57 +0100
committerAllan Sandfeld Jensen <allan.jensen@qt.io>2017-01-05 10:05:06 +0000
commit39d357e3248f80abea0159765ff39554affb40db (patch)
treeaba0e6bfb76de0244bba0f5fdbd64b830dd6e621 /chromium/base/win/object_watcher.cc
parent87778abf5a1f89266f37d1321b92a21851d8244d (diff)
downloadqtwebengine-chromium-39d357e3248f80abea0159765ff39554affb40db.tar.gz
BASELINE: Update Chromium to 55.0.2883.105
And updates ninja to 1.7.2 Change-Id: I20d43c737f82764d857ada9a55586901b18b9243 Reviewed-by: Michael BrĂ¼ning <michael.bruning@qt.io>
Diffstat (limited to 'chromium/base/win/object_watcher.cc')
-rw-r--r--chromium/base/win/object_watcher.cc54
1 files changed, 20 insertions, 34 deletions
diff --git a/chromium/base/win/object_watcher.cc b/chromium/base/win/object_watcher.cc
index 4df54a45d6b..9a7eea2b054 100644
--- a/chromium/base/win/object_watcher.cc
+++ b/chromium/base/win/object_watcher.cc
@@ -6,19 +6,14 @@
#include "base/bind.h"
#include "base/logging.h"
+#include "base/threading/thread_task_runner_handle.h"
namespace base {
namespace win {
//-----------------------------------------------------------------------------
-ObjectWatcher::ObjectWatcher()
- : object_(NULL),
- wait_object_(NULL),
- origin_loop_(NULL),
- run_once_(true),
- weak_factory_(this) {
-}
+ObjectWatcher::ObjectWatcher() : weak_factory_(this) {}
ObjectWatcher::~ObjectWatcher() {
StopWatching();
@@ -38,7 +33,7 @@ bool ObjectWatcher::StopWatching() {
return false;
// Make sure ObjectWatcher is used in a single-threaded fashion.
- DCHECK_EQ(origin_loop_, MessageLoop::current());
+ DCHECK(task_runner_->BelongsToCurrentThread());
// Blocking call to cancel the wait. Any callbacks already in progress will
// finish before we return from this call.
@@ -47,16 +42,12 @@ bool ObjectWatcher::StopWatching() {
return false;
}
- weak_factory_.InvalidateWeakPtrs();
- object_ = NULL;
- wait_object_ = NULL;
-
- origin_loop_->RemoveDestructionObserver(this);
+ Reset();
return true;
}
bool ObjectWatcher::IsWatching() const {
- return object_ != NULL;
+ return object_ != nullptr;
}
HANDLE ObjectWatcher::GetWatchedObject() const {
@@ -70,22 +61,18 @@ void CALLBACK ObjectWatcher::DoneWaiting(void* param, BOOLEAN timed_out) {
// The destructor blocks on any callbacks that are in flight, so we know that
// that is always a pointer to a valid ObjectWater.
ObjectWatcher* that = static_cast<ObjectWatcher*>(param);
- that->origin_loop_->task_runner()->PostTask(FROM_HERE, that->callback_);
+ that->task_runner_->PostTask(FROM_HERE, that->callback_);
if (that->run_once_)
that->callback_.Reset();
}
bool ObjectWatcher::StartWatchingInternal(HANDLE object, Delegate* delegate,
bool execute_only_once) {
- CHECK(delegate);
- if (wait_object_) {
- NOTREACHED() << "Already watching an object";
- return false;
- }
+ DCHECK(delegate);
+ DCHECK(!wait_object_) << "Already watching an object";
+ DCHECK(ThreadTaskRunnerHandle::IsSet());
- origin_loop_ = MessageLoop::current();
- if (!origin_loop_)
- return false;
+ task_runner_ = ThreadTaskRunnerHandle::Get();
run_once_ = execute_only_once;
@@ -97,21 +84,17 @@ bool ObjectWatcher::StartWatchingInternal(HANDLE object, Delegate* delegate,
// DoneWaiting can be synchronously called from RegisterWaitForSingleObject,
// so set up all state now.
- callback_ = base::Bind(&ObjectWatcher::Signal, weak_factory_.GetWeakPtr(),
- delegate);
+ callback_ =
+ Bind(&ObjectWatcher::Signal, weak_factory_.GetWeakPtr(), delegate);
object_ = object;
if (!RegisterWaitForSingleObject(&wait_object_, object, DoneWaiting,
this, INFINITE, wait_flags)) {
DPLOG(FATAL) << "RegisterWaitForSingleObject failed";
- object_ = NULL;
- wait_object_ = NULL;
+ Reset();
return false;
}
- // We need to know if the current message loop is going away so we can
- // prevent the wait thread from trying to access a dead message loop.
- origin_loop_->AddDestructionObserver(this);
return true;
}
@@ -125,10 +108,13 @@ void ObjectWatcher::Signal(Delegate* delegate) {
delegate->OnObjectSignaled(object);
}
-void ObjectWatcher::WillDestroyCurrentMessageLoop() {
- // Need to shutdown the watch so that we don't try to access the MessageLoop
- // after this point.
- StopWatching();
+void ObjectWatcher::Reset() {
+ callback_.Reset();
+ object_ = nullptr;
+ wait_object_ = nullptr;
+ task_runner_ = nullptr;
+ run_once_ = true;
+ weak_factory_.InvalidateWeakPtrs();
}
} // namespace win