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

Unified Diff: chrome/renderer/net/mockable_one_shot_timer_unittest.cc

Issue 136203009: Support auto-reload on errors. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@lkgr
Patch Set: placate clang Created 6 years, 9 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 side-by-side diff with in-line comments
Download patch
Index: chrome/renderer/net/mockable_one_shot_timer_unittest.cc
diff --git a/chrome/renderer/net/mockable_one_shot_timer_unittest.cc b/chrome/renderer/net/mockable_one_shot_timer_unittest.cc
new file mode 100644
index 0000000000000000000000000000000000000000..5801c7f1e95d2405dbea420350b50a630b9de18e
--- /dev/null
+++ b/chrome/renderer/net/mockable_one_shot_timer_unittest.cc
@@ -0,0 +1,81 @@
+// Copyright 2014 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include "chrome/renderer/net/mockable_one_shot_timer.h"
+
+#include "base/bind.h"
+#include "base/macros.h"
+#include "base/memory/weak_ptr.h"
+#include "base/message_loop/message_loop.h"
+#include "testing/gtest/include/gtest/gtest.h"
+
+namespace {
+
+class HasWeakPtr : public base::SupportsWeakPtr<HasWeakPtr> {
+ public:
+ HasWeakPtr() {}
+ virtual ~HasWeakPtr() {}
+ private:
+ DISALLOW_COPY_AND_ASSIGN(HasWeakPtr);
+};
+
+void IncrementCounter(int *counter) {
+ (*counter)++;
+}
+
+// Constructs a WeakPtr to the supplied HasWeakPtr to ensure that the supplied
+// HasWeakPtr (which is owned by the Closure RestartTimer is being called from)
+// is not destroyed by timer->Start().
+void RestartTimer(int* counter, HasWeakPtr* has_weak_ptr,
+ MockableOneShotTimer* timer) {
+ base::WeakPtr<HasWeakPtr> weak_ptr(has_weak_ptr->AsWeakPtr());
+ (*counter)++;
+ timer->Start(FROM_HERE, base::TimeDelta::FromMilliseconds(0),
+ base::Bind(&IncrementCounter,
+ base::Unretained(counter)));
+ ASSERT_TRUE(weak_ptr.get());
+}
+
+TEST(MockableOneShotTimerTest, TimerRuns) {
+ base::MessageLoop loop;
+ int calls = 0;
+ MockableOneShotTimer timer;
+ timer.Start(FROM_HERE, base::TimeDelta::FromMilliseconds(0),
+ base::Bind(&IncrementCounter,
+ base::Unretained(&calls)));
+ base::MessageLoop::current()->RunUntilIdle();
+ EXPECT_EQ(1, calls);
+}
+
+
+TEST(MockableOneShotTimerTest, TimerStops) {
+ base::MessageLoop loop;
+ int calls = 0;
+ MockableOneShotTimer timer;
+ timer.Start(FROM_HERE, base::TimeDelta::FromMilliseconds(0),
+ base::Bind(&IncrementCounter,
+ base::Unretained(&calls)));
+ timer.Stop();
+ base::MessageLoop::current()->RunUntilIdle();
+ EXPECT_EQ(0, calls);
+}
+
+// Test that the Closure contained in the MockableOneShotTimer is not destroyed
+// by another Start() from inside the closure callback (i.e., that the lifetime
+// of the Closure is longer than the lifetime of the actual callback).
+TEST(MockableOneShotTimerTest, StartFromClosure) {
+ base::MessageLoop loop;
+ int calls = 0;
+ MockableOneShotTimer timer;
+ timer.Start(FROM_HERE, base::TimeDelta::FromMilliseconds(0),
+ base::Bind(&RestartTimer,
+ base::Unretained(&calls),
+ base::Owned(new HasWeakPtr()),
+ base::Unretained(&timer)));
+ base::MessageLoop::current()->RunUntilIdle();
+ // Both RestartTimer() and IncrementCounter() must have run.
+ EXPECT_EQ(2, calls);
+}
+
+} // namespace

Powered by Google App Engine
This is Rietveld 408576698