Ref: A smart pointer for the reference age.
authorakling@apple.com <akling@apple.com@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Mon, 2 Sep 2013 18:50:01 +0000 (18:50 +0000)
committerakling@apple.com <akling@apple.com@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Mon, 2 Sep 2013 18:50:01 +0000 (18:50 +0000)
<https://webkit.org/b/120570>

Reviewed by Antti Koivisto.

Source/WebCore:

Use Ref<T> for various stack guards where null checking isn't needed.

Source/WTF:

Add a very simple simple Ref<T> smart pointer class that is never null.
It's initialized by passing a T& to the constructor and cannot be assigned to.

operator-> is not overloaded, to prevent unsafe-looking code.
The value is extracted by "T& get()", since C++ does not let you override operator.()

* wtf/Ref.h:

git-svn-id: https://svn.webkit.org/repository/webkit/trunk@154962 268f45cc-cd09-0410-ab3c-d52691b4dbfc

68 files changed:
Source/WTF/ChangeLog
Source/WTF/WTF.pro
Source/WTF/WTF.vcxproj/WTF.vcxproj.filters
Source/WTF/WTF.xcodeproj/project.pbxproj
Source/WTF/wtf/CMakeLists.txt
Source/WTF/wtf/Forward.h
Source/WebCore/ChangeLog
Source/WebCore/Modules/geolocation/Geolocation.cpp
Source/WebCore/Modules/webaudio/AudioContext.cpp
Source/WebCore/bindings/js/JSCustomSQLStatementErrorCallback.cpp
Source/WebCore/bindings/js/JSCustomXPathNSResolver.cpp
Source/WebCore/bindings/js/JSDOMGlobalObjectTask.cpp
Source/WebCore/bindings/js/JSErrorHandler.cpp
Source/WebCore/bindings/js/JSEventListener.cpp
Source/WebCore/bindings/js/JSEventListener.h
Source/WebCore/bridge/runtime_root.cpp
Source/WebCore/css/CSSFontSelector.cpp
Source/WebCore/css/StyleSheetContents.cpp
Source/WebCore/dom/CharacterData.cpp
Source/WebCore/dom/ContainerNode.cpp
Source/WebCore/dom/ContainerNodeAlgorithms.h
Source/WebCore/dom/Document.cpp
Source/WebCore/dom/DocumentEventQueue.cpp
Source/WebCore/dom/EventTarget.cpp
Source/WebCore/dom/Node.cpp
Source/WebCore/dom/ScriptExecutionContext.cpp
Source/WebCore/dom/ScriptedAnimationController.cpp
Source/WebCore/html/HTMLEmbedElement.cpp
Source/WebCore/html/HTMLFormControlElement.cpp
Source/WebCore/html/HTMLFormElement.cpp
Source/WebCore/html/HTMLFrameOwnerElement.cpp
Source/WebCore/html/HTMLInputElement.cpp
Source/WebCore/html/HTMLLinkElement.cpp
Source/WebCore/html/HTMLMediaElement.cpp
Source/WebCore/html/HTMLObjectElement.cpp
Source/WebCore/html/HTMLOptionElement.cpp
Source/WebCore/html/HTMLScriptElement.cpp
Source/WebCore/html/HTMLTableElement.cpp
Source/WebCore/html/HTMLTextAreaElement.cpp
Source/WebCore/html/HTMLTitleElement.cpp
Source/WebCore/html/parser/HTMLDocumentParser.cpp
Source/WebCore/html/shadow/SpinButtonElement.cpp
Source/WebCore/html/shadow/TextControlInnerElements.cpp
Source/WebCore/inspector/InspectorCSSAgent.cpp
Source/WebCore/loader/DocumentLoader.cpp
Source/WebCore/loader/DocumentThreadableLoader.cpp
Source/WebCore/loader/DocumentWriter.cpp
Source/WebCore/loader/FrameLoader.cpp
Source/WebCore/loader/NavigationScheduler.cpp
Source/WebCore/loader/NetscapePlugInStreamLoader.cpp
Source/WebCore/loader/ResourceLoader.cpp
Source/WebCore/loader/SubresourceLoader.cpp
Source/WebCore/loader/cf/SubresourceLoaderCF.cpp
Source/WebCore/page/DOMWindow.cpp
Source/WebCore/page/DOMWindowExtension.cpp
Source/WebCore/page/FocusController.cpp
Source/WebCore/page/FrameView.cpp
Source/WebCore/page/animation/AnimationBase.cpp
Source/WebCore/platform/graphics/DisplayRefreshMonitor.cpp
Source/WebCore/platform/mac/WidgetMac.mm
Source/WebCore/platform/network/BlobResourceHandle.cpp
Source/WebCore/platform/network/cf/ResourceHandleCFNet.cpp
Source/WebCore/platform/network/mac/ResourceHandleMac.mm
Source/WebCore/rendering/RenderWidget.cpp
Source/WebCore/workers/WorkerScriptLoader.cpp
Source/WebCore/xml/XMLHttpRequest.cpp
Source/WebCore/xml/parser/XMLDocumentParser.cpp
Source/WebCore/xml/parser/XMLDocumentParserLibxml2.cpp

index bbbaea7..4a1bf6d 100644 (file)
@@ -1,3 +1,18 @@
+2013-09-01  Andreas Kling  <akling@apple.com>
+
+        Ref: A smart pointer for the reference age.
+        <https://webkit.org/b/120570>
+
+        Reviewed by Antti Koivisto.
+
+        Add a very simple simple Ref<T> smart pointer class that is never null.
+        It's initialized by passing a T& to the constructor and cannot be assigned to.
+
+        operator-> is not overloaded, to prevent unsafe-looking code.
+        The value is extracted by "T& get()", since C++ does not let you override operator.()
+
+        * wtf/Ref.h:
+
 2013-08-30  Oliver Hunt  <oliver@apple.com>
 
         Make JSValue bool conversion less dangerous
index 00b952a..18b73e4 100644 (file)
@@ -85,6 +85,7 @@ HEADERS += \
     MessageQueue.h \
     MetaAllocator.h \
     MetaAllocatorHandle.h \
+    Ref.h \
     Noncopyable.h \
     NonCopyingSort.h \
     NotFound.h \
index a1acb50..a5b10d8 100644 (file)
     <ClInclude Include="..\wtf\NeverDestroyed.h">\r
       <Filter>wtf</Filter>\r
     </ClInclude>\r
+    <ClInclude Include="..\wtf\Ref.h">\r
+      <Filter>wtf</Filter>\r
+    </ClInclude>\r
     <ClInclude Include="..\wtf\Noncopyable.h">\r
       <Filter>wtf</Filter>\r
     </ClInclude>\r
index c3c983b..e8fa21c 100644 (file)
@@ -54,6 +54,7 @@
                1FA47C8A152502DA00568D1B /* WebCoreThread.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 1FA47C88152502DA00568D1B /* WebCoreThread.cpp */; };
                1FA47C8B152502DA00568D1B /* WebCoreThread.h in Headers */ = {isa = PBXBuildFile; fileRef = 1FA47C89152502DA00568D1B /* WebCoreThread.h */; };
                26147B0A15DDCCDC00DDB907 /* IntegerToStringConversion.h in Headers */ = {isa = PBXBuildFile; fileRef = 26147B0815DDCCDC00DDB907 /* IntegerToStringConversion.h */; };
+               26299B6E17A9E5B800ADEBE5 /* Ref.h in Headers */ = {isa = PBXBuildFile; fileRef = 26299B6D17A9E5B800ADEBE5 /* Ref.h */; };
                2C05385415BC819000F21B96 /* GregorianDateTime.h in Headers */ = {isa = PBXBuildFile; fileRef = 2C05385315BC819000F21B96 /* GregorianDateTime.h */; };
                2CCD892A15C0390200285083 /* GregorianDateTime.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 2CCD892915C0390200285083 /* GregorianDateTime.cpp */; };
                44F66008171AFAE600E4AD19 /* EnumClass.h in Headers */ = {isa = PBXBuildFile; fileRef = 44F66007171AFAA900E4AD19 /* EnumClass.h */; };
                1FA47C88152502DA00568D1B /* WebCoreThread.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = WebCoreThread.cpp; sourceTree = "<group>"; };
                1FA47C89152502DA00568D1B /* WebCoreThread.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = WebCoreThread.h; sourceTree = "<group>"; };
                26147B0815DDCCDC00DDB907 /* IntegerToStringConversion.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = IntegerToStringConversion.h; sourceTree = "<group>"; };
+               26299B6D17A9E5B800ADEBE5 /* Ref.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Ref.h; sourceTree = "<group>"; };
                2C05385315BC819000F21B96 /* GregorianDateTime.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GregorianDateTime.h; sourceTree = "<group>"; };
                2CCD892915C0390200285083 /* GregorianDateTime.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = GregorianDateTime.cpp; sourceTree = "<group>"; };
                44DEE74A152274BB00C6EC37 /* iOS.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; path = iOS.xcconfig; sourceTree = "<group>"; };
                                A8A472CE151A825B004123FF /* MetaAllocator.h */,
                                A8A472CF151A825B004123FF /* MetaAllocatorHandle.h */,
                                1A3F6BE6174ADA2100B2EEA7 /* NeverDestroyed.h */,
+                               26299B6D17A9E5B800ADEBE5 /* Ref.h */,
                                0F0D85B317234CB100338210 /* NoLock.h */,
                                A8A472D0151A825B004123FF /* Noncopyable.h */,
                                A8A472D1151A825B004123FF /* NonCopyingSort.h */,
                                A8A473DA151A825B004123FF /* HashTraits.h in Headers */,
                                A8A473DB151A825B004123FF /* HexNumber.h in Headers */,
                                A8A473DC151A825B004123FF /* InlineASM.h in Headers */,
+                               26299B6E17A9E5B800ADEBE5 /* Ref.h in Headers */,
                                A70DA0841799F04D00529A9B /* Insertion.h in Headers */,
                                26147B0A15DDCCDC00DDB907 /* IntegerToStringConversion.h in Headers */,
                                A70DA0851799F04D00529A9B /* ListDump.h in Headers */,
                                A8A47424151A825B004123FF /* SinglyLinkedList.h in Headers */,
                                A748745317A0BDAE00FA04CB /* SixCharacterHash.h in Headers */,
                                A8A47426151A825B004123FF /* Spectrum.h in Headers */,
+                               26A7052617445A5F00118ACA /* Ref.h in Headers */,
                                A8A47428151A825B004123FF /* StackBounds.h in Headers */,
                                FEDACD3E1630F83F00C69634 /* StackStats.h in Headers */,
                                A8A47429151A825B004123FF /* StaticConstructors.h in Headers */,
index 9a59186..6b367cb 100644 (file)
@@ -55,6 +55,7 @@ set(WTF_HEADERS
     MetaAllocatorHandle.h
     NonCopyingSort.h
     ThreadRestrictionVerifier.h
+    Ref.h
     Noncopyable.h
     NotFound.h
     NullPtr.h
index 2a47503..59a5dc0 100644 (file)
@@ -32,6 +32,7 @@ namespace WTF {
     template<typename T> class PassOwnPtr;
     template<typename T> class PassRefPtr;
     template<typename T> class RefPtr;
+    template<typename T> class Ref;
     template<typename T, size_t inlineCapacity, typename OverflowHandler> class Vector;
 
     class AtomicString;
@@ -55,6 +56,7 @@ using WTF::PassOwnArrayPtr;
 using WTF::PassOwnPtr;
 using WTF::PassRefPtr;
 using WTF::RefPtr;
+using WTF::Ref;
 using WTF::Vector;
 
 using WTF::AtomicString;
index 75f8636..d7d23b0 100644 (file)
@@ -1,3 +1,12 @@
+2013-09-01  Andreas Kling  <akling@apple.com>
+
+        Ref: A smart pointer for the reference age.
+        <https://webkit.org/b/120570>
+
+        Reviewed by Antti Koivisto.
+
+        Use Ref<T> for various stack guards where null checking isn't needed.
+
 2013-09-02  Andreas Kling  <akling@apple.com>
 
         Simplify DocumentType handling.
index c7a65c7..c596866 100644 (file)
@@ -35,6 +35,7 @@
 #include "Geoposition.h"
 #include "Page.h"
 #include <wtf/CurrentTime.h>
+#include <wtf/Ref.h>
 
 #include "Coordinates.h"
 #include "GeolocationController.h"
@@ -147,7 +148,7 @@ void Geolocation::GeoNotifier::timerFired(Timer<GeoNotifier>*)
 
     // Protect this GeoNotifier object, since it
     // could be deleted by a call to clearWatch in a callback.
-    RefPtr<GeoNotifier> protect(this);
+    Ref<GeoNotifier> protect(*this);
 
     // Test for fatal error first. This is required for the case where the Frame is
     // disconnected and requests are cancelled.
@@ -433,7 +434,7 @@ void Geolocation::clearWatch(int watchID)
 void Geolocation::setIsAllowed(bool allowed)
 {
     // Protect the Geolocation object from garbage collection during a callback.
-    RefPtr<Geolocation> protect(this);
+    Ref<Geolocation> protect(*this);
 
     // This may be due to either a new position from the service, or a cached
     // position.
index 8a0e8d5..3979fa5 100644 (file)
@@ -84,6 +84,7 @@
 #include <wtf/MainThread.h>
 #include <wtf/OwnPtr.h>
 #include <wtf/PassOwnPtr.h>
+#include <wtf/Ref.h>
 #include <wtf/RefCounted.h>
 #include <wtf/text/WTFString.h>
 
@@ -843,7 +844,7 @@ void AudioContext::deleteMarkedNodes()
     ASSERT(isMainThread());
 
     // Protect this object from being deleted before we release the mutex locked by AutoLocker.
-    RefPtr<AudioContext> protect(this);
+    Ref<AudioContext> protect(*this);
     {
         AutoLocker locker(this);
 
index 96d3c90..b4e315e 100644 (file)
@@ -36,6 +36,7 @@
 #include "JSSQLTransaction.h"
 #include "ScriptExecutionContext.h"
 #include <runtime/JSLock.h>
+#include <wtf/Ref.h>
 
 namespace WebCore {
 
@@ -46,7 +47,7 @@ bool JSSQLStatementErrorCallback::handleEvent(SQLTransaction* transaction, SQLEr
     if (!m_data || !m_data->globalObject() || !canInvokeCallback())
         return true;
 
-    RefPtr<JSSQLStatementErrorCallback> protect(this);
+    Ref<JSSQLStatementErrorCallback> protect(*this);
 
     JSC::JSLockHolder lock(m_data->globalObject()->vm());
 
index 125b91e..84e711b 100644 (file)
@@ -35,6 +35,7 @@
 #include "PageConsole.h"
 #include "SecurityOrigin.h"
 #include <runtime/JSLock.h>
+#include <wtf/Ref.h>
 
 namespace WebCore {
 
@@ -86,7 +87,7 @@ String JSCustomXPathNSResolver::lookupNamespaceURI(const String& prefix)
         function = m_customResolver.get();
     }
 
-    RefPtr<JSCustomXPathNSResolver> selfProtector(this);
+    Ref<JSCustomXPathNSResolver> selfProtector(*this);
 
     MarkedArgumentBuffer args;
     args.append(jsStringWithCache(exec, prefix));
index 93ee16d..241ad27 100644 (file)
@@ -29,6 +29,7 @@
 #include "ActiveDOMCallback.h"
 #include "JSMainThreadExecState.h"
 #include <heap/StrongInlines.h>
+#include <wtf/Ref.h>
 
 using namespace JSC;
 
@@ -46,7 +47,7 @@ public:
         if (!canInvokeCallback())
             return;
 
-        RefPtr<JSGlobalObjectCallback> protect(this);
+        Ref<JSGlobalObjectCallback> protect(*this);
         JSLockHolder lock(m_globalObject->vm());
 
         ExecState* exec = m_globalObject->globalExec();
index f28f6b5..c68aaa6 100644 (file)
@@ -38,6 +38,7 @@
 #include "JSEvent.h"
 #include "JSMainThreadExecState.h"
 #include <runtime/JSLock.h>
+#include <wtf/Ref.h>
 
 using namespace JSC;
 
@@ -79,7 +80,7 @@ void JSErrorHandler::handleEvent(ScriptExecutionContext* scriptExecutionContext,
     CallType callType = jsFunction->methodTable()->getCallData(jsFunction, callData);
 
     if (callType != CallTypeNone) {
-        RefPtr<JSErrorHandler> protectedctor(this);
+        Ref<JSErrorHandler> protectedctor(*this);
 
         Event* savedEvent = globalObject->currentEvent();
         globalObject->setCurrentEvent(event);
index 80cf320..a3f8449 100644 (file)
@@ -30,6 +30,7 @@
 #include "WorkerGlobalScope.h"
 #include <runtime/ExceptionHelpers.h>
 #include <runtime/JSLock.h>
+#include <wtf/Ref.h>
 #include <wtf/RefCountedLeakCounter.h>
 
 using namespace JSC;
@@ -111,7 +112,7 @@ void JSEventListener::handleEvent(ScriptExecutionContext* scriptExecutionContext
     }
 
     if (callType != CallTypeNone) {
-        RefPtr<JSEventListener> protect(this);
+        Ref<JSEventListener> protect(*this);
 
         MarkedArgumentBuffer args;
         args.append(toJS(exec, globalObject, event));
index c9955aa..3ec167c 100644 (file)
@@ -26,6 +26,7 @@
 #include <heap/StrongInlines.h>
 #include <heap/Weak.h>
 #include <heap/WeakInlines.h>
+#include <wtf/Ref.h>
 
 namespace WebCore {
 
@@ -79,7 +80,7 @@ namespace WebCore {
     {
         // initializeJSFunction can trigger code that deletes this event listener
         // before we're done. It should always return 0 in this case.
-        RefPtr<JSEventListener> protect(const_cast<JSEventListener*>(this));
+        Ref<JSEventListener> protect(const_cast<JSEventListener&>(*this));
         JSC::Strong<JSC::JSObject> wrapper(*m_isolatedWorld->vm(), m_wrapper.get());
 
         if (!m_jsFunction) {
index 7391d13..e86549f 100644 (file)
@@ -34,6 +34,7 @@
 #include <runtime/JSGlobalObject.h>
 #include <wtf/HashCountedSet.h>
 #include <wtf/HashSet.h>
+#include <wtf/Ref.h>
 #include <wtf/StdLibExtras.h>
 
 namespace JSC { namespace Bindings {
@@ -201,7 +202,7 @@ void RootObject::finalize(JSC::Handle<JSC::Unknown> handle, void*)
 {
     RuntimeObject* object = static_cast<RuntimeObject*>(handle.get().asCell());
 
-    RefPtr<RootObject> protect(this);
+    Ref<RootObject> protect(*this);
     object->invalidate();
     weakRemove(m_runtimeObjects, object, object);
 }
index 28de7a8..f98bd42 100644 (file)
@@ -50,6 +50,7 @@
 #include "StyleResolver.h"
 #include "StyleRule.h"
 #include "WebKitFontFamilyNames.h"
+#include <wtf/Ref.h>
 #include <wtf/text/AtomicString.h>
 
 #if ENABLE(SVG)
@@ -598,7 +599,7 @@ void CSSFontSelector::beginLoadTimerFired(Timer<WebCore::CSSFontSelector>*)
     fontsToBeginLoading.swap(m_fontsToBeginLoading);
 
     // CSSFontSelector could get deleted via beginLoadIfNeeded() or loadDone() unless protected.
-    RefPtr<CSSFontSelector> protect(this);
+    Ref<CSSFontSelector> protect(*this);
 
     CachedResourceLoader* cachedResourceLoader = m_document->cachedResourceLoader();
     for (size_t i = 0; i < fontsToBeginLoading.size(); ++i) {
index 71a2def..ef5d539 100644 (file)
@@ -34,6 +34,7 @@
 #include "StyleRule.h"
 #include "StyleRuleImport.h"
 #include <wtf/Deque.h>
+#include <wtf/Ref.h>
 
 namespace WebCore {
 
@@ -341,12 +342,10 @@ void StyleSheetContents::checkLoaded()
     if (isLoading())
         return;
 
-    RefPtr<StyleSheetContents> protect(this);
-
     // Avoid |this| being deleted by scripts that run via
     // ScriptableDocumentParser::executeScriptsWaitingForStylesheets().
     // See <rdar://problem/6622300>.
-    RefPtr<StyleSheetContents> protector(this);
+    Ref<StyleSheetContents> protect(*this);
     StyleSheetContents* parentSheet = parentStyleSheet();
     if (parentSheet) {
         parentSheet->checkLoaded();
index 28ef29f..407b058 100644 (file)
@@ -35,6 +35,7 @@
 #include "StyleInheritedData.h"
 #include "Text.h"
 #include "TextBreakIterator.h"
+#include <wtf/Ref.h>
 
 using namespace std;
 
@@ -46,7 +47,7 @@ void CharacterData::setData(const String& data, ExceptionCode&)
     if (m_data == nonNullData)
         return;
 
-    RefPtr<CharacterData> protect = this;
+    Ref<CharacterData> protect(*this);
 
     unsigned oldLength = length();
 
index 3238ee2..d418a5e 100644 (file)
@@ -55,6 +55,7 @@
 #include "TemplateContentDocumentFragment.h"
 #include "Text.h"
 #include <wtf/CurrentTime.h>
+#include <wtf/Ref.h>
 #include <wtf/Vector.h>
 
 #if ENABLE(DELETION_UI)
@@ -262,7 +263,7 @@ bool ContainerNode::insertBefore(PassRefPtr<Node> newChild, Node* refChild, Exce
     // If it is, it can be deleted as a side effect of sending mutation events.
     ASSERT(refCount() || parentOrShadowHostNode());
 
-    RefPtr<Node> protect(this);
+    Ref<ContainerNode> protect(*this);
 
     ec = 0;
 
@@ -403,7 +404,7 @@ bool ContainerNode::replaceChild(PassRefPtr<Node> newChild, Node* oldChild, Exce
     // If it is, it can be deleted as a side effect of sending mutation events.
     ASSERT(refCount() || parentOrShadowHostNode());
 
-    RefPtr<Node> protect(this);
+    Ref<ContainerNode> protect(*this);
 
     ec = 0;
 
@@ -526,7 +527,7 @@ bool ContainerNode::removeChild(Node* oldChild, ExceptionCode& ec)
     // If it is, it can be deleted as a side effect of sending mutation events.
     ASSERT(refCount() || parentOrShadowHostNode());
 
-    RefPtr<Node> protect(this);
+    Ref<ContainerNode> protect(*this);
 
     ec = 0;
 
@@ -637,7 +638,7 @@ void ContainerNode::removeChildren()
         return;
 
     // The container node can be removed from event handlers.
-    RefPtr<ContainerNode> protect(this);
+    Ref<ContainerNode> protect(*this);
 
     // exclude this node when looking for removed focusedNode since only children will be removed
     document().removeFocusedNodeOfSubtree(this, true);
@@ -648,7 +649,7 @@ void ContainerNode::removeChildren()
 
     // Do any prep work needed before actually starting to detach
     // and remove... e.g. stop loading frames, fire unload events.
-    willRemoveChildren(protect.get());
+    willRemoveChildren(this);
 
     NodeVector removedChildren;
     {
@@ -674,7 +675,7 @@ void ContainerNode::removeChildren()
 
 bool ContainerNode::appendChild(PassRefPtr<Node> newChild, ExceptionCode& ec, AttachBehavior attachBehavior)
 {
-    RefPtr<ContainerNode> protect(this);
+    Ref<ContainerNode> protect(*this);
 
     // Check that this node is not "floating".
     // If it is, it can be deleted as a side effect of sending mutation events.
@@ -777,7 +778,7 @@ void ContainerNode::suspendPostAttachCallbacks()
 void ContainerNode::resumePostAttachCallbacks()
 {
     if (s_attachDepth == 1) {
-        RefPtr<ContainerNode> protect(this);
+        Ref<ContainerNode> protect(*this);
 
         if (s_postAttachCallbackQueue)
             dispatchPostAttachCallbacks();
index b7336c8..151b3f2 100644 (file)
@@ -30,6 +30,7 @@
 #include "NodeTraversal.h"
 #include "ShadowRoot.h"
 #include <wtf/Assertions.h>
+#include <wtf/Ref.h>
 
 namespace WebCore {
 
@@ -183,7 +184,7 @@ namespace Private {
 
                 tail = n;
             } else {
-                RefPtr<GenericNode> protect(n); // removedFromDocument may remove remove all references to this node.
+                Ref<GenericNode> protect(*n); // removedFromDocument may remove remove all references to this node.
                 NodeRemovalDispatcher<GenericNode, GenericNodeContainer, ShouldDispatchRemovalNotification<GenericNode>::value>::dispatch(n, container);
             }
         }
@@ -196,7 +197,7 @@ namespace Private {
 inline void ChildNodeInsertionNotifier::notifyNodeInsertedIntoDocument(Node* node)
 {
     ASSERT(m_insertionPoint->inDocument());
-    RefPtr<Node> protect(node);
+    Ref<Node> protect(*node);
     if (Node::InsertionShouldCallDidNotifySubtreeInsertions == node->insertedInto(m_insertionPoint))
         m_postInsertionNotificationTargets.append(node);
     if (node->isContainerNode())
@@ -221,8 +222,8 @@ inline void ChildNodeInsertionNotifier::notify(Node* node)
     InspectorInstrumentation::didInsertDOMNode(&node->document(), node);
 #endif
 
-    RefPtr<Document> protectDocument(&node->document());
-    RefPtr<Node> protectNode(node);
+    Ref<Document> protectDocument(node->document());
+    Ref<Node> protectNode(*node);
 
     if (m_insertionPoint->inDocument())
         notifyNodeInsertedIntoDocument(node);
index ed3869d..354e179 100644 (file)
 #include <wtf/CurrentTime.h>
 #include <wtf/MainThread.h>
 #include <wtf/PassRefPtr.h>
+#include <wtf/Ref.h>
 #include <wtf/TemporaryChange.h>
 #include <wtf/text/StringBuffer.h>
 
@@ -2372,7 +2373,7 @@ void Document::implicitClose()
         return;
 
     // Call to dispatchWindowLoadEvent can blow us from underneath.
-    RefPtr<Document> protect(this);
+    Ref<Document> protect(*this);
 
     m_processingLoadEvent = true;
 
@@ -5322,7 +5323,7 @@ void Document::fullScreenChangeDelayTimerFired(Timer<Document>*)
     // Since we dispatch events in this function, it's possible that the
     // document will be detached and GC'd. We protect it here to make sure we
     // can finish the function successfully.
-    RefPtr<Document> protectDocument(this);
+    Ref<Document> protect(*this);
     Deque<RefPtr<Node> > changeQueue;
     m_fullScreenChangeEventTargetQueue.swap(changeQueue);
     Deque<RefPtr<Node> > errorQueue;
index 9d07ef2..35a7b32 100644 (file)
@@ -34,6 +34,7 @@
 #include "RuntimeApplicationChecks.h"
 #include "ScriptExecutionContext.h"
 #include "SuspendableTimer.h"
+#include <wtf/Ref.h>
 
 namespace WebCore {
     
@@ -135,7 +136,7 @@ void DocumentEventQueue::pendingEventTimerFired()
     bool wasAdded = m_queuedEvents.add(0).isNewEntry;
     ASSERT_UNUSED(wasAdded, wasAdded); // It should not have already been in the list.
 
-    RefPtr<DocumentEventQueue> protector(this);
+    Ref<DocumentEventQueue> protect(*this);
 
     while (!m_queuedEvents.isEmpty()) {
         ListHashSet<RefPtr<Event>, 16>::iterator iter = m_queuedEvents.begin();
index 59d1094..f120aa1 100644 (file)
@@ -38,6 +38,7 @@
 #include "ScriptController.h"
 #include "WebKitTransitionEvent.h"
 #include <wtf/MainThread.h>
+#include <wtf/Ref.h>
 #include <wtf/StdLibExtras.h>
 #include <wtf/Vector.h>
 
@@ -240,7 +241,7 @@ bool EventTarget::fireEventListeners(Event* event)
         
 void EventTarget::fireEventListeners(Event* event, EventTargetData* d, EventListenerVector& entry)
 {
-    RefPtr<EventTarget> protect = this;
+    Ref<EventTarget> protect(*this);
 
     // Fire all listeners registered for this event. Don't fire listeners removed during event dispatch.
     // Also, don't fire event listeners added during event dispatch. Conveniently, all new event listeners will be added
index c18e48b..8ff1cff 100644 (file)
@@ -2180,7 +2180,7 @@ bool Node::dispatchBeforeLoadEvent(const String& sourceURL)
     if (!document().hasListenerType(Document::BEFORELOAD_LISTENER))
         return true;
 
-    RefPtr<Node> protector(this);
+    Ref<Node> protect(*this);
     RefPtr<BeforeLoadEvent> beforeLoadEvent = BeforeLoadEvent::create(sourceURL);
     dispatchEvent(beforeLoadEvent.get());
     return !beforeLoadEvent->defaultPrevented();
index 75fdc6c..2fcac3f 100644 (file)
@@ -38,6 +38,7 @@
 #include "WorkerGlobalScope.h"
 #include "WorkerThread.h"
 #include <wtf/MainThread.h>
+#include <wtf/Ref.h>
 
 // FIXME: This is a layering violation.
 #include "JSDOMWindow.h"
@@ -123,7 +124,7 @@ void ScriptExecutionContext::processMessagePortMessagesSoon()
 
 void ScriptExecutionContext::dispatchMessagePortEvents()
 {
-    RefPtr<ScriptExecutionContext> protect(this);
+    Ref<ScriptExecutionContext> protect(*this);
 
     // Make a frozen copy.
     Vector<MessagePort*> ports;
index a5210e2..34c81d0 100644 (file)
@@ -34,6 +34,7 @@
 #include "InspectorInstrumentation.h"
 #include "RequestAnimationFrameCallback.h"
 #include "Settings.h"
+#include <wtf/Ref.h>
 
 #if USE(REQUEST_ANIMATION_FRAME_TIMER)
 #include <algorithm>
@@ -140,7 +141,7 @@ void ScriptedAnimationController::serviceScriptedAnimations(double monotonicTime
 
     // Invoking callbacks may detach elements from our document, which clears the document's
     // reference to us, so take a defensive reference.
-    RefPtr<ScriptedAnimationController> protector(this);
+    Ref<ScriptedAnimationController> protect(*this);
 
     for (size_t i = 0; i < callbacks.size(); ++i) {
         RequestAnimationFrameCallback* callback = callbacks[i].get();
index 50361ca..e006878 100644 (file)
@@ -37,6 +37,7 @@
 #include "RenderEmbeddedObject.h"
 #include "RenderWidget.h"
 #include "Settings.h"
+#include <wtf/Ref.h>
 
 namespace WebCore {
 
@@ -154,7 +155,7 @@ void HTMLEmbedElement::updateWidget(PluginCreationOption pluginCreationOption)
     Vector<String> paramValues;
     parametersForPlugin(paramNames, paramValues);
 
-    RefPtr<HTMLEmbedElement> protect(this); // Loading the plugin might remove us from the document.
+    Ref<HTMLEmbedElement> protect(*this); // Loading the plugin might remove us from the document.
     bool beforeLoadAllowedLoad = guardedDispatchBeforeLoadEvent(m_url);
     if (!beforeLoadAllowedLoad) {
         if (document().isPluginDocument()) {
index db20624..ede311b 100644 (file)
@@ -41,6 +41,7 @@
 #include "ScriptEventListener.h"
 #include "ValidationMessage.h"
 #include "ValidityState.h"
+#include <wtf/Ref.h>
 #include <wtf/Vector.h>
 
 namespace WebCore {
@@ -413,10 +414,10 @@ bool HTMLFormControlElement::checkValidity(Vector<RefPtr<FormAssociatedElement>
     if (!willValidate() || isValidFormControlElement())
         return true;
     // An event handler can deref this object.
-    RefPtr<HTMLFormControlElement> protector(this);
-    RefPtr<Document> originalDocument(&document());
+    Ref<HTMLFormControlElement> protect(*this);
+    Ref<Document> originalDocument(document());
     bool needsDefaultAction = dispatchEvent(Event::create(eventNames().invalidEvent, false, true));
-    if (needsDefaultAction && unhandledInvalidControls && inDocument() && originalDocument == &document())
+    if (needsDefaultAction && unhandledInvalidControls && inDocument() && &originalDocument.get() == &document())
         unhandledInvalidControls->append(this);
     return false;
 }
index 5c69a3b..d4e357c 100644 (file)
@@ -47,6 +47,7 @@
 #include "ScriptEventListener.h"
 #include "Settings.h"
 #include <limits>
+#include <wtf/Ref.h>
 
 using namespace std;
 
@@ -227,7 +228,7 @@ bool HTMLFormElement::validateInteractively(Event* event)
     // has !renderer()->needsLayout() assertion.
     document().updateLayoutIgnorePendingStylesheets();
 
-    RefPtr<HTMLFormElement> protector(this);
+    Ref<HTMLFormElement> protect(*this);
     // Focus on the first focusable control and show a validation message.
     for (unsigned i = 0; i < unhandledInvalidControls.size(); ++i) {
         FormAssociatedElement* unhandledAssociatedElement = unhandledInvalidControls[i].get();
@@ -595,7 +596,7 @@ bool HTMLFormElement::checkValidity()
 
 bool HTMLFormElement::checkInvalidControlsAndCollectUnhandled(Vector<RefPtr<FormAssociatedElement> >& unhandledInvalidControls)
 {
-    RefPtr<HTMLFormElement> protector(this);
+    Ref<HTMLFormElement> protect(*this);
     // Copy m_associatedElements because event handlers called from
     // HTMLFormControlElement::checkValidity() might change m_associatedElements.
     Vector<RefPtr<FormAssociatedElement> > elements;
index 2f9504f..8705cf3 100644 (file)
@@ -26,6 +26,7 @@
 #include "FrameLoader.h"
 #include "RenderPart.h"
 #include "ShadowRoot.h"
+#include <wtf/Ref.h>
 
 #if ENABLE(SVG)
 #include "ExceptionCode.h"
@@ -81,7 +82,7 @@ void HTMLFrameOwnerElement::disconnectContentFrame()
     // reach up into this document and then attempt to look back down. We should
     // see if this behavior is really needed as Gecko does not allow this.
     if (Frame* frame = contentFrame()) {
-        RefPtr<Frame> protect(frame);
+        Ref<Frame> protect(*frame);
         frame->loader().frameDetached();
         frame->disconnectOwnerElement();
     }
index 108aa01..3b0873b 100644 (file)
@@ -68,6 +68,7 @@
 #include "ScriptEventListener.h"
 #include "StyleResolver.h"
 #include <wtf/MathExtras.h>
+#include <wtf/Ref.h>
 
 #if ENABLE(INPUT_TYPE_COLOR)
 #include "ColorInputType.h"
@@ -1034,7 +1035,7 @@ void HTMLInputElement::setValue(const String& value, TextFieldEventBehavior even
     if (!m_inputType->canSetValue(value))
         return;
 
-    RefPtr<HTMLInputElement> protector(this);
+    Ref<HTMLInputElement> protect(*this);
     EventQueueScope scope;
     String sanitizedValue = sanitizeValue(value);
     bool valueChanged = sanitizedValue != this->value();
index cd375e3..06b38c8 100644 (file)
@@ -51,6 +51,7 @@
 #include "StyleInheritedData.h"
 #include "StyleResolveForDocument.h"
 #include "StyleSheetContents.h"
+#include <wtf/Ref.h>
 #include <wtf/StdLibExtras.h>
 
 namespace WebCore {
@@ -298,7 +299,7 @@ void HTMLLinkElement::setCSSStyleSheet(const String& href, const KURL& baseURL,
         return;
     }
     // Completing the sheet load may cause scripts to execute.
-    RefPtr<Node> protector(this);
+    Ref<HTMLLinkElement> protect(*this);
 
     CSSParserContext parserContext(&document(), baseURL, charset);
 
index b2b380c..b1f2ee4 100644 (file)
@@ -83,6 +83,7 @@
 #include <wtf/CurrentTime.h>
 #include <wtf/MathExtras.h>
 #include <wtf/NonCopyingSort.h>
+#include <wtf/Ref.h>
 #include <wtf/text/CString.h>
 
 #if USE(ACCELERATED_COMPOSITING)
@@ -708,7 +709,7 @@ void HTMLMediaElement::scheduleEvent(const AtomicString& eventName)
 
 void HTMLMediaElement::loadTimerFired(Timer<HTMLMediaElement>*)
 {
-    RefPtr<HTMLMediaElement> protect(this); // loadNextSourceChild may fire 'beforeload', which can make arbitrary DOM mutations.
+    Ref<HTMLMediaElement> protect(*this); // loadNextSourceChild may fire 'beforeload', which can make arbitrary DOM mutations.
 
 #if ENABLE(VIDEO_TRACK)
     if (RuntimeEnabledFeatures::webkitVideoTrackEnabled() && (m_pendingActionFlags & ConfigureTextTracks))
@@ -771,7 +772,7 @@ String HTMLMediaElement::canPlayType(const String& mimeType, const String& keySy
 
 void HTMLMediaElement::load()
 {
-    RefPtr<HTMLMediaElement> protect(this); // loadInternal may result in a 'beforeload' event, which can make arbitrary DOM mutations.
+    Ref<HTMLMediaElement> protect(*this); // loadInternal may result in a 'beforeload' event, which can make arbitrary DOM mutations.
     
     LOG(Media, "HTMLMediaElement::load()");
     
@@ -4308,7 +4309,7 @@ void HTMLMediaElement::setMediaPlayerProxy(WebMediaPlayerProxy* proxy)
 
 void HTMLMediaElement::getPluginProxyParams(KURL& url, Vector<String>& names, Vector<String>& values)
 {
-    RefPtr<HTMLMediaElement> protect(this); // selectNextSourceChild may fire 'beforeload', which can make arbitrary DOM mutations.
+    Ref<HTMLMediaElement> protect(*this); // selectNextSourceChild may fire 'beforeload', which can make arbitrary DOM mutations.
 
     Frame* frame = document().frame();
 
index 07d2b96..9481d5c 100644 (file)
@@ -52,6 +52,7 @@
 #include "Settings.h"
 #include "Text.h"
 #include "Widget.h"
+#include <wtf/Ref.h>
 
 namespace WebCore {
 
@@ -310,7 +311,7 @@ void HTMLObjectElement::updateWidget(PluginCreationOption pluginCreationOption)
         return;
     }
 
-    RefPtr<HTMLObjectElement> protect(this); // beforeload and plugin loading can make arbitrary DOM mutations.
+    Ref<HTMLObjectElement> protect(*this); // beforeload and plugin loading can make arbitrary DOM mutations.
     bool beforeLoadAllowedLoad = guardedDispatchBeforeLoadEvent(url);
     if (!renderer()) // Do not load the plugin if beforeload removed this element or its renderer.
         return;
index e95b4dd..7b46c77 100644 (file)
@@ -42,6 +42,7 @@
 #include "ScriptElement.h"
 #include "StyleResolver.h"
 #include "Text.h"
+#include <wtf/Ref.h>
 #include <wtf/Vector.h>
 #include <wtf/text/StringBuilder.h>
 
@@ -130,7 +131,7 @@ String HTMLOptionElement::text() const
 
 void HTMLOptionElement::setText(const String &text, ExceptionCode& ec)
 {
-    RefPtr<Node> protectFromMutationEvents(this);
+    Ref<HTMLOptionElement> protectFromMutationEvents(*this);
 
     // Changing the text causes a recalc of a select's items, which will reset the selected
     // index to the first item if the select is single selection with a menu list. We attempt to
index 8be457d..cccfb17 100644 (file)
@@ -30,6 +30,7 @@
 #include "HTMLNames.h"
 #include "ScriptEventListener.h"
 #include "Text.h"
+#include <wtf/Ref.h>
 
 namespace WebCore {
 
@@ -79,7 +80,7 @@ Node::InsertionNotificationRequest HTMLScriptElement::insertedInto(ContainerNode
 
 void HTMLScriptElement::setText(const String &value)
 {
-    RefPtr<Node> protectFromMutationEvents(this);
+    Ref<HTMLScriptElement> protectFromMutationEvents(*this);
 
     int numChildren = childNodeCount();
 
index edbddd2..f902610 100644 (file)
@@ -40,6 +40,7 @@
 #include "HTMLTableSectionElement.h"
 #include "RenderTable.h"
 #include "StylePropertySet.h"
+#include <wtf/Ref.h>
 
 namespace WebCore {
 
@@ -189,7 +190,7 @@ PassRefPtr<HTMLElement> HTMLTableElement::insertRow(int index, ExceptionCode& ec
         return 0;
     }
 
-    RefPtr<Node> protectFromMutationEvents(this);
+    Ref<HTMLTableElement> protectFromMutationEvents(*this);
 
     RefPtr<HTMLTableRowElement> lastRow = 0;
     RefPtr<HTMLTableRowElement> row = 0;
index 237d99b..a049304 100644 (file)
@@ -48,6 +48,7 @@
 #include "TextControlInnerElements.h"
 #include "TextIterator.h"
 #include "TextNodeTraversal.h"
+#include <wtf/Ref.h>
 #include <wtf/StdLibExtras.h>
 #include <wtf/text/StringBuilder.h>
 
@@ -406,7 +407,7 @@ String HTMLTextAreaElement::defaultValue() const
 
 void HTMLTextAreaElement::setDefaultValue(const String& defaultValue)
 {
-    RefPtr<Node> protectFromMutationEvents(this);
+    Ref<HTMLTextAreaElement> protectFromMutationEvents(*this);
 
     // To preserve comments, remove only the text nodes, then add a single text node.
     Vector<RefPtr<Text>> textNodes;
index b7071d6..3a733da 100644 (file)
@@ -29,6 +29,7 @@
 #include "StyleInheritedData.h"
 #include "Text.h"
 #include "TextNodeTraversal.h"
+#include <wtf/Ref.h>
 #include <wtf/text/StringBuilder.h>
 
 namespace WebCore {
@@ -90,7 +91,7 @@ StringWithDirection HTMLTitleElement::textWithDirection()
 
 void HTMLTitleElement::setText(const String &value)
 {
-    RefPtr<Node> protectFromMutationEvents(this);
+    Ref<HTMLTitleElement> protectFromMutationEvents(*this);
 
     int numChildren = childNodeCount();
     
index d3c9dc4..b0e08d7 100644 (file)
@@ -47,6 +47,7 @@
 #include "NestingLevelIncrementer.h"
 #include "Settings.h"
 #include <wtf/Functional.h>
+#include <wtf/Ref.h>
 
 namespace WebCore {
 
@@ -181,7 +182,7 @@ void HTMLDocumentParser::prepareToStopParsing()
 
     // pumpTokenizer can cause this parser to be detached from the Document,
     // but we need to ensure it isn't deleted yet.
-    RefPtr<HTMLDocumentParser> protect(this);
+    Ref<HTMLDocumentParser> protect(*this);
 
     // NOTE: This pump should only ever emit buffered character tokens,
     // so ForceSynchronous vs. AllowYield should be meaningless.
@@ -245,7 +246,7 @@ void HTMLDocumentParser::resumeParsingAfterYield()
 {
     // pumpTokenizer can cause this parser to be detached from the Document,
     // but we need to ensure it isn't deleted yet.
-    RefPtr<HTMLDocumentParser> protect(this);
+    Ref<HTMLDocumentParser> protect(*this);
 
 #if ENABLE(THREADED_HTML_PARSER)
     if (m_haveBackgroundParser) {
@@ -320,7 +321,7 @@ void HTMLDocumentParser::didReceiveParsedChunkFromBackgroundParser(PassOwnPtr<Pa
 
     // processParsedChunkFromBackgroundParser can cause this parser to be detached from the Document,
     // but we need to ensure it isn't deleted yet.
-    RefPtr<HTMLDocumentParser> protect(this);
+    Ref<HTMLDocumentParser> protect(*this);
 
     InspectorInstrumentationCookie cookie = InspectorInstrumentation::willWriteHTML(document(), lineNumber().zeroBasedInt());
 
@@ -629,7 +630,7 @@ void HTMLDocumentParser::insert(const SegmentedString& source)
 
     // pumpTokenizer can cause this parser to be detached from the Document,
     // but we need to ensure it isn't deleted yet.
-    RefPtr<HTMLDocumentParser> protect(this);
+    Ref<HTMLDocumentParser> protect(*this);
 
 #if ENABLE(THREADED_HTML_PARSER)
     if (!m_tokenizer) {
@@ -720,7 +721,7 @@ void HTMLDocumentParser::append(PassRefPtr<StringImpl> inputSource)
 
     // pumpTokenizer can cause this parser to be detached from the Document,
     // but we need to ensure it isn't deleted yet.
-    RefPtr<HTMLDocumentParser> protect(this);
+    Ref<HTMLDocumentParser> protect(*this);
     String source(inputSource);
 
     if (m_preloadScanner) {
@@ -893,7 +894,7 @@ void HTMLDocumentParser::resumeParsingAfterScriptExecution()
         ASSERT(!m_lastChunkBeforeScript);
         // processParsedChunkFromBackgroundParser can cause this parser to be detached from the Document,
         // but we need to ensure it isn't deleted yet.
-        RefPtr<HTMLDocumentParser> protect(this);
+        Ref<HTMLDocumentParser> protect(*this);
         pumpPendingSpeculations();
         return;
     }
@@ -929,7 +930,7 @@ void HTMLDocumentParser::notifyFinished(CachedResource* cachedResource)
 {
     // pumpTokenizer can cause this parser to be detached from the Document,
     // but we need to ensure it isn't deleted yet.
-    RefPtr<HTMLDocumentParser> protect(this);
+    Ref<HTMLDocumentParser> protect(*this);
 
     ASSERT(m_scriptRunner);
     ASSERT(!isExecutingScript());
@@ -956,7 +957,7 @@ void HTMLDocumentParser::executeScriptsWaitingForStylesheets()
 
     // pumpTokenizer can cause this parser to be detached from the Document,
     // but we need to ensure it isn't deleted yet.
-    RefPtr<HTMLDocumentParser> protect(this);
+    Ref<HTMLDocumentParser> protect(*this);
     m_scriptRunner->executeScriptsWaitingForStylesheets();
     if (!isWaitingForScripts())
         resumeParsingAfterScriptExecution();
index eb77703..a4de7c9 100644 (file)
@@ -37,6 +37,7 @@
 #include "RenderBox.h"
 #include "ScrollbarTheme.h"
 #include "WheelEvent.h"
+#include <wtf/Ref.h>
 
 namespace WebCore {
 
@@ -97,7 +98,7 @@ void SpinButtonElement::defaultEventHandler(Event* event)
             // The following functions of HTMLInputElement may run JavaScript
             // code which detaches this shadow node. We need to take a reference
             // and check renderer() after such function calls.
-            RefPtr<Node> protector(this);
+            Ref<SpinButtonElement> protect(*this);
             if (m_spinButtonOwner)
                 m_spinButtonOwner->focusAndSelectSpinButtonOwner();
             if (renderer()) {
index a5a789e..3ba72b9 100644 (file)
@@ -42,6 +42,7 @@
 #include "SpeechInputEvent.h"
 #include "TextEvent.h"
 #include "TextEventInputType.h"
+#include <wtf/Ref.h>
 
 namespace WebCore {
 
@@ -308,7 +309,7 @@ void InputFieldSpeechButtonElement::defaultEventHandler(Event* event)
                 m_capturing = true;
             }
         }
-        RefPtr<InputFieldSpeechButtonElement> holdRefButton(this);
+        Ref<InputFieldSpeechButtonElement> protect(*this);
         input->focus();
         input->select();
         event->setDefaultHandled();
@@ -385,7 +386,7 @@ void InputFieldSpeechButtonElement::setRecognitionResult(int, const SpeechInputR
     if (!input || input->isDisabledOrReadOnly())
         return;
 
-    RefPtr<InputFieldSpeechButtonElement> holdRefButton(this);
+    Ref<InputFieldSpeechButtonElement> protect(*this);
     if (document().domWindow()) {
         // Call selectionChanged, causing the element to cache the selection,
         // so that the text event inserts the text in this element even if
index 40ab585..86d4e82 100644 (file)
@@ -61,6 +61,7 @@
 
 #include <wtf/CurrentTime.h>
 #include <wtf/HashSet.h>
+#include <wtf/Ref.h>
 #include <wtf/Vector.h>
 #include <wtf/text/CString.h>
 #include <wtf/text/StringConcatenate.h>
@@ -747,7 +748,7 @@ void InspectorCSSAgent::regionLayoutUpdated(WebKitNamedFlow* namedFlow, int docu
         return;
 
     ErrorString errorString;
-    RefPtr<WebKitNamedFlow> protector(namedFlow);
+    Ref<WebKitNamedFlow> protect(*namedFlow);
 
     m_frontend->regionLayoutUpdated(buildObjectForNamedFlow(&errorString, namedFlow, documentNodeId));
 }
@@ -769,7 +770,7 @@ void InspectorCSSAgent::regionOversetChanged(WebKitNamedFlow* namedFlow, int doc
         return;
     
     ErrorString errorString;
-    RefPtr<WebKitNamedFlow> protector(namedFlow);
+    Ref<WebKitNamedFlow> protect(*namedFlow);
     
     m_frontend->regionOversetChanged(buildObjectForNamedFlow(&errorString, namedFlow, documentNodeId));
 }
index 8df25ae..a6d9a1a 100644 (file)
@@ -62,6 +62,7 @@
 #include "SubresourceLoader.h"
 #include "TextResourceDecoder.h"
 #include <wtf/Assertions.h>
+#include <wtf/Ref.h>
 #include <wtf/text/CString.h>
 #include <wtf/text/WTFString.h>
 #include <wtf/unicode/Unicode.h>
@@ -249,7 +250,7 @@ void DocumentLoader::mainReceivedError(const ResourceError& error)
 void DocumentLoader::stopLoading()
 {
     RefPtr<Frame> protectFrame(m_frame);
-    RefPtr<DocumentLoader> protectLoader(this);
+    Ref<DocumentLoader> protectLoader(*this);
 
     // In some rare cases, calling FrameLoader::stopLoading could cause isLoading() to return false.
     // (This can happen when there's a single XMLHttpRequest currently loading and stopLoading causes it
@@ -361,7 +362,7 @@ void DocumentLoader::finishedLoading(double finishTime)
     ASSERT(!m_frame->page()->defersLoading() || InspectorInstrumentation::isDebuggerPaused(m_frame));
 #endif
 
-    RefPtr<DocumentLoader> protect(this);
+    Ref<DocumentLoader> protect(*this);
 
     if (m_identifierForLoadWithoutResourceLoader) {
         // A didFinishLoading delegate might try to cancel the load (despite it
@@ -561,7 +562,7 @@ void DocumentLoader::continueAfterNavigationPolicy(const ResourceRequest&, bool
 void DocumentLoader::responseReceived(CachedResource* resource, const ResourceResponse& response)
 {
     ASSERT_UNUSED(resource, m_mainResource == resource);
-    RefPtr<DocumentLoader> protect(this);
+    Ref<DocumentLoader> protect(*this);
     bool willLoadFallback = m_applicationCacheHost->maybeLoadFallbackForMainResponse(request(), response);
 
     // The memory cache doesn't understand the application cache or its caching rules. So if a main resource is served
@@ -731,7 +732,7 @@ void DocumentLoader::commitLoad(const char* data, int length)
     // Both unloading the old page and parsing the new page may execute JavaScript which destroys the datasource
     // by starting a new load, so retain temporarily.
     RefPtr<Frame> protectFrame(m_frame);
-    RefPtr<DocumentLoader> protectLoader(this);
+    Ref<DocumentLoader> protectLoader(*this);
 
     commitIfReady();
     FrameLoader* frameLoader = DocumentLoader::frameLoader();
@@ -914,7 +915,7 @@ void DocumentLoader::detachFromFrame()
 {
     ASSERT(m_frame);
     RefPtr<Frame> protectFrame(m_frame);
-    RefPtr<DocumentLoader> protectLoader(this);
+    Ref<DocumentLoader> protectLoader(*this);
 
     // It never makes sense to have a document loader that is detached from its
     // frame have any loads active, so go ahead and kill all the loads.
@@ -1419,7 +1420,7 @@ void DocumentLoader::startLoadingMainResource()
 
 void DocumentLoader::cancelMainResourceLoad(const ResourceError& resourceError)
 {
-    RefPtr<DocumentLoader> protect(this);
+    Ref<DocumentLoader> protect(*this);
     ResourceError error = resourceError.isNull() ? frameLoader()->cancelledError(m_request) : resourceError;
 
     m_dataLoadTimer.stop();
index c924853..3fe56f3 100644 (file)
@@ -48,6 +48,7 @@
 #include "SubresourceLoader.h"
 #include "ThreadableLoaderClient.h"
 #include <wtf/Assertions.h>
+#include <wtf/Ref.h>
 
 #if ENABLE(INSPECTOR)
 #include "ProgressTracker.h"
@@ -144,7 +145,7 @@ DocumentThreadableLoader::~DocumentThreadableLoader()
 
 void DocumentThreadableLoader::cancel()
 {
-    RefPtr<DocumentThreadableLoader> protect(this);
+    Ref<DocumentThreadableLoader> protect(*this);
 
     // Cancel can re-enter and m_resource might be null here as a result.
     if (m_client && m_resource) {
@@ -180,7 +181,7 @@ void DocumentThreadableLoader::redirectReceived(CachedResource* resource, Resour
     ASSERT(m_client);
     ASSERT_UNUSED(resource, resource == m_resource);
 
-    RefPtr<DocumentThreadableLoader> protect(this);
+    Ref<DocumentThreadableLoader> protect(*this);
     // Allow same origin requests to continue after allowing clients to audit the redirect.
     if (isAllowedRedirect(request.url())) {
         if (m_client->isDocumentThreadableLoaderClient())
index 4631c78..1ac1474 100644 (file)
@@ -46,6 +46,7 @@
 #include "Settings.h"
 #include "SinkDocument.h"
 #include "TextResourceDecoder.h"
+#include <wtf/Ref.h>
 
 namespace WebCore {
 
@@ -233,7 +234,7 @@ void DocumentWriter::end()
     // http://bugs.webkit.org/show_bug.cgi?id=10854
     // The frame's last ref may be removed and it can be deleted by checkCompleted(), 
     // so we'll add a protective refcount
-    RefPtr<Frame> protector(m_frame);
+    Ref<Frame> protect(*m_frame);
 
     if (!m_parser)
         return;
index 36d88d4..ae050bd 100644 (file)
 #include "WindowFeatures.h"
 #include "XMLDocumentParser.h"
 #include <wtf/CurrentTime.h>
+#include <wtf/Ref.h>
 #include <wtf/StdLibExtras.h>
 #include <wtf/text/CString.h>
 #include <wtf/text/WTFString.h>
@@ -303,7 +304,7 @@ void FrameLoader::urlSelected(const FrameLoadRequest& passedRequest, PassRefPtr<
 {
     ASSERT(!m_suppressOpenerInNewFrame);
 
-    RefPtr<Frame> protect(&m_frame);
+    Ref<Frame> protect(m_frame);
     FrameLoadRequest frameRequest(passedRequest);
 
     if (m_frame.script().executeIfJavaScriptURL(frameRequest.resourceRequest().url(), shouldReplaceDocumentIfJavaScriptURL))
@@ -476,7 +477,7 @@ void FrameLoader::stop()
 {
     // http://bugs.webkit.org/show_bug.cgi?id=10854
     // The frame's last ref may be removed and it will be deleted by checkCompleted().
-    RefPtr<Frame> protector(&m_frame);
+    Ref<Frame> protect(m_frame);
 
     if (DocumentParser* parser = m_frame.document()->parser()) {
         parser->stopParsing();
@@ -757,7 +758,7 @@ bool FrameLoader::allAncestorsAreComplete() const
 
 void FrameLoader::checkCompleted()
 {
-    RefPtr<Frame> protect(&m_frame);
+    Ref<Frame> protect(m_frame);
     m_shouldCallCheckCompleted = false;
 
     if (m_frame.view())
@@ -802,7 +803,7 @@ void FrameLoader::checkCompleted()
 
 void FrameLoader::checkTimerFired(Timer<FrameLoader>*)
 {
-    RefPtr<Frame> protect(&m_frame);
+    Ref<Frame> protect(m_frame);
 
     if (Page* page = m_frame.page()) {
         if (page->defersLoading())
@@ -1089,7 +1090,7 @@ bool FrameLoader::isComplete() const
 
 void FrameLoader::completed()
 {
-    RefPtr<Frame> protect(&m_frame);
+    Ref<Frame> protect(m_frame);
 
     for (Frame* descendant = m_frame.tree().traverseNext(&m_frame); descendant; descendant = descendant->tree().traverseNext(&m_frame))
         descendant->navigationScheduler().startTimer();
@@ -1154,7 +1155,7 @@ void FrameLoader::loadFrameRequest(const FrameLoadRequest& request, bool lockHis
     PassRefPtr<Event> event, PassRefPtr<FormState> formState, ShouldSendReferrer shouldSendReferrer)
 {    
     // Protect frame from getting blown away inside dispatchBeforeLoadEvent in loadWithDocumentLoader.
-    RefPtr<Frame> protect(&m_frame);
+    Ref<Frame> protect(m_frame);
 
     KURL url = request.resourceRequest().url();
 
@@ -1365,7 +1366,7 @@ void FrameLoader::load(DocumentLoader* newDocumentLoader)
 void FrameLoader::loadWithDocumentLoader(DocumentLoader* loader, FrameLoadType type, PassRefPtr<FormState> prpFormState)
 {
     // Retain because dispatchBeforeLoadEvent may release the last reference to it.
-    RefPtr<Frame> protect(&m_frame);
+    Ref<Frame> protect(m_frame);
 
     ASSERT(m_client.hasWebView());
 
@@ -1562,7 +1563,7 @@ void FrameLoader::stopAllLoaders(ClearProvisionalItemPolicy clearProvisionalItem
     
     // Calling stopLoading() on the provisional document loader can blow away
     // the frame from underneath.
-    RefPtr<Frame> protect(&m_frame);
+    Ref<Frame> protect(m_frame);
 
     m_inStopAllLoaders = true;
 
@@ -1700,7 +1701,7 @@ void FrameLoader::commitProvisionalLoad()
 {
     RefPtr<CachedPage> cachedPage = m_loadingFromCachedPage ? pageCache()->get(history().provisionalItem()) : 0;
     RefPtr<DocumentLoader> pdl = m_provisionalDocumentLoader;
-    RefPtr<Frame> protect(&m_frame);
+    Ref<Frame> protect(m_frame);
 
     LOG(PageCache, "WebCoreLoading %s: About to commit provisional load from previous URL '%s' to new URL '%s'", m_frame.tree().uniqueName().string().utf8().data(),
         m_frame.document() ? m_frame.document()->url().stringCenterEllipsizedToLength().utf8().data() : "",
@@ -2614,7 +2615,7 @@ const ResourceRequest& FrameLoader::originalRequest() const
 void FrameLoader::receivedMainResourceError(const ResourceError& error)
 {
     // Retain because the stop may release the last reference to it.
-    RefPtr<Frame> protect(&m_frame);
+    Ref<Frame> protect(m_frame);
 
     RefPtr<DocumentLoader> loader = activeDocumentLoader();
     // FIXME: Don't want to do this if an entirely new load is going, so should check
index ce2fca1..80877c1 100644 (file)
@@ -50,6 +50,7 @@
 #include "ScriptController.h"
 #include "UserGestureIndicator.h"
 #include <wtf/CurrentTime.h>
+#include <wtf/Ref.h>
 
 namespace WebCore {
 
@@ -420,7 +421,7 @@ void NavigationScheduler::timerFired(Timer<NavigationScheduler>*)
         return;
     }
 
-    RefPtr<Frame> protect(m_frame);
+    Ref<Frame> protect(*m_frame);
 
     OwnPtr<ScheduledNavigation> redirect(m_redirect.release());
     redirect->fire(m_frame);
@@ -431,7 +432,7 @@ void NavigationScheduler::schedule(PassOwnPtr<ScheduledNavigation> redirect)
 {
     ASSERT(m_frame->page());
 
-    RefPtr<Frame> protect(m_frame);
+    Ref<Frame> protect(*m_frame);
 
     // If a redirect was scheduled during a load, then stop the current load.
     // Otherwise when the current load transitions from a provisional to a 
index 9525bae..7a7cf36 100644 (file)
@@ -32,6 +32,7 @@
 #include "DocumentLoader.h"
 #include "FrameLoader.h"
 #include "FrameLoaderClient.h"
+#include <wtf/Ref.h>
 
 namespace WebCore {
 
@@ -68,7 +69,7 @@ void NetscapePlugInStreamLoader::releaseResources()
 
 void NetscapePlugInStreamLoader::didReceiveResponse(const ResourceResponse& response)
 {
-    RefPtr<NetscapePlugInStreamLoader> protect(this);
+    Ref<NetscapePlugInStreamLoader> protect(*this);
 
     m_client->didReceiveResponse(this, response);
 
@@ -105,7 +106,7 @@ void NetscapePlugInStreamLoader::didReceiveBuffer(PassRefPtr<SharedBuffer> buffe
 
 void NetscapePlugInStreamLoader::didReceiveDataOrBuffer(const char* data, int length, PassRefPtr<SharedBuffer> buffer, long long encodedDataLength, DataPayloadType dataPayloadType)
 {
-    RefPtr<NetscapePlugInStreamLoader> protect(this);
+    Ref<NetscapePlugInStreamLoader> protect(*this);
     
     m_client->didReceiveData(this, buffer ? buffer->data() : data, buffer ? buffer->size() : length);
 
@@ -114,7 +115,7 @@ void NetscapePlugInStreamLoader::didReceiveDataOrBuffer(const char* data, int le
 
 void NetscapePlugInStreamLoader::didFinishLoading(double finishTime)
 {
-    RefPtr<NetscapePlugInStreamLoader> protect(this);
+    Ref<NetscapePlugInStreamLoader> protect(*this);
 
     m_documentLoader->removePlugInStreamLoader(this);
     m_client->didFinishLoading(this);
@@ -123,7 +124,7 @@ void NetscapePlugInStreamLoader::didFinishLoading(double finishTime)
 
 void NetscapePlugInStreamLoader::didFail(const ResourceError& error)
 {
-    RefPtr<NetscapePlugInStreamLoader> protect(this);
+    Ref<NetscapePlugInStreamLoader> protect(*this);
 
     m_documentLoader->removePlugInStreamLoader(this);
     m_client->didFail(this, error);
index 7916375..5105ab5 100644 (file)
@@ -49,6 +49,7 @@
 #include "SecurityOrigin.h"
 #include "Settings.h"
 #include "SharedBuffer.h"
+#include <wtf/Ref.h>
 
 namespace WebCore {
 
@@ -77,7 +78,7 @@ void ResourceLoader::releaseResources()
     // deallocated and release the last reference to this object.
     // We need to retain to avoid accessing the object after it
     // has been deallocated and also to avoid reentering this method.
-    RefPtr<ResourceLoader> protector(this);
+    Ref<ResourceLoader> protect(*this);
 
     m_frame = 0;
     m_documentLoader = 0;
@@ -224,7 +225,7 @@ void ResourceLoader::willSendRequest(ResourceRequest& request, const ResourceRes
 {
     // Protect this in this delegate method since the additional processing can do
     // anything including possibly derefing this; one example of this is Radar 3266216.
-    RefPtr<ResourceLoader> protector(this);
+    Ref<ResourceLoader> protect(*this);
 
     ASSERT(!m_reachedTerminalState);
 
@@ -265,7 +266,7 @@ void ResourceLoader::didReceiveResponse(const ResourceResponse& r)
 
     // Protect this in this delegate method since the additional processing can do
     // anything including possibly derefing this; one example of this is Radar 3266216.
-    RefPtr<ResourceLoader> protector(this);
+    Ref<ResourceLoader> protect(*this);
 
     m_response = r;
 
@@ -299,7 +300,7 @@ void ResourceLoader::didReceiveDataOrBuffer(const char* data, int length, PassRe
 
     // Protect this in this delegate method since the additional processing can do
     // anything including possibly derefing this; one example of this is Radar 3266216.
-    RefPtr<ResourceLoader> protector(this);
+    Ref<ResourceLoader> protect(*this);
     RefPtr<SharedBuffer> buffer = prpBuffer;
 
     addDataOrBuffer(data, length, buffer.get(), dataPayloadType);
@@ -354,7 +355,7 @@ void ResourceLoader::didFail(const ResourceError& error)
 
     // Protect this in this delegate method since the additional processing can do
     // anything including possibly derefing this; one example of this is Radar 3266216.
-    RefPtr<ResourceLoader> protector(this);
+    Ref<ResourceLoader> protect(*this);
 
     cleanupForError(error);
     releaseResources();
@@ -395,7 +396,7 @@ void ResourceLoader::cancel(const ResourceError& error)
     
     // willCancel() and didFailToLoad() both call out to clients that might do 
     // something causing the last reference to this object to go away.
-    RefPtr<ResourceLoader> protector(this);
+    Ref<ResourceLoader> protect(*this);
     
     // If we re-enter cancel() from inside willCancel(), we want to pick up from where we left 
     // off without re-running willCancel()
@@ -510,7 +511,7 @@ bool ResourceLoader::shouldUseCredentialStorage()
     if (m_options.allowCredentials == DoNotAllowStoredCredentials)
         return false;
     
-    RefPtr<ResourceLoader> protector(this);
+    Ref<ResourceLoader> protect(*this);
     return frameLoader()->client().shouldUseCredentialStorage(documentLoader(), identifier());
 }
 
@@ -520,7 +521,7 @@ void ResourceLoader::didReceiveAuthenticationChallenge(const AuthenticationChall
 
     // Protect this in this delegate method since the additional processing can do
     // anything including possibly derefing this; one example of this is Radar 3266216.
-    RefPtr<ResourceLoader> protector(this);
+    Ref<ResourceLoader> protect(*this);
 
     if (m_options.allowCredentials == AllowStoredCredentials) {
         if (m_options.clientCredentialPolicy == AskClientForAllCredentials || (m_options.clientCredentialPolicy == DoNotAskClientForCrossOriginCredentials && m_frame->document()->securityOrigin()->canRequest(originalRequest().url()))) {
@@ -542,14 +543,14 @@ void ResourceLoader::didCancelAuthenticationChallenge(const AuthenticationChalle
 {
     // Protect this in this delegate method since the additional processing can do
     // anything including possibly derefing this; one example of this is Radar 3266216.
-    RefPtr<ResourceLoader> protector(this);
+    Ref<ResourceLoader> protect(*this);
     frameLoader()->notifier()->didCancelAuthenticationChallenge(this, challenge);
 }
 
 #if USE(PROTECTION_SPACE_AUTH_CALLBACK)
 bool ResourceLoader::canAuthenticateAgainstProtectionSpace(const ProtectionSpace& protectionSpace)
 {
-    RefPtr<ResourceLoader> protector(this);
+    Ref<ResourceLoader> protect(*this);
     return frameLoader()->client().canAuthenticateAgainstProtectionSpace(documentLoader(), identifier(), protectionSpace);
 }
 #endif
index fafd6e3..e077bfa 100644 (file)
@@ -39,6 +39,7 @@
 #include "Page.h"
 #include "PageActivityAssertionToken.h"
 #include "ResourceBuffer.h"
+#include <wtf/Ref.h>
 #include <wtf/RefCountedLeakCounter.h>
 #include <wtf/StdLibExtras.h>
 #include <wtf/text/CString.h>
@@ -123,7 +124,7 @@ void SubresourceLoader::willSendRequest(ResourceRequest& newRequest, const Resou
 {
     // Store the previous URL because the call to ResourceLoader::willSendRequest will modify it.
     KURL previousURL = request().url();
-    RefPtr<SubresourceLoader> protect(this);
+    Ref<SubresourceLoader> protect(*this);
 
     ASSERT(!newRequest.isNull());
     if (!redirectResponse.isNull()) {
@@ -158,7 +159,7 @@ void SubresourceLoader::willSendRequest(ResourceRequest& newRequest, const Resou
 void SubresourceLoader::didSendData(unsigned long long bytesSent, unsigned long long totalBytesToBeSent)
 {
     ASSERT(m_state == Initialized);
-    RefPtr<SubresourceLoader> protect(this);
+    Ref<SubresourceLoader> protect(*this);
     m_resource->didSendData(bytesSent, totalBytesToBeSent);
 }
 
@@ -169,7 +170,7 @@ void SubresourceLoader::didReceiveResponse(const ResourceResponse& response)
 
     // Reference the object in this method since the additional processing can do
     // anything including removing the last reference to this object; one example of this is 3266216.
-    RefPtr<SubresourceLoader> protect(this);
+    Ref<SubresourceLoader> protect(*this);
 
     if (m_resource->resourceToRevalidate()) {
         if (response.httpStatusCode() == 304) {
@@ -240,7 +241,7 @@ void SubresourceLoader::didReceiveDataOrBuffer(const char* data, int length, Pas
     ASSERT(m_state == Initialized);
     // Reference the object in this method since the additional processing can do
     // anything including removing the last reference to this object; one example of this is 3266216.
-    RefPtr<SubresourceLoader> protect(this);
+    Ref<SubresourceLoader> protect(*this);
     RefPtr<SharedBuffer> buffer = prpBuffer;
     
     ResourceLoader::didReceiveDataOrBuffer(data, length, buffer, encodedDataLength, dataPayloadType);
@@ -274,7 +275,7 @@ void SubresourceLoader::didFinishLoading(double finishTime)
     ASSERT(!m_resource->errorOccurred());
     LOG(ResourceLoading, "Received '%s'.", m_resource->url().string().latin1().data());
 
-    RefPtr<SubresourceLoader> protect(this);
+    Ref<SubresourceLoader> protect(*this);
     CachedResourceHandle<CachedResource> protectResource(m_resource);
     m_state = Finishing;
     m_activityAssertion.clear();
@@ -299,7 +300,7 @@ void SubresourceLoader::didFail(const ResourceError& error)
     ASSERT(!reachedTerminalState());
     LOG(ResourceLoading, "Failed to load '%s'.\n", m_resource->url().string().latin1().data());
 
-    RefPtr<SubresourceLoader> protect(this);
+    Ref<SubresourceLoader> protect(*this);
     CachedResourceHandle<CachedResource> protectResource(m_resource);
     m_state = Finishing;
     m_activityAssertion.clear();
@@ -323,7 +324,7 @@ void SubresourceLoader::willCancel(const ResourceError& error)
     ASSERT(!reachedTerminalState());
     LOG(ResourceLoading, "Cancelled load of '%s'.\n", m_resource->url().string().latin1().data());
 
-    RefPtr<SubresourceLoader> protect(this);
+    Ref<SubresourceLoader> protect(*this);
     m_state = Finishing;
     m_activityAssertion.clear();
     if (m_resource->resourceToRevalidate())
index 569a2b9..29fd9f2 100644 (file)
@@ -25,6 +25,8 @@
 #include "config.h"
 #include "SubresourceLoader.h"
 
+#include <wtf/Ref.h>
+
 namespace WebCore {
 
 #if USE(NETWORK_CFDATA_ARRAY_CALLBACK)
@@ -32,7 +34,7 @@ void SubresourceLoader::didReceiveDataArray(CFArrayRef dataArray)
 {
     // Reference the object in this method since the additional processing can do
     // anything including removing the last reference to this object; one example of this is 3266216.
-    RefPtr<SubresourceLoader> protect(this);
+    Ref<SubresourceLoader> protect(*this);
 
     ResourceLoader::didReceiveDataArray(dataArray);
 
index 5ffaff4..1e4cc49 100644 (file)
 #include <wtf/CurrentTime.h>
 #include <wtf/MainThread.h>
 #include <wtf/MathExtras.h>
+#include <wtf/Ref.h>
 #include <wtf/text/Base64.h>
 #include <wtf/text/WTFString.h>
 
@@ -1718,7 +1719,7 @@ void DOMWindow::dispatchLoadEvent()
 
 bool DOMWindow::dispatchEvent(PassRefPtr<Event> prpEvent, PassRefPtr<EventTarget> prpTarget)
 {
-    RefPtr<EventTarget> protect = this;
+    Ref<EventTarget> protect(*this);
     RefPtr<Event> event = prpEvent;
 
     event->setTarget(prpTarget ? prpTarget : this);
index c25be8c..32bf04f 100644 (file)
@@ -31,6 +31,7 @@
 #include "Frame.h"
 #include "FrameLoader.h"
 #include "FrameLoaderClient.h"
+#include <wtf/Ref.h>
 
 namespace WebCore {
 
@@ -47,7 +48,7 @@ void DOMWindowExtension::disconnectFrameForPageCache()
 {
     // Calling out to the client might result in this DOMWindowExtension being destroyed
     // while there is still work to do.
-    RefPtr<DOMWindowExtension> protector = this;
+    Ref<DOMWindowExtension> protect(*this);
     
     Frame* frame = this->frame();
     frame->loader().client().dispatchWillDisconnectDOMWindowExtensionFromGlobalObject(this);
@@ -73,8 +74,8 @@ void DOMWindowExtension::willDestroyGlobalObjectInCachedFrame()
 
     // Calling out to the client might result in this DOMWindowExtension being destroyed
     // while there is still work to do.
-    RefPtr<DOMWindowExtension> protector = this;
-    
+    Ref<DOMWindowExtension> protect(*this);
+
     m_disconnectedFrame->loader().client().dispatchWillDestroyGlobalObjectForDOMWindowExtension(this);
     m_disconnectedFrame = 0;
 
@@ -87,7 +88,7 @@ void DOMWindowExtension::willDestroyGlobalObjectInFrame()
 
     // Calling out to the client might result in this DOMWindowExtension being destroyed
     // while there is still work to do.
-    RefPtr<DOMWindowExtension> protector = this;
+    Ref<DOMWindowExtension> protect(*this);
 
     if (!m_wasDetached) {
         Frame* frame = this->frame();
@@ -105,7 +106,7 @@ void DOMWindowExtension::willDetachGlobalObjectFromFrame()
 
     // Calling out to the client might result in this DOMWindowExtension being destroyed
     // while there is still work to do.
-    RefPtr<DOMWindowExtension> protector = this;
+    Ref<DOMWindowExtension> protect(*this);
 
     Frame* frame = this->frame();
     ASSERT(frame);
index bc930fb..59176d6 100644 (file)
@@ -61,6 +61,7 @@
 #include "Widget.h"
 #include "htmlediting.h" // For firstPositionInOrBeforeNode
 #include <limits>
+#include <wtf/Ref.h>
 
 namespace WebCore {
 
@@ -631,7 +632,7 @@ bool FocusController::setFocusedElement(Element* element, PassRefPtr<Frame> newF
     }
     setFocusedFrame(newFocusedFrame);
 
-    RefPtr<Element> protect(element);
+    Ref<Element> protect(*element);
     if (newDocument) {
         bool successfullyFocused = newDocument->setFocusedElement(element, direction);
         if (!successfullyFocused)
index bffeab0..8f2b261 100644 (file)
@@ -78,6 +78,7 @@
 #include "TextStream.h"
 
 #include <wtf/CurrentTime.h>
+#include <wtf/Ref.h>
 #include <wtf/TemporaryChange.h>
 
 #if USE(ACCELERATED_COMPOSITING)
@@ -1115,7 +1116,7 @@ void FrameView::layout(bool allowSubtree)
         return;
 
     // Protect the view from being deleted during layout (in recalcStyle)
-    RefPtr<FrameView> protector(this);
+    Ref<FrameView> protect(*this);
 
     // Every scroll that happens during layout is programmatic.
     TemporaryChange<bool> changeInProgrammaticScroll(m_inProgrammaticScroll, true);
@@ -1183,7 +1184,7 @@ void FrameView::layout(bool allowSubtree)
 
         // If there is only one ref to this view left, then its going to be destroyed as soon as we exit, 
         // so there's no point to continuing to layout
-        if (protector->hasOneRef())
+        if (hasOneRef())
             return;
 
         root = subtree ? m_layoutRoot : document->renderer();
@@ -2759,7 +2760,7 @@ void FrameView::performPostLayoutTasks()
     
     // layout() protects FrameView, but it still can get destroyed when updateWidgets()
     // is called through the post layout timer.
-    RefPtr<FrameView> protector(this);
+    Ref<FrameView> protect(*this);
     for (unsigned i = 0; i < maxUpdateWidgetsIterations; i++) {
         if (updateWidgets())
             break;
index 52fb02c..b4ecbb3 100644 (file)
@@ -42,6 +42,7 @@
 #include "UnitBezier.h"
 #include <algorithm>
 #include <wtf/CurrentTime.h>
+#include <wtf/Ref.h>
 
 using namespace std;
 
@@ -453,8 +454,8 @@ void AnimationBase::fireAnimationEventsIfNeeded()
     // during an animation callback that might get called. Since the owner is a CompositeAnimation
     // and it ref counts this object, we will keep a ref to that instead. That way the AnimationBase
     // can still access the resources of its CompositeAnimation as needed.
-    RefPtr<AnimationBase> protector(this);
-    RefPtr<CompositeAnimation> compProtector(m_compAnim);
+    Ref<AnimationBase> protect(*this);
+    Ref<CompositeAnimation> protectCompositeAnimation(*m_compAnim);
     
     // Check for start timeout
     if (m_animState == AnimationStateStartWaitTimer) {
index 423d147..912d07f 100644 (file)
@@ -30,6 +30,7 @@
 #include "DisplayRefreshMonitor.h"
 
 #include <wtf/CurrentTime.h>
+#include <wtf/Ref.h>
 
 namespace WebCore {
 
@@ -105,7 +106,7 @@ void DisplayRefreshMonitor::displayDidRefresh()
 
     // The call back can cause all our clients to be unregistered, so we need to protect
     // against deletion until the end of the method.
-    RefPtr<DisplayRefreshMonitor> protector(this);
+    Ref<DisplayRefreshMonitor> protect(*this);
     
     Vector<DisplayRefreshMonitorClient*> clients;
     copyToVector(m_clients, clients);
index 363c784..b4223b3 100644 (file)
@@ -40,6 +40,7 @@
 #import "ScrollView.h"
 #import "WebCoreFrameView.h"
 #import "WebCoreView.h"
+#import <wtf/Ref.h>
 #import <wtf/RetainPtr.h>
 
 @interface NSWindow (WebWindowDetails)
@@ -170,7 +171,7 @@ void Widget::setFrameRect(const IntRect& rect)
 
     // Take a reference to this Widget, because sending messages to outerView can invoke arbitrary
     // code, which can deref it.
-    RefPtr<Widget> protectedThis(this);
+    Ref<Widget> protect(*this);
 
     NSRect visibleRect = [outerView visibleRect];
     NSRect f = rect;
@@ -212,7 +213,7 @@ void Widget::paint(GraphicsContext* p, const IntRect& r)
 
     // Take a reference to this Widget, because sending messages to the views can invoke arbitrary
     // code, which can deref it.
-    RefPtr<Widget> protectedThis(this);
+    Ref<Widget> protect(*this);
 
     NSGraphicsContext *currentContext = [NSGraphicsContext currentContext];
     if (currentContext == [[view window] graphicsContext] || ![currentContext isDrawingToScreen]) {
index 2d8af3b..db75fbd 100644 (file)
@@ -46,6 +46,7 @@
 #include "ResourceResponse.h"
 #include "SharedBuffer.h"
 #include <wtf/MainThread.h>
+#include <wtf/Ref.h>
 
 namespace WebCore {
 
@@ -245,7 +246,7 @@ void BlobResourceHandle::doStart()
     if (m_async)
         getSizeForNext();
     else {
-        RefPtr<BlobResourceHandle> protect(this); // getSizeForNext calls the client
+        Ref<BlobResourceHandle> protect(*this); // getSizeForNext calls the client
         for (size_t i = 0; i < m_blobData->items().size() && !m_aborted && !m_errorCode; ++i)
             getSizeForNext();
         notifyResponse();
@@ -260,7 +261,7 @@ void BlobResourceHandle::getSizeForNext()
 
         // Start reading if in asynchronous mode.
         if (m_async) {
-            RefPtr<BlobResourceHandle> protect(this);
+            Ref<BlobResourceHandle> protect(*this);
             notifyResponse();
             m_buffer.resize(bufferSize);
             readAsync();
@@ -345,7 +346,7 @@ void BlobResourceHandle::seek()
 int BlobResourceHandle::readSync(char* buf, int length)
 {
     ASSERT(!m_async);
-    RefPtr<BlobResourceHandle> protect(this);
+    Ref<BlobResourceHandle> protect(*this);
 
     int offset = 0;
     int remaining = length;
@@ -467,7 +468,7 @@ void BlobResourceHandle::readAsync()
 void BlobResourceHandle::readDataAsync(const BlobDataItem& item)
 {
     ASSERT(m_async);
-    RefPtr<BlobResourceHandle> protect(this);
+    Ref<BlobResourceHandle> protect(*this);
 
     long long bytesToRead = item.length - m_currentItemReadSize;
     if (bytesToRead > m_totalRemainingSize)
@@ -519,7 +520,7 @@ void BlobResourceHandle::didRead(int bytesRead)
 void BlobResourceHandle::consumeData(const char* data, int bytesRead)
 {
     ASSERT(m_async);
-    RefPtr<BlobResourceHandle> protect(this);
+    Ref<BlobResourceHandle> protect(*this);
 
     m_totalRemainingSize -= bytesRead;
 
@@ -549,7 +550,7 @@ void BlobResourceHandle::consumeData(const char* data, int bytesRead)
 void BlobResourceHandle::failed(int errorCode)
 {
     ASSERT(m_async);
-    RefPtr<BlobResourceHandle> protect(this);
+    Ref<BlobResourceHandle> protect(*this);
 
     // Notify the client.
     notifyFail(errorCode);
@@ -567,7 +568,7 @@ void BlobResourceHandle::notifyResponse()
         return;
 
     if (m_errorCode) {
-        RefPtr<BlobResourceHandle> protect(this);
+        Ref<BlobResourceHandle> protect(*this);
         notifyResponseOnError();
         notifyFinish();
     } else
index f5a3b72..71aaf1a 100644 (file)
@@ -47,6 +47,7 @@
 #include <sys/stat.h>
 #include <sys/types.h>
 #include <wtf/HashMap.h>
+#include <wtf/Ref.h>
 #include <wtf/Threading.h>
 #include <wtf/text/Base64.h>
 #include <wtf/text/CString.h>
@@ -502,7 +503,7 @@ void ResourceHandle::willSendRequest(ResourceRequest& request, const ResourceRes
         }
     }
 
-    RefPtr<ResourceHandle> protect(this);
+    Ref<ResourceHandle> protect(*this);
     client()->willSendRequest(this, request, redirectResponse);
 
     // Client call may not preserve the session, especially if the request is sent over IPC.
index 4af978d..09400a1 100644 (file)
@@ -51,6 +51,7 @@
 #import "SynchronousLoaderClient.h"
 #import "WebCoreSystemInterface.h"
 #import "WebCoreURLResponse.h"
+#import <wtf/Ref.h>
 #import <wtf/SchedulePair.h>
 #import <wtf/text/Base64.h>
 #import <wtf/text/CString.h>
@@ -389,7 +390,7 @@ void ResourceHandle::willSendRequest(ResourceRequest& request, const ResourceRes
     if (client()->usesAsyncCallbacks()) {
         client()->willSendRequestAsync(this, request, redirectResponse);
     } else {
-        RefPtr<ResourceHandle> protect(this);
+        Ref<ResourceHandle> protect(*this);
         client()->willSendRequest(this, request, redirectResponse);
 
         // Client call may not preserve the session, especially if the request is sent over IPC.
index 5de0a94..9f4fc79 100644 (file)
@@ -33,6 +33,7 @@
 #include "RenderView.h"
 #include "RenderWidgetProtector.h"
 #include <wtf/StackStats.h>
+#include <wtf/Ref.h>
 
 #if USE(ACCELERATED_COMPOSITING)
 #include "RenderLayerBacking.h"
@@ -153,7 +154,7 @@ bool RenderWidget::setWidgetGeometry(const LayoutRect& frame)
     m_clipRect = clipRect;
 
     RenderWidgetProtector protector(this);
-    RefPtr<Node> protectedNode(node());
+    Ref<Node> protectNode(*node());
     m_widget->setFrameRect(newFrame);
 
     if (clipChanged && !boundsChanged)
index 4c6fe21..9227226 100644 (file)
@@ -40,6 +40,7 @@
 #include "WorkerScriptLoaderClient.h"
 #include "WorkerThreadableLoader.h"
 #include <wtf/OwnPtr.h>
+#include <wtf/Ref.h>
 #include <wtf/RefPtr.h>
 
 namespace WebCore {
@@ -90,7 +91,7 @@ void WorkerScriptLoader::loadAsynchronously(ScriptExecutionContext* scriptExecut
     options.sendLoadCallbacks = SendCallbacks;
 
     // During create, callbacks may happen which remove the last reference to this object.
-    RefPtr<WorkerScriptLoader> protect(this);
+    Ref<WorkerScriptLoader> protect(*this);
     m_threadableLoader = ThreadableLoader::create(scriptExecutionContext, this, *request, options);
 }
 
index c810536..db0b213 100644 (file)
@@ -62,6 +62,7 @@
 #include <runtime/ArrayBufferView.h>
 #include <runtime/JSLock.h>
 #include <runtime/Operations.h>
+#include <wtf/Ref.h>
 #include <wtf/RefCountedLeakCounter.h>
 #include <wtf/StdLibExtras.h>
 #include <wtf/text/CString.h>
@@ -822,7 +823,7 @@ void XMLHttpRequest::createRequest(ExceptionCode& ec)
 void XMLHttpRequest::abort()
 {
     // internalAbort() calls dropProtection(), which may release the last reference.
-    RefPtr<XMLHttpRequest> protect(this);
+    Ref<XMLHttpRequest> protect(*this);
 
     bool sendFlag = m_loader;
 
@@ -1241,7 +1242,7 @@ void XMLHttpRequest::didReceiveData(const char* data, int len)
 void XMLHttpRequest::didTimeout()
 {
     // internalAbort() calls dropProtection(), which may release the last reference.
-    RefPtr<XMLHttpRequest> protect(this);
+    Ref<XMLHttpRequest> protect(*this);
     internalAbort();
 
     clearResponse();
index 64c2d83..429ba43 100644 (file)
@@ -50,6 +50,7 @@
 #include "TextResourceDecoder.h"
 #include "TreeDepthLimit.h"
 #include "XMLErrors.h"
+#include <wtf/Ref.h>
 #include <wtf/StringExtras.h>
 #include <wtf/Threading.h>
 #include <wtf/Vector.h>
@@ -256,7 +257,7 @@ void XMLDocumentParser::notifyFinished(CachedResource* unusedResource)
     ASSERT(scriptElement);
 
     // JavaScript can detach this parser, make sure it's kept alive even if detached.
-    RefPtr<XMLDocumentParser> protect(this);
+    Ref<XMLDocumentParser> protect(*this);
     
     if (errorOccurred)
         scriptElement->dispatchErrorEvent();
index 165e271..41b9c8c 100644 (file)
 #include "XMLDocumentParserScope.h"
 #include <libxml/parser.h>
 #include <libxml/parserInternals.h>
-#include <wtf/text/CString.h>
+#include <wtf/Ref.h>
 #include <wtf/StringExtras.h>
 #include <wtf/Threading.h>
 #include <wtf/Vector.h>
+#include <wtf/text/CString.h>
 #include <wtf/unicode/UTF8.h>
 
 #if ENABLE(XSLT)
@@ -684,7 +685,7 @@ void XMLDocumentParser::doWrite(const String& parseString)
     if (parseString.length()) {
         // JavaScript may cause the parser to detach during xmlParseChunk
         // keep this alive until this function is done.
-        RefPtr<XMLDocumentParser> protect(this);
+        Ref<XMLDocumentParser> protect(*this);
 
         switchToUTF16(context->context());
         XMLDocumentParserScope scope(document()->cachedResourceLoader());
@@ -883,7 +884,7 @@ void XMLDocumentParser::endElementNs()
 
     // JavaScript can detach the parser.  Make sure this is not released
     // before the end of this method.
-    RefPtr<XMLDocumentParser> protect(this);
+    Ref<XMLDocumentParser> protect(*this);
 
     exitText();