Changeset 106654 in webkit
- Timestamp:
- Feb 3, 2012 5:42:20 AM (12 years ago)
- Location:
- trunk
- Files:
-
- 4 added
- 35 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/LayoutTests/ChangeLog
r106652 r106654 1 2012-02-03 Allan Sandfeld Jensen <allan.jensen@nokia.com> 2 3 Test that timers do not fire from subframes of suspended documents. 4 https://bugs.webkit.org/show_bug.cgi?id=53733 5 6 Reviewed by Mihai Parparita. 7 8 * fast/events/resources/suspend-subframe-1.html: Added. 9 * fast/events/resources/suspend-subframe-2.html: Added. 10 * fast/events/suspend-timers-expected.txt: Added. 11 * fast/events/suspend-timers.html: Added. 12 * platform/chromium/test_expectations.txt: 13 1 14 2012-02-03 Zoltan Arvai <zarvai@inf.u-szeged.hu> 2 15 -
trunk/LayoutTests/platform/chromium/test_expectations.txt
r106641 r106654 204 204 WONTFIX SKIP : fast/events/pageshow-pagehide-on-back-cached.html = TIMEOUT FAIL 205 205 WONTFIX SKIP : fast/events/pageshow-pagehide-on-back-cached-with-frames.html = TIMEOUT 206 WONTFIX SKIP : fast/events/suspend-timers.html = TIMEOUT 206 207 WONTFIX SKIP : media/restore-from-page-cache.html = TIMEOUT 207 208 WONTFIX SKIP : loader/go-back-to-different-window-size.html = TIMEOUT TEXT -
trunk/Source/WebCore/ChangeLog
r106649 r106654 1 2012-02-03 Allan Sandfeld Jensen <allan.jensen@nokia.com> 2 3 Ensure timers and other active DOM objects do not fire in suspended documents. 4 https://bugs.webkit.org/show_bug.cgi?id=53733 5 6 ScriptExecutionContext now remembers it has suspended active DOM objects 7 and suspends all newly installed active DOM objects as well. 8 9 All create-calls active DOM objects now calls the post constructor method 10 suspendIfNeeded that updates the suspend state. It is post constructor 11 because the suspend/resume functions are virtual and thus can not be called 12 from constructors. 13 14 Reviewed by Mihai Parparita. 15 16 Test: fast/events/suspend-timers.html 17 18 * Modules/intents/IntentRequest.cpp: 19 (WebCore::IntentRequest::create): 20 * bindings/generic/ActiveDOMCallback.cpp: 21 (WebCore::ActiveDOMCallback::ActiveDOMCallback): 22 * dom/ActiveDOMObject.cpp: 23 (WebCore::ActiveDOMObject::ActiveDOMObject): 24 (WebCore::ActiveDOMObject::~ActiveDOMObject): 25 (WebCore::ActiveDOMObject::suspendIfNeeded): 26 * dom/ActiveDOMObject.h: 27 (WebCore::ActiveDOMObject::suspendIfNeededCalled): 28 * dom/DocumentEventQueue.cpp: 29 (WebCore::DocumentEventQueue::DocumentEventQueue): 30 * dom/ScriptExecutionContext.cpp: 31 (WebCore::ScriptExecutionContext::ScriptExecutionContext): 32 (WebCore::ScriptExecutionContext::~ScriptExecutionContext): 33 (WebCore::ScriptExecutionContext::canSuspendActiveDOMObjects): 34 (WebCore::ScriptExecutionContext::suspendActiveDOMObjects): 35 (WebCore::ScriptExecutionContext::resumeActiveDOMObjects): 36 (WebCore::ScriptExecutionContext::stopActiveDOMObjects): 37 (WebCore::ScriptExecutionContext::suspendActiveDOMObjectIfNeeded): 38 * dom/ScriptExecutionContext.h: 39 (WebCore::ScriptExecutionContext::activeDOMObjectsAreSuspended): 40 * fileapi/DOMFileSystem.cpp: 41 (WebCore::DOMFileSystem::create): 42 * fileapi/FileReader.cpp: 43 (WebCore::FileReader::create): 44 * fileapi/FileReader.h: 45 * fileapi/FileWriter.cpp: 46 (WebCore::FileWriter::create): 47 * fileapi/FileWriter.h: 48 * history/CachedFrame.cpp: 49 (WebCore::CachedFrame::CachedFrame): 50 * html/HTMLAudioElement.cpp: 51 (WebCore::HTMLAudioElement::create): 52 * html/HTMLMarqueeElement.cpp: 53 (WebCore::HTMLMarqueeElement::create): 54 * html/HTMLVideoElement.cpp: 55 (WebCore::HTMLVideoElement::create): 56 * mediastream/PeerConnection.cpp: 57 (WebCore::PeerConnection::create): 58 * notifications/Notification.cpp: 59 (WebCore::Notification::create): 60 * notifications/NotificationCenter.cpp: 61 (WebCore::NotificationCenter::create): 62 * notifications/NotificationCenter.h: 63 * page/DOMTimer.cpp: 64 (WebCore::DOMTimer::install): 65 (WebCore::DOMTimer::fired): 66 * page/EventSource.cpp: 67 (WebCore::EventSource::create): 68 * page/SuspendableTimer.cpp: 69 (WebCore::SuspendableTimer::SuspendableTimer): 70 * storage/IDBDatabase.cpp: 71 (WebCore::IDBDatabase::create): 72 * storage/IDBRequest.cpp: 73 (WebCore::IDBRequest::create): 74 * storage/IDBTransaction.cpp: 75 (WebCore::IDBTransaction::create): 76 * webaudio/AudioContext.cpp: 77 (WebCore::AudioContext::create): 78 * websockets/WebSocket.cpp: 79 (WebCore::WebSocket::create): 80 * websockets/WebSocket.h: 81 * workers/SharedWorker.cpp: 82 (WebCore::SharedWorker::create): 83 * workers/Worker.cpp: 84 (WebCore::Worker::create): 85 * xml/XMLHttpRequest.cpp: 86 (WebCore::XMLHttpRequest::create): 87 1 88 2012-02-03 Allan Sandfeld Jensen <allan.jensen@nokia.com> 2 89 -
trunk/Source/WebCore/Modules/intents/IntentRequest.cpp
r104991 r106654 42 42 PassRefPtr<IntentResultCallback> errorCallback) 43 43 { 44 return adoptRef(new IntentRequest(context, intent, successCallback, errorCallback)); 44 RefPtr<IntentRequest> intentRequest(adoptRef(new IntentRequest(context, intent, successCallback, errorCallback))); 45 intentRequest->suspendIfNeeded(); 46 return intentRequest.release(); 45 47 } 46 48 -
trunk/Source/WebCore/bindings/generic/ActiveDOMCallback.cpp
r95901 r106654 123 123 : m_impl(adoptPtr(new ActiveDOMObjectCallbackImpl(context))) 124 124 { 125 m_impl->suspendIfNeeded(); 125 126 } 126 127 -
trunk/Source/WebCore/dom/ActiveDOMObject.cpp
r105804 r106654 61 61 : ContextDestructionObserver(scriptExecutionContext) 62 62 , m_pendingActivityCount(0) 63 #if !ASSERT_DISABLED 64 , m_suspendIfNeededCalled(false) 65 #endif 63 66 { 64 67 if (!m_scriptExecutionContext) … … 74 77 return; 75 78 79 ASSERT(m_suspendIfNeededCalled); 76 80 ASSERT(m_scriptExecutionContext->isContextThread()); 77 81 m_scriptExecutionContext->willDestroyActiveDOMObject(this); 82 } 83 84 void ActiveDOMObject::suspendIfNeeded() 85 { 86 #if !ASSERT_DISABLED 87 ASSERT(!m_suspendIfNeededCalled); 88 m_suspendIfNeededCalled = true; 89 #endif 90 if (!m_scriptExecutionContext) 91 return; 92 93 m_scriptExecutionContext->suspendActiveDOMObjectIfNeeded(this); 78 94 } 79 95 -
trunk/Source/WebCore/dom/ActiveDOMObject.h
r98787 r106654 52 52 ActiveDOMObject(ScriptExecutionContext*, void* upcastPointer); 53 53 54 // suspendIfNeeded() should be called exactly once after object construction to synchronize 55 // the suspend state with that in ScriptExecutionContext. 56 void suspendIfNeeded(); 57 #if !ASSERT_DISABLED 58 bool suspendIfNeededCalled() const { return m_suspendIfNeededCalled; } 59 #endif 60 54 61 virtual bool hasPendingActivity() const; 55 62 … … 89 96 private: 90 97 unsigned m_pendingActivityCount; 98 #if !ASSERT_DISABLED 99 bool m_suspendIfNeededCalled; 100 #endif 91 101 }; 92 102 -
trunk/Source/WebCore/dom/DocumentEventQueue.cpp
r100959 r106654 65 65 , m_isClosed(false) 66 66 { 67 m_pendingEventTimer->suspendIfNeeded(); 67 68 } 68 69 -
trunk/Source/WebCore/dom/ScriptExecutionContext.cpp
r105310 r106654 93 93 , m_inDestructor(false) 94 94 , m_inDispatchErrorEvent(false) 95 , m_activeDOMObjectsAreSuspended(false) 95 96 #if ENABLE(SQL_DATABASE) 96 97 , m_hasOpenDatabases(false) … … 102 103 { 103 104 m_inDestructor = true; 104 105 105 for (HashSet<ContextDestructionObserver*>::iterator iter = m_destructionObservers.begin(); iter != m_destructionObservers.end(); iter = m_destructionObservers.begin()) { 106 106 ContextDestructionObserver* observer = *iter; … … 207 207 for (HashMap<ActiveDOMObject*, void*>::iterator iter = m_activeDOMObjects.begin(); iter != activeObjectsEnd; ++iter) { 208 208 ASSERT(iter->first->scriptExecutionContext() == this); 209 ASSERT(iter->first->suspendIfNeededCalled()); 209 210 if (!iter->first->canSuspend()) { 210 211 m_iteratingActiveDOMObjects = false; 211 212 return false; 212 213 } 213 } 214 } 214 215 m_iteratingActiveDOMObjects = false; 215 216 return true; … … 223 224 for (HashMap<ActiveDOMObject*, void*>::iterator iter = m_activeDOMObjects.begin(); iter != activeObjectsEnd; ++iter) { 224 225 ASSERT(iter->first->scriptExecutionContext() == this); 226 ASSERT(iter->first->suspendIfNeededCalled()); 225 227 iter->first->suspend(why); 226 228 } 227 229 m_iteratingActiveDOMObjects = false; 230 m_activeDOMObjectsAreSuspended = true; 231 m_reasonForSuspendingActiveDOMObjects = why; 228 232 } 229 233 230 234 void ScriptExecutionContext::resumeActiveDOMObjects() 231 235 { 236 m_activeDOMObjectsAreSuspended = false; 232 237 // No protection against m_activeDOMObjects changing during iteration: resume() shouldn't execute arbitrary JS. 233 238 m_iteratingActiveDOMObjects = true; … … 235 240 for (HashMap<ActiveDOMObject*, void*>::iterator iter = m_activeDOMObjects.begin(); iter != activeObjectsEnd; ++iter) { 236 241 ASSERT(iter->first->scriptExecutionContext() == this); 242 ASSERT(iter->first->suspendIfNeededCalled()); 237 243 iter->first->resume(); 238 244 } … … 247 253 for (HashMap<ActiveDOMObject*, void*>::iterator iter = m_activeDOMObjects.begin(); iter != activeObjectsEnd; ++iter) { 248 254 ASSERT(iter->first->scriptExecutionContext() == this); 255 ASSERT(iter->first->suspendIfNeededCalled()); 249 256 iter->first->stop(); 250 257 } … … 253 260 // Also close MessagePorts. If they were ActiveDOMObjects (they could be) then they could be stopped instead. 254 261 closeMessagePorts(); 262 } 263 264 void ScriptExecutionContext::suspendActiveDOMObjectIfNeeded(ActiveDOMObject* object) 265 { 266 ASSERT(m_activeDOMObjects.contains(object)); 267 // Ensure all ActiveDOMObjects are suspended also newly created ones. 268 if (m_activeDOMObjectsAreSuspended) 269 object->suspend(m_reasonForSuspendingActiveDOMObjects); 255 270 } 256 271 -
trunk/Source/WebCore/dom/ScriptExecutionContext.h
r105568 r106654 104 104 virtual void stopActiveDOMObjects(); 105 105 106 bool activeDOMObjectsAreSuspended() const { return m_activeDOMObjectsAreSuspended; } 107 108 // Called from the constructor and destructors of ActiveDOMObject. 106 109 void didCreateActiveDOMObject(ActiveDOMObject*, void* upcastPointer); 107 110 void willDestroyActiveDOMObject(ActiveDOMObject*); 111 112 // Called after the construction of an ActiveDOMObject to synchronize suspend state. 113 void suspendActiveDOMObjectIfNeeded(ActiveDOMObject*); 108 114 109 115 typedef const HashMap<ActiveDOMObject*, void*> ActiveDOMObjectsMap; … … 207 213 OwnPtr<Vector<OwnPtr<PendingException> > > m_pendingExceptions; 208 214 215 bool m_activeDOMObjectsAreSuspended; 216 ActiveDOMObject::ReasonForSuspension m_reasonForSuspendingActiveDOMObjects; 217 209 218 #if ENABLE(SQL_DATABASE) 210 219 RefPtr<DatabaseThread> m_databaseThread; -
trunk/Source/WebCore/fileapi/DOMFileSystem.cpp
r101236 r106654 57 57 { 58 58 RefPtr<DOMFileSystem> fileSystem(adoptRef(new DOMFileSystem(context, name, asyncFileSystem))); 59 fileSystem->suspendIfNeeded(); 59 60 InspectorInstrumentation::didOpenFileSystem(fileSystem.get()); 60 return fileSystem ;61 return fileSystem.release(); 61 62 } 62 63 -
trunk/Source/WebCore/fileapi/FileReader.cpp
r101295 r106654 49 49 static const double progressNotificationIntervalMS = 50; 50 50 51 PassRefPtr<FileReader> FileReader::create(ScriptExecutionContext* context) 52 { 53 RefPtr<FileReader> fileReader(adoptRef(new FileReader(context))); 54 fileReader->suspendIfNeeded(); 55 return fileReader.release(); 56 } 57 51 58 FileReader::FileReader(ScriptExecutionContext* context) 52 59 : ActiveDOMObject(context, this) -
trunk/Source/WebCore/fileapi/FileReader.h
r100227 r106654 52 52 class FileReader : public RefCounted<FileReader>, public ActiveDOMObject, public EventTarget, public FileReaderLoaderClient { 53 53 public: 54 static PassRefPtr<FileReader> create(ScriptExecutionContext* context) 55 { 56 return adoptRef(new FileReader(context)); 57 } 54 static PassRefPtr<FileReader> create(ScriptExecutionContext*); 58 55 59 56 virtual ~FileReader(); -
trunk/Source/WebCore/fileapi/FileWriter.cpp
r105531 r106654 46 46 static const int kMaxRecursionDepth = 3; 47 47 48 PassRefPtr<FileWriter> FileWriter::create(ScriptExecutionContext* context) 49 { 50 RefPtr<FileWriter> fileWriter(adoptRef(new FileWriter(context))); 51 fileWriter->suspendIfNeeded(); 52 return fileWriter.release(); 53 } 54 48 55 FileWriter::FileWriter(ScriptExecutionContext* context) 49 56 : ActiveDOMObject(context, this) -
trunk/Source/WebCore/fileapi/FileWriter.h
r98802 r106654 49 49 class FileWriter : public FileWriterBase, public ActiveDOMObject, public EventTarget, public AsyncFileWriterClient { 50 50 public: 51 static PassRefPtr<FileWriter> create(ScriptExecutionContext* context) 52 { 53 return adoptRef(new FileWriter(context)); 54 } 51 static PassRefPtr<FileWriter> create(ScriptExecutionContext*); 55 52 56 53 enum ReadyState { -
trunk/Source/WebCore/history/CachedFrame.cpp
r103130 r106654 169 169 // Suspending must also happen after we've recursed over child frames, in case 170 170 // those create more objects. 171 // FIXME: It's still possible to have objects created after suspending in some cases, see http://webkit.org/b/53733 for more details.172 171 m_document->documentWillSuspendForPageCache(); 173 172 m_document->suspendScriptedAnimationControllerCallbacks(); -
trunk/Source/WebCore/html/HTMLAudioElement.cpp
r102968 r106654 44 44 PassRefPtr<HTMLAudioElement> HTMLAudioElement::create(const QualifiedName& tagName, Document* document, bool createdByParser) 45 45 { 46 return adoptRef(new HTMLAudioElement(tagName, document, createdByParser)); 46 RefPtr<HTMLAudioElement> audioElement(adoptRef(new HTMLAudioElement(tagName, document, createdByParser))); 47 audioElement->suspendIfNeeded(); 48 return audioElement.release(); 47 49 } 48 50 -
trunk/Source/WebCore/html/HTMLMarqueeElement.cpp
r73197 r106654 49 49 PassRefPtr<HTMLMarqueeElement> HTMLMarqueeElement::create(const QualifiedName& tagName, Document* document) 50 50 { 51 return adoptRef(new HTMLMarqueeElement(tagName, document)); 51 RefPtr<HTMLMarqueeElement> marqueeElement(adoptRef(new HTMLMarqueeElement(tagName, document))); 52 marqueeElement->suspendIfNeeded(); 53 return marqueeElement.release(); 52 54 } 53 55 -
trunk/Source/WebCore/html/HTMLVideoElement.cpp
r103679 r106654 55 55 PassRefPtr<HTMLVideoElement> HTMLVideoElement::create(const QualifiedName& tagName, Document* document, bool createdByParser) 56 56 { 57 return adoptRef(new HTMLVideoElement(tagName, document, createdByParser)); 57 RefPtr<HTMLVideoElement> videoElement(adoptRef(new HTMLVideoElement(tagName, document, createdByParser))); 58 videoElement->suspendIfNeeded(); 59 return videoElement.release(); 58 60 } 59 61 -
trunk/Source/WebCore/mediastream/PeerConnection.cpp
r106275 r106654 42 42 connection->setPendingActivity(connection.get()); 43 43 connection->scheduleInitialNegotiation(); 44 connection->suspendIfNeeded(); 44 45 45 46 return connection.release(); -
trunk/Source/WebCore/notifications/Notification.cpp
r101750 r106654 103 103 PassRefPtr<Notification> Notification::create(const KURL& url, ScriptExecutionContext* context, ExceptionCode& ec, PassRefPtr<NotificationCenter> provider) 104 104 { 105 return adoptRef(new Notification(url, context, ec, provider)); 105 RefPtr<Notification> notification(adoptRef(new Notification(url, context, ec, provider))); 106 notification->suspendIfNeeded(); 107 return notification.release(); 106 108 } 107 109 108 110 PassRefPtr<Notification> Notification::create(const NotificationContents& contents, ScriptExecutionContext* context, ExceptionCode& ec, PassRefPtr<NotificationCenter> provider) 109 111 { 110 return adoptRef(new Notification(contents, context, ec, provider)); 112 RefPtr<Notification> notification(adoptRef(new Notification(contents, context, ec, provider))); 113 notification->suspendIfNeeded(); 114 return notification.release(); 111 115 } 112 116 -
trunk/Source/WebCore/notifications/NotificationCenter.cpp
r106592 r106654 42 42 namespace WebCore { 43 43 44 PassRefPtr<NotificationCenter> NotificationCenter::create(ScriptExecutionContext* context, NotificationPresenter* presenter) 45 { 46 RefPtr<NotificationCenter> notificationCenter(adoptRef(new NotificationCenter(context, presenter))); 47 notificationCenter->suspendIfNeeded(); 48 return notificationCenter.release(); 49 } 50 44 51 NotificationCenter::NotificationCenter(ScriptExecutionContext* context, NotificationPresenter* presenter) 45 52 : ActiveDOMObject(context, this) -
trunk/Source/WebCore/notifications/NotificationCenter.h
r101307 r106654 51 51 class NotificationCenter : public RefCounted<NotificationCenter>, public ActiveDOMObject { 52 52 public: 53 static PassRefPtr<NotificationCenter> create(ScriptExecutionContext* context, NotificationPresenter* presenter) { return adoptRef(new NotificationCenter(context, presenter)); }53 static PassRefPtr<NotificationCenter> create(ScriptExecutionContext*, NotificationPresenter*); 54 54 55 55 PassRefPtr<Notification> createHTMLNotification(const String& URI, ExceptionCode& ec) -
trunk/Source/WebCore/page/DOMTimer.cpp
r106636 r106654 97 97 DOMTimer* timer = new DOMTimer(context, action, timeout, singleShot); 98 98 99 timer->suspendIfNeeded(); 99 100 InspectorInstrumentation::didInstallTimer(context, timer->m_timeoutId, timeout, singleShot); 100 101 … … 119 120 ScriptExecutionContext* context = scriptExecutionContext(); 120 121 timerNestingLevel = m_nestingLevel; 121 122 ASSERT(!context->activeDOMObjectsAreSuspended()); 122 123 UserGestureIndicator gestureIndicator(m_shouldForwardUserGesture ? DefinitelyProcessingUserGesture : PossiblyProcessingUserGesture); 123 124 -
trunk/Source/WebCore/page/EventSource.cpp
r103474 r106654 99 99 source->setPendingActivity(source.get()); 100 100 source->connect(); 101 source->suspendIfNeeded(); 101 102 102 103 return source.release(); -
trunk/Source/WebCore/page/SuspendableTimer.cpp
r77355 r106654 36 36 , m_nextFireInterval(0) 37 37 , m_repeatInterval(0) 38 , m_active(false) 38 39 #if !ASSERT_DISABLED 39 , m_active(false)40 40 , m_suspended(false) 41 41 #endif -
trunk/Source/WebCore/storage/IDBDatabase.cpp
r104933 r106654 51 51 PassRefPtr<IDBDatabase> IDBDatabase::create(ScriptExecutionContext* context, PassRefPtr<IDBDatabaseBackendInterface> database) 52 52 { 53 return adoptRef(new IDBDatabase(context, database)); 53 RefPtr<IDBDatabase> idbDatabase(adoptRef(new IDBDatabase(context, database))); 54 idbDatabase->suspendIfNeeded(); 55 return idbDatabase.release(); 54 56 } 55 57 -
trunk/Source/WebCore/storage/IDBRequest.cpp
r105137 r106654 46 46 PassRefPtr<IDBRequest> IDBRequest::create(ScriptExecutionContext* context, PassRefPtr<IDBAny> source, IDBTransaction* transaction) 47 47 { 48 return adoptRef(new IDBRequest(context, source, transaction)); 48 RefPtr<IDBRequest> request(adoptRef(new IDBRequest(context, source, transaction))); 49 request->suspendIfNeeded(); 50 return request.release(); 49 51 } 50 52 -
trunk/Source/WebCore/storage/IDBTransaction.cpp
r103283 r106654 43 43 PassRefPtr<IDBTransaction> IDBTransaction::create(ScriptExecutionContext* context, PassRefPtr<IDBTransactionBackendInterface> backend, IDBDatabase* db) 44 44 { 45 return adoptRef(new IDBTransaction(context, backend, db)); 45 RefPtr<IDBTransaction> transaction(adoptRef(new IDBTransaction(context, backend, db))); 46 transaction->suspendIfNeeded(); 47 return transaction.release(); 46 48 } 47 49 -
trunk/Source/WebCore/webaudio/AudioContext.cpp
r105375 r106654 103 103 if (s_hardwareContextCount >= MaxHardwareContexts) 104 104 return 0; 105 106 return adoptRef(new AudioContext(document)); 105 106 RefPtr<AudioContext> audioContext(adoptRef(new AudioContext(document))); 107 audioContext->suspendIfNeeded(); 108 return audioContext.release(); 107 109 } 108 110 -
trunk/Source/WebCore/websockets/WebSocket.cpp
r104803 r106654 163 163 if (m_channel) 164 164 m_channel->disconnect(); 165 } 166 167 PassRefPtr<WebSocket> WebSocket::create(ScriptExecutionContext* context) 168 { 169 RefPtr<WebSocket> webSocket(adoptRef(new WebSocket(context))); 170 webSocket->suspendIfNeeded(); 171 return webSocket.release(); 165 172 } 166 173 -
trunk/Source/WebCore/websockets/WebSocket.h
r101730 r106654 54 54 static void setIsAvailable(bool); 55 55 static bool isAvailable(); 56 static PassRefPtr<WebSocket> create(ScriptExecutionContext* context) { return adoptRef(new WebSocket(context)); }56 static PassRefPtr<WebSocket> create(ScriptExecutionContext*); 57 57 virtual ~WebSocket(); 58 58 -
trunk/Source/WebCore/workers/SharedWorker.cpp
r98388 r106654 65 65 SharedWorkerRepository::connect(worker.get(), remotePort.release(), scriptURL, name, ec); 66 66 67 worker->suspendIfNeeded(); 67 68 InspectorInstrumentation::didCreateWorker(context, worker->asID(), scriptURL.string(), true); 68 69 -
trunk/Source/WebCore/workers/Worker.cpp
r98388 r106654 74 74 worker->m_scriptLoader->loadAsynchronously(context, scriptURL, DenyCrossOriginRequests, worker.get()); 75 75 76 worker->suspendIfNeeded(); 76 77 InspectorInstrumentation::didCreateWorker(context, worker->asID(), scriptURL.string(), false); 77 78 -
trunk/Source/WebCore/xml/XMLHttpRequest.cpp
r105076 r106654 155 155 PassRefPtr<XMLHttpRequest> XMLHttpRequest::create(ScriptExecutionContext* context, PassRefPtr<SecurityOrigin> securityOrigin) 156 156 { 157 return adoptRef(new XMLHttpRequest(context, securityOrigin)); 157 RefPtr<XMLHttpRequest> xmlHttpRequest(adoptRef(new XMLHttpRequest(context, securityOrigin))); 158 xmlHttpRequest->suspendIfNeeded(); 159 160 return xmlHttpRequest.release(); 158 161 } 159 162
Note: See TracChangeset
for help on using the changeset viewer.