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

Unified Diff: media/base/android/test_destruction_observable.h

Issue 2813303003: Add AndroidVideoSurfaceChooser to manage overlays. (Closed)
Patch Set: fixed dereference of base::Optional Created 3 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 side-by-side diff with in-line comments
Download patch
« no previous file with comments | « media/base/android/mock_media_codec_bridge.h ('k') | media/base/android/test_destruction_observable.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: media/base/android/test_destruction_observable.h
diff --git a/media/base/android/test_destruction_observable.h b/media/base/android/test_destruction_observable.h
new file mode 100644
index 0000000000000000000000000000000000000000..b1676fbf55ad2d9dd8c661c7e43a84e722c5238d
--- /dev/null
+++ b/media/base/android/test_destruction_observable.h
@@ -0,0 +1,99 @@
+// Copyright 2017 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.
+
+#ifndef MEDIA_BASE_ANDROID_TEST_DESTRUCTION_OBSERVABLE_H_
+#define MEDIA_BASE_ANDROID_TEST_DESTRUCTION_OBSERVABLE_H_
+
+#include "base/callback.h"
+#include "base/memory/weak_ptr.h"
+#include "testing/gmock/include/gmock/gmock.h"
+
+namespace media {
+
+// Utility class to help tests set expectations about the lifetime of mocks that
+// they don't own. The mocks in question must derive from
+// DestructionObservable. The test can call CreateDestructionObserver() to
+// create the observer on which it may set expectations. By default, is is okay
+// but not required to destroy the observable.
+class DestructionObservable {
+ private:
+ class DestructionObserverInterface {
+ public:
+ DestructionObserverInterface() = default;
+ virtual ~DestructionObserverInterface() {}
+
+ virtual void OnDestroyed() = 0;
+
+ private:
+ DISALLOW_COPY_AND_ASSIGN(DestructionObserverInterface);
+ };
+
+ public:
+ // Mock that calls OnDestroyed when the observable is destroyed. This
+ // will replace the destruction callback on the mock.
+ class DestructionObserver : testing::NiceMock<DestructionObserverInterface> {
+ protected:
+ DestructionObserver();
+
+ public:
+ ~DestructionObserver();
+
+ // Make destruction optional. This will not fail even if destruction has
+ // already occured. Useful if you want to verify that ExpectDestruction()
+ // has succeeded by the time this is called.
+ void DestructionIsOptional();
+
+ // Indicate that the object must be destroyed before the observer is, or
+ // before the expectation is changed. Normally, the only reasonable next
+ // expecation is DestructionIsOptional, to verify that the codec has been
+ // destroyed by a certain point in the test.
+ //
+ // Note that if the object has already been destroyed, then this call will
+ // fail the test; either some previous expectation of ours should have
+ // failed (e.g., DoNotAllowDestruction, but the object was destroyed), in
+ // which case us failing is fine. Or, if no previous expectation failed,
+ // then it's likely that the test didn't set expectations properly.
+ void ExpectDestruction();
+
+ // Indicate that the observable may not be destroyed before the observer
+ // is destroyed, or the expection is changed. This will fail immediately
+ // if the observable has already been destroyed.
+ void DoNotAllowDestruction();
+
+ private:
+ friend class DestructionObservable;
+
+ // Return a callback gthat will notify us about destruction.
+ base::Closure GetCallback();
+
+ // Called by the callback when the observable is destroyed.
+ void OnDestroyed();
+
+ // Called by OnDestroyed, so that we can set expectations on it.
+ MOCK_METHOD0(MockOnDestroyed, void());
+
+ // Has the observable been destroyed already?
+ bool destroyed_ = false;
+
+ base::WeakPtrFactory<DestructionObserver> weak_factory_;
+
+ DISALLOW_COPY_AND_ASSIGN(DestructionObserver);
+ };
+
+ DestructionObservable();
+ virtual ~DestructionObservable();
+
+ // Create a DestructionObserver for us. There can be only one.
+ std::unique_ptr<DestructionObserver> CreateDestructionObserver();
+
+ private:
+ // Callback that we'll call when we're destroyed.
+ base::Closure destruction_cb_;
+
+ DISALLOW_COPY_AND_ASSIGN(DestructionObservable);
+};
+
+} // namespace media
+
+#endif // MEDIA_BASE_ANDROID_TEST_DESTRUCTION_OBSERVABLE_H_
« no previous file with comments | « media/base/android/mock_media_codec_bridge.h ('k') | media/base/android/test_destruction_observable.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698