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

Unified Diff: public/platform/WebPassOwnPtr.h

Issue 23455058: WIP: WebLayer::addAnimation should transfer the ownership of WebAnimation instance. (Closed) Base URL: https://chromium.googlesource.com/chromium/blink.git@master
Patch Set: Improve WebPassOwnPtr so that it is hard to make a mistake. Created 7 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 side-by-side diff with in-line comments
Download patch
« no previous file with comments | « public/platform/WebLayer.h ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: public/platform/WebPassOwnPtr.h
diff --git a/public/platform/WebPrivateOwnPtr.h b/public/platform/WebPassOwnPtr.h
similarity index 50%
copy from public/platform/WebPrivateOwnPtr.h
copy to public/platform/WebPassOwnPtr.h
index 5e13f07b348bc9749d69a4d2e957ca0eea297910..9c53d8f597c1e1f25b8549a539e4ae3a9263cc08 100644
--- a/public/platform/WebPrivateOwnPtr.h
+++ b/public/platform/WebPassOwnPtr.h
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2010 Google Inc. All rights reserved.
+ * Copyright (C) 2013 Intel Corporation. All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
@@ -23,53 +23,73 @@
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
-#ifndef WebPrivateOwnPtr_h
-#define WebPrivateOwnPtr_h
+#ifndef WebPassOwnPtr_h
+#define WebPassOwnPtr_h
#include "WebCommon.h"
+#if INSIDE_BLINK
+#include "wtf/OwnPtr.h"
+#include "wtf/PassOwnPtr.h"
+#include "wtf/UnusedParam.h"
+#endif
+
namespace WebKit {
-// This class is an implementation detail of the WebKit API. It exists
-// to help simplify the implementation of WebKit interfaces that merely
-// wrap a pointer to a WebCore class. It's similar to WebPrivatePtr, but it
-// wraps a naked pointer rather than a reference counted.
-// Note: you must call reset(0) on the implementation side in order to delete
-// the WebCore pointer.
+// It exists to help transfer the ownership of either OwnPtr or PassOwnPtr from Blink to Chromium.
+//
+// A typical usage is as follows:
+// in Blink side
+// OwnPtr<WebAnimation> animation;
+// WebLayer layer;
+// layer->addAnimation(animation);
+//
+// in Chromium side
+// bool WebAnimation::addAnimation(WebPassOwnPtr<WebAnimation> pop_animation) {
+// scoped_ptr<WebAnimation> animation(pop_animation.leakPtr());
+// ...
+// }
template <typename T>
-class WebPrivateOwnPtr {
+class WebPassOwnPtr {
public:
- WebPrivateOwnPtr() : m_ptr(0) {}
- ~WebPrivateOwnPtr() { BLINK_ASSERT(!m_ptr); }
+ WebPassOwnPtr() : m_ptr(0) { }
+ ~WebPassOwnPtr() { BLINK_ASSERT(!m_ptr); delete m_ptr; }
+ WebPassOwnPtr(const WebPassOwnPtr& o) : m_ptr(o.leakPtr()) { }
-#if INSIDE_BLINK
- explicit WebPrivateOwnPtr(T* ptr)
- : m_ptr(ptr)
+ T* leakPtr() const
{
+ T* ptr = m_ptr;
+ m_ptr = 0;
+ return ptr;
}
- void reset(T* ptr)
+#if INSIDE_BLINK
+ explicit WebPassOwnPtr(T* ptr)
+ : m_ptr(ptr)
{
- delete m_ptr;
- m_ptr = ptr;
+ COMPILE_ASSERT(sizeof(T) > 0, TypeMustBeComplete);
}
- T* get() const { return m_ptr; }
-
- T* operator->() const
- {
- BLINK_ASSERT(m_ptr);
- return m_ptr;
- }
+ template<typename U> WebPassOwnPtr(const PassOwnPtr<U>&);
#endif // INSIDE_BLINK
private:
- T* m_ptr;
+ WebPassOwnPtr& operator=(const WebPassOwnPtr&);
- WebPrivateOwnPtr(const WebPrivateOwnPtr&);
- void operator=(const WebPrivateOwnPtr&);
+ mutable T* m_ptr;
};
+#if INSIDE_BLINK
+template<typename T> template<typename U> inline WebPassOwnPtr<T>::WebPassOwnPtr(const PassOwnPtr<U>& o)
+ : m_ptr(o.leakPtr())
+{
+ using WTF::EnableIf;
+ using WTF::IsPointerConvertible;
+ EnsurePtrConvertibleArgDefn(U, T) typeChecker = true;
+ UNUSED_PARAM(typeChecker);
+}
+#endif
+
} // namespace WebKit
#endif
« no previous file with comments | « public/platform/WebLayer.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698