<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN"
"http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head><meta http-equiv="content-type" content="text/html; charset=utf-8" />
<title>[207687] trunk/Source/WebCore</title>
</head>
<body>
<style type="text/css"><!--
#msg dl.meta { border: 1px #006 solid; background: #369; padding: 6px; color: #fff; }
#msg dl.meta dt { float: left; width: 6em; font-weight: bold; }
#msg dt:after { content:':';}
#msg dl, #msg dt, #msg ul, #msg li, #header, #footer, #logmsg { font-family: verdana,arial,helvetica,sans-serif; font-size: 10pt; }
#msg dl a { font-weight: bold}
#msg dl a:link { color:#fc3; }
#msg dl a:active { color:#ff0; }
#msg dl a:visited { color:#cc6; }
h3 { font-family: verdana,arial,helvetica,sans-serif; font-size: 10pt; font-weight: bold; }
#msg pre { overflow: auto; background: #ffc; border: 1px #fa0 solid; padding: 6px; }
#logmsg { background: #ffc; border: 1px #fa0 solid; padding: 1em 1em 0 1em; }
#logmsg p, #logmsg pre, #logmsg blockquote { margin: 0 0 1em 0; }
#logmsg p, #logmsg li, #logmsg dt, #logmsg dd { line-height: 14pt; }
#logmsg h1, #logmsg h2, #logmsg h3, #logmsg h4, #logmsg h5, #logmsg h6 { margin: .5em 0; }
#logmsg h1:first-child, #logmsg h2:first-child, #logmsg h3:first-child, #logmsg h4:first-child, #logmsg h5:first-child, #logmsg h6:first-child { margin-top: 0; }
#logmsg ul, #logmsg ol { padding: 0; list-style-position: inside; margin: 0 0 0 1em; }
#logmsg ul { text-indent: -1em; padding-left: 1em; }#logmsg ol { text-indent: -1.5em; padding-left: 1.5em; }
#logmsg > ul, #logmsg > ol { margin: 0 0 1em 0; }
#logmsg pre { background: #eee; padding: 1em; }
#logmsg blockquote { border: 1px solid #fa0; border-left-width: 10px; padding: 1em 1em 0 1em; background: white;}
#logmsg dl { margin: 0; }
#logmsg dt { font-weight: bold; }
#logmsg dd { margin: 0; padding: 0 0 0.5em 0; }
#logmsg dd:before { content:'\00bb';}
#logmsg table { border-spacing: 0px; border-collapse: collapse; border-top: 4px solid #fa0; border-bottom: 1px solid #fa0; background: #fff; }
#logmsg table th { text-align: left; font-weight: normal; padding: 0.2em 0.5em; border-top: 1px dotted #fa0; }
#logmsg table td { text-align: right; border-top: 1px dotted #fa0; padding: 0.2em 0.5em; }
#logmsg table thead th { text-align: center; border-bottom: 1px solid #fa0; }
#logmsg table th.Corner { text-align: left; }
#logmsg hr { border: none 0; border-top: 2px dashed #fa0; height: 1px; }
#header, #footer { color: #fff; background: #636; border: 1px #300 solid; padding: 6px; }
#patch { width: 100%; }
#patch h4 {font-family: verdana,arial,helvetica,sans-serif;font-size:10pt;padding:8px;background:#369;color:#fff;margin:0;}
#patch .propset h4, #patch .binary h4 {margin:0;}
#patch pre {padding:0;line-height:1.2em;margin:0;}
#patch .diff {width:100%;background:#eee;padding: 0 0 10px 0;overflow:auto;}
#patch .propset .diff, #patch .binary .diff {padding:10px 0;}
#patch span {display:block;padding:0 10px;}
#patch .modfile, #patch .addfile, #patch .delfile, #patch .propset, #patch .binary, #patch .copfile {border:1px solid #ccc;margin:10px 0;}
#patch ins {background:#dfd;text-decoration:none;display:block;padding:0 10px;}
#patch del {background:#fdd;text-decoration:none;display:block;padding:0 10px;}
#patch .lines, .info {color:#888;background:#fff;}
--></style>
<div id="msg">
<dl class="meta">
<dt>Revision</dt> <dd><a href="http://trac.webkit.org/projects/webkit/changeset/207687">207687</a></dd>
<dt>Author</dt> <dd>darin@apple.com</dd>
<dt>Date</dt> <dd>2016-10-21 11:32:04 -0700 (Fri, 21 Oct 2016)</dd>
</dl>
<h3>Log Message</h3>
<pre>Move some more assorted classes from ExceptionCode to Exception
https://bugs.webkit.org/show_bug.cgi?id=163775
Reviewed by Chris Dumez.
* Modules/fetch/WorkerGlobalScopeFetch.cpp:
(WebCore::WorkerGlobalScopeFetch::fetch): Remove unnecessary calls to
WorkerGlobalScope::scriptExcutionObject, which just returns the scope itself.
* Modules/notifications/Notification.cpp: Added now-needed include.
* Modules/webdatabase/DOMWindowWebDatabase.cpp: Ditto.
* WebCore.xcodeproj/project.pbxproj: Added WindowOrWorkerGlobalScope.idl.
* bindings/js/JSDedicatedWorkerGlobalScopeCustom.cpp:
(WebCore::JSDedicatedWorkerGlobalScope::postMessage): Pass a reference instead
of a pointer to handlePostMessage.
* bindings/js/JSMessagePortCustom.cpp:
(WebCore::JSMessagePort::postMessage): Ditto.
* bindings/js/JSMessagePortCustom.h: Use pragma once. Change handlePostMessage
to take a reference to the object instead of a pointer, and also to use
propagateException since postMessage now uses ExceptionOr.
* bindings/js/JSWorkerCustom.cpp:
(WebCore::JSWorker::postMessage): Pass a reference instead of a pointer to
handlePostMessage.
(WebCore::constructJSWorker): Use the version of toJSNewlyCreated that handles
propagating an exception from ExceptionOr.
* bindings/js/JSWorkerGlobalScopeCustom.cpp:
(WebCore::JSWorkerGlobalScope::visitAdditionalChildren): Use auto.
Remove unnecessary round trip through the scriptExecutionContext function.
(WebCore::JSWorkerGlobalScope::importScripts): Use reserveInitialCapacity and
uncheckedAppend to build up the vector of strings. Use propagateException
to deal with ExceptionOr result.
* dom/MessagePort.cpp:
(WebCore::MessagePort::MessagePort): Initialize boolean data members in the
class definition instead of here.
(WebCore::MessagePort::postMessage): Use ExceptionOr.
(WebCore::MessagePort::entangle): Use an rvalue reference.
(WebCore::MessagePort::dispatchMessages): Use ExceptionOr.
(WebCore::MessagePort::disentanglePorts): Ditto. Also use a more efficient
idiom that does half as much hashing as the old algorithm, and got rid an
unneeded local variable.
(WebCore::MessagePort::entanglePorts): Use an rvalue reference.
* dom/MessagePort.h: Updated for above changes.
* fileapi/FileReader.cpp:
(WebCore::FileReader::create): Use auto.
(WebCore::FileReader::FileReader): Initialize scalars in the class definition.
(WebCore::FileReader::~FileReader): Call cancel on the loader directly
instead of sharing code with the stop function.
(WebCore::FileReader::stop): Moved the body of the terminate function here.
(WebCore::FileReader::readAsArrayBuffer): Use ExceptionOr.
(WebCore::FileReader::readAsBinaryString): Ditto.
(WebCore::FileReader::readAsText): Ditto.
(WebCore::FileReader::readAsDataURL): Ditto.
(WebCore::FileReader::readInternal): Ditto. Also add a cast now that
we derive privately from FileReaderLoaderClient.
(WebCore::FileReader::abort): Call stop instead of terminate.
(WebCore::FileReader::terminate): Deleted. Moved code into stop.
(WebCore::FileReader::didReceiveData): Moved comment to where the constant is.
* fileapi/FileReader.h: Updated for above changes. Made more functions private
and used final instead of override.
* fileapi/FileReader.idl: Use non-legacy exceptions.
* fileapi/FileReaderSync.cpp:
(WebCore::FileReaderSync::readAsArrayBuffer): Use ExceptionOr.
(WebCore::FileReaderSync::readAsBinaryString): Ditto.
(WebCore::FileReaderSync::readAsText): Ditto.
(WebCore::FileReaderSync::readAsDataURL): Ditto.
(WebCore::FileReaderSync::startLoading): Ditto.
(WebCore::FileReaderSync::startLoadingString): Added. Helper to cut down on
repeated code in functions above.
* fileapi/FileReaderSync.h: Updated for above changes.
* fileapi/FileReaderSync.idl: Use non-legacy exceptions.
* page/Base64Utilities.cpp:
(WebCore::Base64Utilities::btoa): Use ExceptionOr.
(WebCore::Base64Utilities::atob): Ditto.
* page/Base64Utilities.h: Updated for above changes.
* page/DOMWindow.cpp:
(WebCore::DOMWindow::navigator): Pass a reference to the frame.
(WebCore::DOMWindow::postMessage): Use ExceptionOr when calling
MessagePort::disentanglePorts. Also udpated for changes to the
PostMessageTimer.
* page/Navigator.cpp:
(WebCore::Navigator::Navigator): Take a reference.
(WebCore::shouldHideFourDot): Ditto
(WebCore::Navigator::appVersion): Pass a reference.
(WebCore::Navigator::plugins): Return a reference.
(WebCore::Navigator::mimeTypes): Ditto.
* page/Navigator.h: Updated for above changes. Also marked the
class final and moved derivation from RefCounted to NavigatorBase.
* page/NavigatorBase.h: Addded derivation from RefCounted since
both derived classes want that, and the destructor is already virtual.
* page/WindowOrWorkerGlobalScope.idl: Use non-legacy exceptions.
* page/WorkerNavigator.cpp:
(WebCore::WorkerNavigator::~WorkerNavigator): Deleted.
* page/WorkerNavigator.h: Moved derivation from RefCounted to
NavigatorBase. Also marked class final.
* workers/AbstractWorker.cpp:
(WebCore::AbstractWorker::resolveURL): Use ExceptionOr.
* workers/AbstractWorker.h: Updated for above changes.
* workers/DedicatedWorkerGlobalScope.cpp:
(WebCore::DedicatedWorkerGlobalScope::create): Use RefPtr&&
instead of PassRefPtr.
(WebCore::DedicatedWorkerGlobalScope::DedicatedWorkerGlobalScope):
Ditto.
(WebCore::DedicatedWorkerGlobalScope::postMessage): Use ExceptionOr.
(WebCore::DedicatedWorkerGlobalScope::importScripts): Ditto.
* workers/DedicatedWorkerGlobalScope.h: Updated for above changes.
* workers/DedicatedWorkerGlobalScope.idl: Use non-legacy exceptions.
* workers/Worker.cpp:
(WebCore::Worker::create): Use ExceptionOr.
(WebCore::Worker::postMessage): Ditto.
* workers/Worker.h: Updated for above changes.
* workers/Worker.idl: Use non-legacy exception.
* workers/WorkerGlobalScope.cpp:
(WebCore::WorkerGlobalScope::WorkerGlobalScope): Moved initialization
of m_closing to class definition.
(WebCore::WorkerGlobalScope::~WorkerGlobalScope): Removed call to
deleted notifyObserversOfStop function.
(WebCore::WorkerGlobalScope::importScripts): Use ExceptionOr. Also use
reserveInitialCapacity and uncheckedAppend to build a vector.
(WebCore::WorkerGlobalScope::addConsoleMessage): Use an rvalue reference.
Also moved the body of one of the addMessageToWorkerConsole overloads into
one of the overloads of this function, and changed the other to call addMessage.
(WebCore::WorkerGlobalScope::addMessage): Moved the body of the other
addMessageToWorkerConsole here.
(WebCore::WorkerGlobalScope::addMessageToWorkerConsole): Deleted.
(WebCore::WorkerGlobalScope::Observer::Observer): Deleted.
(WebCore::WorkerGlobalScope::Observer::~Observer): Deleted.
(WebCore::WorkerGlobalScope::Observer::stopObserving): Deleted.
(WebCore::WorkerGlobalScope::registerObserver): Deleted.
(WebCore::WorkerGlobalScope::unregisterObserver): Deleted.
(WebCore::WorkerGlobalScope::notifyObserversOfStop): Deleted.
* workers/WorkerGlobalScope.h: Removed unneeded includes. Moved many virtual
function overrides into the private section. Marked many functions final instead
of just override. Removed unused Observer class and m_workerObservers set.
* workers/WorkerThread.cpp:
(WebCore::WorkerThread::stop): Removed call to deleted
WorkerGlobalScope::notifyObserversOfStop function.</pre>
<h3>Modified Paths</h3>
<ul>
<li><a href="#trunkSourceWebCoreChangeLog">trunk/Source/WebCore/ChangeLog</a></li>
<li><a href="#trunkSourceWebCoreModulesfetchWorkerGlobalScopeFetchcpp">trunk/Source/WebCore/Modules/fetch/WorkerGlobalScopeFetch.cpp</a></li>
<li><a href="#trunkSourceWebCoreModulesnotificationsNotificationcpp">trunk/Source/WebCore/Modules/notifications/Notification.cpp</a></li>
<li><a href="#trunkSourceWebCoreModuleswebdatabaseDOMWindowWebDatabasecpp">trunk/Source/WebCore/Modules/webdatabase/DOMWindowWebDatabase.cpp</a></li>
<li><a href="#trunkSourceWebCoreWebCorexcodeprojprojectpbxproj">trunk/Source/WebCore/WebCore.xcodeproj/project.pbxproj</a></li>
<li><a href="#trunkSourceWebCorebindingsjsJSDedicatedWorkerGlobalScopeCustomcpp">trunk/Source/WebCore/bindings/js/JSDedicatedWorkerGlobalScopeCustom.cpp</a></li>
<li><a href="#trunkSourceWebCorebindingsjsJSMessagePortCustomcpp">trunk/Source/WebCore/bindings/js/JSMessagePortCustom.cpp</a></li>
<li><a href="#trunkSourceWebCorebindingsjsJSMessagePortCustomh">trunk/Source/WebCore/bindings/js/JSMessagePortCustom.h</a></li>
<li><a href="#trunkSourceWebCorebindingsjsJSWorkerCustomcpp">trunk/Source/WebCore/bindings/js/JSWorkerCustom.cpp</a></li>
<li><a href="#trunkSourceWebCorebindingsjsJSWorkerGlobalScopeCustomcpp">trunk/Source/WebCore/bindings/js/JSWorkerGlobalScopeCustom.cpp</a></li>
<li><a href="#trunkSourceWebCoredomMessagePortcpp">trunk/Source/WebCore/dom/MessagePort.cpp</a></li>
<li><a href="#trunkSourceWebCoredomMessagePorth">trunk/Source/WebCore/dom/MessagePort.h</a></li>
<li><a href="#trunkSourceWebCorefileapiFileReadercpp">trunk/Source/WebCore/fileapi/FileReader.cpp</a></li>
<li><a href="#trunkSourceWebCorefileapiFileReaderh">trunk/Source/WebCore/fileapi/FileReader.h</a></li>
<li><a href="#trunkSourceWebCorefileapiFileReaderidl">trunk/Source/WebCore/fileapi/FileReader.idl</a></li>
<li><a href="#trunkSourceWebCorefileapiFileReaderSynccpp">trunk/Source/WebCore/fileapi/FileReaderSync.cpp</a></li>
<li><a href="#trunkSourceWebCorefileapiFileReaderSynch">trunk/Source/WebCore/fileapi/FileReaderSync.h</a></li>
<li><a href="#trunkSourceWebCorefileapiFileReaderSyncidl">trunk/Source/WebCore/fileapi/FileReaderSync.idl</a></li>
<li><a href="#trunkSourceWebCorepageBase64Utilitiescpp">trunk/Source/WebCore/page/Base64Utilities.cpp</a></li>
<li><a href="#trunkSourceWebCorepageBase64Utilitiesh">trunk/Source/WebCore/page/Base64Utilities.h</a></li>
<li><a href="#trunkSourceWebCorepageDOMWindowcpp">trunk/Source/WebCore/page/DOMWindow.cpp</a></li>
<li><a href="#trunkSourceWebCorepageNavigatorcpp">trunk/Source/WebCore/page/Navigator.cpp</a></li>
<li><a href="#trunkSourceWebCorepageNavigatorh">trunk/Source/WebCore/page/Navigator.h</a></li>
<li><a href="#trunkSourceWebCorepageNavigatorBaseh">trunk/Source/WebCore/page/NavigatorBase.h</a></li>
<li><a href="#trunkSourceWebCorepageWindowOrWorkerGlobalScopeidl">trunk/Source/WebCore/page/WindowOrWorkerGlobalScope.idl</a></li>
<li><a href="#trunkSourceWebCorepageWorkerNavigatorcpp">trunk/Source/WebCore/page/WorkerNavigator.cpp</a></li>
<li><a href="#trunkSourceWebCorepageWorkerNavigatorh">trunk/Source/WebCore/page/WorkerNavigator.h</a></li>
<li><a href="#trunkSourceWebCoreworkersAbstractWorkercpp">trunk/Source/WebCore/workers/AbstractWorker.cpp</a></li>
<li><a href="#trunkSourceWebCoreworkersAbstractWorkerh">trunk/Source/WebCore/workers/AbstractWorker.h</a></li>
<li><a href="#trunkSourceWebCoreworkersDedicatedWorkerGlobalScopecpp">trunk/Source/WebCore/workers/DedicatedWorkerGlobalScope.cpp</a></li>
<li><a href="#trunkSourceWebCoreworkersDedicatedWorkerGlobalScopeh">trunk/Source/WebCore/workers/DedicatedWorkerGlobalScope.h</a></li>
<li><a href="#trunkSourceWebCoreworkersDedicatedWorkerGlobalScopeidl">trunk/Source/WebCore/workers/DedicatedWorkerGlobalScope.idl</a></li>
<li><a href="#trunkSourceWebCoreworkersWorkercpp">trunk/Source/WebCore/workers/Worker.cpp</a></li>
<li><a href="#trunkSourceWebCoreworkersWorkerh">trunk/Source/WebCore/workers/Worker.h</a></li>
<li><a href="#trunkSourceWebCoreworkersWorkeridl">trunk/Source/WebCore/workers/Worker.idl</a></li>
<li><a href="#trunkSourceWebCoreworkersWorkerGlobalScopecpp">trunk/Source/WebCore/workers/WorkerGlobalScope.cpp</a></li>
<li><a href="#trunkSourceWebCoreworkersWorkerGlobalScopeh">trunk/Source/WebCore/workers/WorkerGlobalScope.h</a></li>
<li><a href="#trunkSourceWebCoreworkersWorkerThreadcpp">trunk/Source/WebCore/workers/WorkerThread.cpp</a></li>
</ul>
</div>
<div id="patch">
<h3>Diff</h3>
<a id="trunkSourceWebCoreChangeLog"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/ChangeLog (207686 => 207687)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/ChangeLog        2016-10-21 18:20:07 UTC (rev 207686)
+++ trunk/Source/WebCore/ChangeLog        2016-10-21 18:32:04 UTC (rev 207687)
</span><span class="lines">@@ -1,3 +1,162 @@
</span><ins>+2016-10-21 Darin Adler <darin@apple.com>
+
+ Move some more assorted classes from ExceptionCode to Exception
+ https://bugs.webkit.org/show_bug.cgi?id=163775
+
+ Reviewed by Chris Dumez.
+
+ * Modules/fetch/WorkerGlobalScopeFetch.cpp:
+ (WebCore::WorkerGlobalScopeFetch::fetch): Remove unnecessary calls to
+ WorkerGlobalScope::scriptExcutionObject, which just returns the scope itself.
+
+ * Modules/notifications/Notification.cpp: Added now-needed include.
+ * Modules/webdatabase/DOMWindowWebDatabase.cpp: Ditto.
+
+ * WebCore.xcodeproj/project.pbxproj: Added WindowOrWorkerGlobalScope.idl.
+
+ * bindings/js/JSDedicatedWorkerGlobalScopeCustom.cpp:
+ (WebCore::JSDedicatedWorkerGlobalScope::postMessage): Pass a reference instead
+ of a pointer to handlePostMessage.
+ * bindings/js/JSMessagePortCustom.cpp:
+ (WebCore::JSMessagePort::postMessage): Ditto.
+
+ * bindings/js/JSMessagePortCustom.h: Use pragma once. Change handlePostMessage
+ to take a reference to the object instead of a pointer, and also to use
+ propagateException since postMessage now uses ExceptionOr.
+
+ * bindings/js/JSWorkerCustom.cpp:
+ (WebCore::JSWorker::postMessage): Pass a reference instead of a pointer to
+ handlePostMessage.
+ (WebCore::constructJSWorker): Use the version of toJSNewlyCreated that handles
+ propagating an exception from ExceptionOr.
+
+ * bindings/js/JSWorkerGlobalScopeCustom.cpp:
+ (WebCore::JSWorkerGlobalScope::visitAdditionalChildren): Use auto.
+ Remove unnecessary round trip through the scriptExecutionContext function.
+ (WebCore::JSWorkerGlobalScope::importScripts): Use reserveInitialCapacity and
+ uncheckedAppend to build up the vector of strings. Use propagateException
+ to deal with ExceptionOr result.
+
+ * dom/MessagePort.cpp:
+ (WebCore::MessagePort::MessagePort): Initialize boolean data members in the
+ class definition instead of here.
+ (WebCore::MessagePort::postMessage): Use ExceptionOr.
+ (WebCore::MessagePort::entangle): Use an rvalue reference.
+ (WebCore::MessagePort::dispatchMessages): Use ExceptionOr.
+ (WebCore::MessagePort::disentanglePorts): Ditto. Also use a more efficient
+ idiom that does half as much hashing as the old algorithm, and got rid an
+ unneeded local variable.
+ (WebCore::MessagePort::entanglePorts): Use an rvalue reference.
+ * dom/MessagePort.h: Updated for above changes.
+
+ * fileapi/FileReader.cpp:
+ (WebCore::FileReader::create): Use auto.
+ (WebCore::FileReader::FileReader): Initialize scalars in the class definition.
+ (WebCore::FileReader::~FileReader): Call cancel on the loader directly
+ instead of sharing code with the stop function.
+ (WebCore::FileReader::stop): Moved the body of the terminate function here.
+ (WebCore::FileReader::readAsArrayBuffer): Use ExceptionOr.
+ (WebCore::FileReader::readAsBinaryString): Ditto.
+ (WebCore::FileReader::readAsText): Ditto.
+ (WebCore::FileReader::readAsDataURL): Ditto.
+ (WebCore::FileReader::readInternal): Ditto. Also add a cast now that
+ we derive privately from FileReaderLoaderClient.
+ (WebCore::FileReader::abort): Call stop instead of terminate.
+ (WebCore::FileReader::terminate): Deleted. Moved code into stop.
+ (WebCore::FileReader::didReceiveData): Moved comment to where the constant is.
+ * fileapi/FileReader.h: Updated for above changes. Made more functions private
+ and used final instead of override.
+ * fileapi/FileReader.idl: Use non-legacy exceptions.
+
+ * fileapi/FileReaderSync.cpp:
+ (WebCore::FileReaderSync::readAsArrayBuffer): Use ExceptionOr.
+ (WebCore::FileReaderSync::readAsBinaryString): Ditto.
+ (WebCore::FileReaderSync::readAsText): Ditto.
+ (WebCore::FileReaderSync::readAsDataURL): Ditto.
+ (WebCore::FileReaderSync::startLoading): Ditto.
+ (WebCore::FileReaderSync::startLoadingString): Added. Helper to cut down on
+ repeated code in functions above.
+ * fileapi/FileReaderSync.h: Updated for above changes.
+ * fileapi/FileReaderSync.idl: Use non-legacy exceptions.
+
+ * page/Base64Utilities.cpp:
+ (WebCore::Base64Utilities::btoa): Use ExceptionOr.
+ (WebCore::Base64Utilities::atob): Ditto.
+ * page/Base64Utilities.h: Updated for above changes.
+
+ * page/DOMWindow.cpp:
+ (WebCore::DOMWindow::navigator): Pass a reference to the frame.
+ (WebCore::DOMWindow::postMessage): Use ExceptionOr when calling
+ MessagePort::disentanglePorts. Also udpated for changes to the
+ PostMessageTimer.
+
+ * page/Navigator.cpp:
+ (WebCore::Navigator::Navigator): Take a reference.
+ (WebCore::shouldHideFourDot): Ditto
+ (WebCore::Navigator::appVersion): Pass a reference.
+ (WebCore::Navigator::plugins): Return a reference.
+ (WebCore::Navigator::mimeTypes): Ditto.
+ * page/Navigator.h: Updated for above changes. Also marked the
+ class final and moved derivation from RefCounted to NavigatorBase.
+
+ * page/NavigatorBase.h: Addded derivation from RefCounted since
+ both derived classes want that, and the destructor is already virtual.
+
+ * page/WindowOrWorkerGlobalScope.idl: Use non-legacy exceptions.
+
+ * page/WorkerNavigator.cpp:
+ (WebCore::WorkerNavigator::~WorkerNavigator): Deleted.
+
+ * page/WorkerNavigator.h: Moved derivation from RefCounted to
+ NavigatorBase. Also marked class final.
+
+ * workers/AbstractWorker.cpp:
+ (WebCore::AbstractWorker::resolveURL): Use ExceptionOr.
+ * workers/AbstractWorker.h: Updated for above changes.
+
+ * workers/DedicatedWorkerGlobalScope.cpp:
+ (WebCore::DedicatedWorkerGlobalScope::create): Use RefPtr&&
+ instead of PassRefPtr.
+ (WebCore::DedicatedWorkerGlobalScope::DedicatedWorkerGlobalScope):
+ Ditto.
+ (WebCore::DedicatedWorkerGlobalScope::postMessage): Use ExceptionOr.
+ (WebCore::DedicatedWorkerGlobalScope::importScripts): Ditto.
+ * workers/DedicatedWorkerGlobalScope.h: Updated for above changes.
+ * workers/DedicatedWorkerGlobalScope.idl: Use non-legacy exceptions.
+
+ * workers/Worker.cpp:
+ (WebCore::Worker::create): Use ExceptionOr.
+ (WebCore::Worker::postMessage): Ditto.
+ * workers/Worker.h: Updated for above changes.
+ * workers/Worker.idl: Use non-legacy exception.
+
+ * workers/WorkerGlobalScope.cpp:
+ (WebCore::WorkerGlobalScope::WorkerGlobalScope): Moved initialization
+ of m_closing to class definition.
+ (WebCore::WorkerGlobalScope::~WorkerGlobalScope): Removed call to
+ deleted notifyObserversOfStop function.
+ (WebCore::WorkerGlobalScope::importScripts): Use ExceptionOr. Also use
+ reserveInitialCapacity and uncheckedAppend to build a vector.
+ (WebCore::WorkerGlobalScope::addConsoleMessage): Use an rvalue reference.
+ Also moved the body of one of the addMessageToWorkerConsole overloads into
+ one of the overloads of this function, and changed the other to call addMessage.
+ (WebCore::WorkerGlobalScope::addMessage): Moved the body of the other
+ addMessageToWorkerConsole here.
+ (WebCore::WorkerGlobalScope::addMessageToWorkerConsole): Deleted.
+ (WebCore::WorkerGlobalScope::Observer::Observer): Deleted.
+ (WebCore::WorkerGlobalScope::Observer::~Observer): Deleted.
+ (WebCore::WorkerGlobalScope::Observer::stopObserving): Deleted.
+ (WebCore::WorkerGlobalScope::registerObserver): Deleted.
+ (WebCore::WorkerGlobalScope::unregisterObserver): Deleted.
+ (WebCore::WorkerGlobalScope::notifyObserversOfStop): Deleted.
+ * workers/WorkerGlobalScope.h: Removed unneeded includes. Moved many virtual
+ function overrides into the private section. Marked many functions final instead
+ of just override. Removed unused Observer class and m_workerObservers set.
+
+ * workers/WorkerThread.cpp:
+ (WebCore::WorkerThread::stop): Removed call to deleted
+ WorkerGlobalScope::notifyObserversOfStop function.
+
</ins><span class="cx"> 2016-10-21 Antti Koivisto <antti@apple.com>
</span><span class="cx">
</span><span class="cx"> Tighten ComputedStyleExtractor to use Element instead of Node
</span></span></pre></div>
<a id="trunkSourceWebCoreModulesfetchWorkerGlobalScopeFetchcpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/Modules/fetch/WorkerGlobalScopeFetch.cpp (207686 => 207687)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/Modules/fetch/WorkerGlobalScopeFetch.cpp        2016-10-21 18:20:07 UTC (rev 207686)
+++ trunk/Source/WebCore/Modules/fetch/WorkerGlobalScopeFetch.cpp        2016-10-21 18:32:04 UTC (rev 207687)
</span><span class="lines">@@ -38,9 +38,7 @@
</span><span class="cx">
</span><span class="cx"> void WorkerGlobalScopeFetch::fetch(WorkerGlobalScope& scope, FetchRequest& request, Ref<DeferredPromise>&& promise)
</span><span class="cx"> {
</span><del>- if (!scope.scriptExecutionContext())
- return;
- FetchResponse::fetch(*scope.scriptExecutionContext(), request, WTFMove(promise));
</del><ins>+ FetchResponse::fetch(scope, request, WTFMove(promise));
</ins><span class="cx"> }
</span><span class="cx">
</span><span class="cx"> } // namespace WebCore
</span></span></pre></div>
<a id="trunkSourceWebCoreModulesnotificationsNotificationcpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/Modules/notifications/Notification.cpp (207686 => 207687)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/Modules/notifications/Notification.cpp        2016-10-21 18:20:07 UTC (rev 207686)
+++ trunk/Source/WebCore/Modules/notifications/Notification.cpp        2016-10-21 18:32:04 UTC (rev 207687)
</span><span class="lines">@@ -40,6 +40,7 @@
</span><span class="cx"> #include "Document.h"
</span><span class="cx"> #include "Event.h"
</span><span class="cx"> #include "EventNames.h"
</span><ins>+#include "ExceptionCode.h"
</ins><span class="cx"> #include "NotificationCenter.h"
</span><span class="cx"> #include "NotificationController.h"
</span><span class="cx"> #include "NotificationPermissionCallback.h"
</span></span></pre></div>
<a id="trunkSourceWebCoreModuleswebdatabaseDOMWindowWebDatabasecpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/Modules/webdatabase/DOMWindowWebDatabase.cpp (207686 => 207687)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/Modules/webdatabase/DOMWindowWebDatabase.cpp        2016-10-21 18:20:07 UTC (rev 207686)
+++ trunk/Source/WebCore/Modules/webdatabase/DOMWindowWebDatabase.cpp        2016-10-21 18:32:04 UTC (rev 207687)
</span><span class="lines">@@ -31,6 +31,7 @@
</span><span class="cx"> #include "Database.h"
</span><span class="cx"> #include "DatabaseManager.h"
</span><span class="cx"> #include "Document.h"
</span><ins>+#include "ExceptionCode.h"
</ins><span class="cx"> #include "SecurityOrigin.h"
</span><span class="cx">
</span><span class="cx"> namespace WebCore {
</span></span></pre></div>
<a id="trunkSourceWebCoreWebCorexcodeprojprojectpbxproj"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/WebCore.xcodeproj/project.pbxproj (207686 => 207687)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/WebCore.xcodeproj/project.pbxproj        2016-10-21 18:20:07 UTC (rev 207686)
+++ trunk/Source/WebCore/WebCore.xcodeproj/project.pbxproj        2016-10-21 18:32:04 UTC (rev 207687)
</span><span class="lines">@@ -10643,6 +10643,7 @@
</span><span class="cx">                 9362640A0DE1137D009D5A00 /* CSSReflectionDirection.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CSSReflectionDirection.h; sourceTree = "<group>"; };
</span><span class="cx">                 936DD03A09CEAC270056AE8C /* Range.idl */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = Range.idl; sourceTree = "<group>"; };
</span><span class="cx">                 9370918C1416D86B00477333 /* textAreaResizeCorner@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "textAreaResizeCorner@2x.png"; sourceTree = "<group>"; };
</span><ins>+                9371080D1DB754550060744E /* WindowOrWorkerGlobalScope.idl */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = WindowOrWorkerGlobalScope.idl; sourceTree = "<group>"; };
</ins><span class="cx">                 9377AB9F15DEFEEF0031FD04 /* Pagination.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Pagination.h; sourceTree = "<group>"; };
</span><span class="cx">                 937F4CCB1A2D48C100BB39F5 /* QuickLookMacSPI.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = QuickLookMacSPI.h; sourceTree = "<group>"; };
</span><span class="cx">                 937F4CCD1A2D4B0100BB39F5 /* NSMenuSPI.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = NSMenuSPI.h; sourceTree = "<group>"; };
</span><span class="lines">@@ -17663,6 +17664,7 @@
</span><span class="cx">                                 BC8243E70D0CFD7500460C8F /* WindowFeatures.h */,
</span><span class="cx">                                 7E99AF520B13846468FB01A5 /* WindowFocusAllowedIndicator.cpp */,
</span><span class="cx">                                 7E99AF540B13846468FB01A5 /* WindowFocusAllowedIndicator.h */,
</span><ins>+                                9371080D1DB754550060744E /* WindowOrWorkerGlobalScope.idl */,
</ins><span class="cx">                                 E1271A130EEEC80400F61213 /* WorkerNavigator.cpp */,
</span><span class="cx">                                 E1271A0A0EEEC77A00F61213 /* WorkerNavigator.h */,
</span><span class="cx">                                 E1271A510EEECD1C00F61213 /* WorkerNavigator.idl */,
</span></span></pre></div>
<a id="trunkSourceWebCorebindingsjsJSDedicatedWorkerGlobalScopeCustomcpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/bindings/js/JSDedicatedWorkerGlobalScopeCustom.cpp (207686 => 207687)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/bindings/js/JSDedicatedWorkerGlobalScopeCustom.cpp        2016-10-21 18:20:07 UTC (rev 207686)
+++ trunk/Source/WebCore/bindings/js/JSDedicatedWorkerGlobalScopeCustom.cpp        2016-10-21 18:32:04 UTC (rev 207687)
</span><span class="lines">@@ -41,7 +41,7 @@
</span><span class="cx">
</span><span class="cx"> JSC::JSValue JSDedicatedWorkerGlobalScope::postMessage(JSC::ExecState& state)
</span><span class="cx"> {
</span><del>- return handlePostMessage(state, &wrapped());
</del><ins>+ return handlePostMessage(state, wrapped());
</ins><span class="cx"> }
</span><span class="cx">
</span><span class="cx"> } // namespace WebCore
</span></span></pre></div>
<a id="trunkSourceWebCorebindingsjsJSMessagePortCustomcpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/bindings/js/JSMessagePortCustom.cpp (207686 => 207687)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/bindings/js/JSMessagePortCustom.cpp        2016-10-21 18:20:07 UTC (rev 207686)
+++ trunk/Source/WebCore/bindings/js/JSMessagePortCustom.cpp        2016-10-21 18:32:04 UTC (rev 207687)
</span><span class="lines">@@ -54,7 +54,7 @@
</span><span class="cx">
</span><span class="cx"> JSC::JSValue JSMessagePort::postMessage(JSC::ExecState& state)
</span><span class="cx"> {
</span><del>- return handlePostMessage(state, &wrapped());
</del><ins>+ return handlePostMessage(state, wrapped());
</ins><span class="cx"> }
</span><span class="cx">
</span><span class="cx"> void extractTransferables(JSC::ExecState& state, JSC::JSValue value, Vector<RefPtr<MessagePort>>& portArray, Vector<RefPtr<JSC::ArrayBuffer>>& arrayBuffers)
</span></span></pre></div>
<a id="trunkSourceWebCorebindingsjsJSMessagePortCustomh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/bindings/js/JSMessagePortCustom.h (207686 => 207687)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/bindings/js/JSMessagePortCustom.h        2016-10-21 18:20:07 UTC (rev 207686)
+++ trunk/Source/WebCore/bindings/js/JSMessagePortCustom.h        2016-10-21 18:32:04 UTC (rev 207687)
</span><span class="lines">@@ -29,8 +29,7 @@
</span><span class="cx"> * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
</span><span class="cx"> */
</span><span class="cx">
</span><del>-#ifndef JSMessagePortCustom_h
-#define JSMessagePortCustom_h
</del><ins>+#pragma once
</ins><span class="cx">
</span><span class="cx"> #include "MessagePort.h"
</span><span class="cx"> #include <runtime/Error.h>
</span><span class="lines">@@ -40,33 +39,26 @@
</span><span class="cx">
</span><span class="cx"> namespace WebCore {
</span><span class="cx">
</span><del>- typedef int ExceptionCode;
</del><ins>+void extractTransferables(JSC::ExecState&, JSC::JSValue, Vector<RefPtr<MessagePort>>&, Vector<RefPtr<JSC::ArrayBuffer>>&);
</ins><span class="cx">
</span><del>- void extractTransferables(JSC::ExecState&, JSC::JSValue, Vector<RefPtr<MessagePort>>&, Vector<RefPtr<JSC::ArrayBuffer>>&);
</del><ins>+// Helper function to convert from JS postMessage arguments to WebCore postMessage arguments.
+template<typename T> inline JSC::JSValue handlePostMessage(JSC::ExecState& state, T& object)
+{
+ JSC::VM& vm = state.vm();
+ auto scope = DECLARE_THROW_SCOPE(vm);
</ins><span class="cx">
</span><del>- // Helper function to convert from JS postMessage arguments to WebCore postMessage arguments.
- template <typename T>
- inline JSC::JSValue handlePostMessage(JSC::ExecState& state, T* impl)
- {
- JSC::VM& vm = state.vm();
- auto scope = DECLARE_THROW_SCOPE(vm);
</del><ins>+ if (UNLIKELY(state.argumentCount() < 1))
+ return throwException(&state, scope, createNotEnoughArgumentsError(&state));
</ins><span class="cx">
</span><del>- if (UNLIKELY(state.argumentCount() < 1))
- return throwException(&state, scope, createNotEnoughArgumentsError(&state));
</del><ins>+ Vector<RefPtr<MessagePort>> messagePortArray;
+ Vector<RefPtr<JSC::ArrayBuffer>> arrayBufferArray;
+ extractTransferables(state, state.argument(1), messagePortArray, arrayBufferArray);
</ins><span class="cx">
</span><del>-
- Vector<RefPtr<MessagePort>> messagePortArray;
- Vector<RefPtr<JSC::ArrayBuffer>> arrayBufferArray;
- extractTransferables(state, state.argument(1), messagePortArray, arrayBufferArray);
-
- auto message = SerializedScriptValue::create(state, state.uncheckedArgument(0), messagePortArray, WTFMove(arrayBufferArray));
- RETURN_IF_EXCEPTION(scope, JSC::JSValue());
</del><ins>+ auto message = SerializedScriptValue::create(state, state.uncheckedArgument(0), messagePortArray, WTFMove(arrayBufferArray));
+ RETURN_IF_EXCEPTION(scope, JSC::JSValue());
</ins><span class="cx">
</span><del>- ExceptionCode ec = 0;
- impl->postMessage(WTFMove(message), WTFMove(messagePortArray), ec);
- setDOMException(&state, ec);
- return JSC::jsUndefined();
- }
</del><ins>+ propagateException(state, scope, object.postMessage(WTFMove(message), WTFMove(messagePortArray)));
+ return JSC::jsUndefined();
+}
</ins><span class="cx">
</span><span class="cx"> }
</span><del>-#endif // JSMessagePortCustom_h
</del></span></pre></div>
<a id="trunkSourceWebCorebindingsjsJSWorkerCustomcpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/bindings/js/JSWorkerCustom.cpp (207686 => 207687)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/bindings/js/JSWorkerCustom.cpp        2016-10-21 18:20:07 UTC (rev 207686)
+++ trunk/Source/WebCore/bindings/js/JSWorkerCustom.cpp        2016-10-21 18:32:04 UTC (rev 207687)
</span><span class="lines">@@ -25,7 +25,6 @@
</span><span class="cx"> */
</span><span class="cx">
</span><span class="cx"> #include "config.h"
</span><del>-
</del><span class="cx"> #include "JSWorker.h"
</span><span class="cx">
</span><span class="cx"> #include "Document.h"
</span><span class="lines">@@ -42,34 +41,29 @@
</span><span class="cx">
</span><span class="cx"> JSC::JSValue JSWorker::postMessage(JSC::ExecState& state)
</span><span class="cx"> {
</span><del>- return handlePostMessage(state, &wrapped());
</del><ins>+ return handlePostMessage(state, wrapped());
</ins><span class="cx"> }
</span><span class="cx">
</span><del>-EncodedJSValue JSC_HOST_CALL constructJSWorker(ExecState& exec)
</del><ins>+EncodedJSValue JSC_HOST_CALL constructJSWorker(ExecState& state)
</ins><span class="cx"> {
</span><del>- VM& vm = exec.vm();
</del><ins>+ VM& vm = state.vm();
</ins><span class="cx"> auto scope = DECLARE_THROW_SCOPE(vm);
</span><span class="cx">
</span><del>- DOMConstructorObject* jsConstructor = jsCast<DOMConstructorObject*>(exec.callee());
</del><ins>+ ASSERT(jsCast<DOMConstructorObject*>(state.callee()));
+ ASSERT(jsCast<DOMConstructorObject*>(state.callee())->globalObject());
+ auto& globalObject = *jsCast<DOMConstructorObject*>(state.callee())->globalObject();
</ins><span class="cx">
</span><del>- if (!exec.argumentCount())
- return throwVMError(&exec, scope, createNotEnoughArgumentsError(&exec));
</del><ins>+ if (!state.argumentCount())
+ return throwVMError(&state, scope, createNotEnoughArgumentsError(&state));
</ins><span class="cx">
</span><del>- String scriptURL = exec.uncheckedArgument(0).toWTFString(&exec);
</del><ins>+ String scriptURL = state.uncheckedArgument(0).toWTFString(&state);
</ins><span class="cx"> RETURN_IF_EXCEPTION(scope, encodedJSValue());
</span><span class="cx">
</span><span class="cx"> // See section 4.8.2 step 14 of WebWorkers for why this is the lexicalGlobalObject.
</span><del>- DOMWindow& window = asJSDOMWindow(exec.lexicalGlobalObject())->wrapped();
</del><ins>+ auto& window = asJSDOMWindow(state.lexicalGlobalObject())->wrapped();
</ins><span class="cx">
</span><del>- ExceptionCode ec = 0;
</del><span class="cx"> ASSERT(window.document());
</span><del>- RefPtr<Worker> worker = Worker::create(*window.document(), scriptURL, ec);
- if (ec) {
- setDOMException(&exec, ec);
- return JSValue::encode(JSValue());
- }
-
- return JSValue::encode(toJSNewlyCreated(&exec, jsConstructor->globalObject(), WTFMove(worker)));
</del><ins>+ return JSValue::encode(toJSNewlyCreated(state, globalObject, scope, Worker::create(*window.document(), scriptURL)));
</ins><span class="cx"> }
</span><span class="cx">
</span><span class="cx"> } // namespace WebCore
</span></span></pre></div>
<a id="trunkSourceWebCorebindingsjsJSWorkerGlobalScopeCustomcpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/bindings/js/JSWorkerGlobalScopeCustom.cpp (207686 => 207687)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/bindings/js/JSWorkerGlobalScopeCustom.cpp        2016-10-21 18:20:07 UTC (rev 207686)
+++ trunk/Source/WebCore/bindings/js/JSWorkerGlobalScopeCustom.cpp        2016-10-21 18:32:04 UTC (rev 207687)
</span><span class="lines">@@ -52,11 +52,12 @@
</span><span class="cx">
</span><span class="cx"> void JSWorkerGlobalScope::visitAdditionalChildren(SlotVisitor& visitor)
</span><span class="cx"> {
</span><del>- if (WorkerLocation* location = wrapped().optionalLocation())
</del><ins>+ if (auto* location = wrapped().optionalLocation())
</ins><span class="cx"> visitor.addOpaqueRoot(location);
</span><del>- if (WorkerNavigator* navigator = wrapped().optionalNavigator())
</del><ins>+ if (auto* navigator = wrapped().optionalNavigator())
</ins><span class="cx"> visitor.addOpaqueRoot(navigator);
</span><del>- visitor.addOpaqueRoot(wrapped().scriptExecutionContext());
</del><ins>+ ScriptExecutionContext& context = wrapped();
+ visitor.addOpaqueRoot(&context);
</ins><span class="cx"> }
</span><span class="cx">
</span><span class="cx"> JSValue JSWorkerGlobalScope::importScripts(ExecState& state)
</span><span class="lines">@@ -68,14 +69,13 @@
</span><span class="cx"> return jsUndefined();
</span><span class="cx">
</span><span class="cx"> Vector<String> urls;
</span><ins>+ urls.reserveInitialCapacity(state.argumentCount());
</ins><span class="cx"> for (unsigned i = 0; i < state.argumentCount(); ++i) {
</span><del>- urls.append(valueToUSVString(&state, state.uncheckedArgument(i)));
</del><ins>+ urls.uncheckedAppend(valueToUSVString(&state, state.uncheckedArgument(i)));
</ins><span class="cx"> RETURN_IF_EXCEPTION(scope, JSValue());
</span><span class="cx"> }
</span><del>- ExceptionCode ec = 0;
</del><span class="cx">
</span><del>- wrapped().importScripts(urls, ec);
- setDOMException(&state, ec);
</del><ins>+ propagateException(state, scope, wrapped().importScripts(urls));
</ins><span class="cx"> return jsUndefined();
</span><span class="cx"> }
</span><span class="cx">
</span></span></pre></div>
<a id="trunkSourceWebCoredomMessagePortcpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/dom/MessagePort.cpp (207686 => 207687)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/dom/MessagePort.cpp        2016-10-21 18:20:07 UTC (rev 207686)
+++ trunk/Source/WebCore/dom/MessagePort.cpp        2016-10-21 18:32:04 UTC (rev 207687)
</span><span class="lines">@@ -37,9 +37,7 @@
</span><span class="cx"> namespace WebCore {
</span><span class="cx">
</span><span class="cx"> MessagePort::MessagePort(ScriptExecutionContext& scriptExecutionContext)
</span><del>- : m_started(false)
- , m_closed(false)
- , m_scriptExecutionContext(&scriptExecutionContext)
</del><ins>+ : m_scriptExecutionContext(&scriptExecutionContext)
</ins><span class="cx"> {
</span><span class="cx"> m_scriptExecutionContext->createdMessagePort(*this);
</span><span class="cx">
</span><span class="lines">@@ -53,10 +51,10 @@
</span><span class="cx"> m_scriptExecutionContext->destroyedMessagePort(*this);
</span><span class="cx"> }
</span><span class="cx">
</span><del>-void MessagePort::postMessage(RefPtr<SerializedScriptValue>&& message, Vector<RefPtr<MessagePort>>&& ports, ExceptionCode& ec)
</del><ins>+ExceptionOr<void> MessagePort::postMessage(RefPtr<SerializedScriptValue>&& message, Vector<RefPtr<MessagePort>>&& ports)
</ins><span class="cx"> {
</span><span class="cx"> if (!isEntangled())
</span><del>- return;
</del><ins>+ return { };
</ins><span class="cx"> ASSERT(m_scriptExecutionContext);
</span><span class="cx">
</span><span class="cx"> std::unique_ptr<MessagePortChannelArray> channels;
</span><span class="lines">@@ -63,16 +61,16 @@
</span><span class="cx"> // Make sure we aren't connected to any of the passed-in ports.
</span><span class="cx"> if (!ports.isEmpty()) {
</span><span class="cx"> for (auto& dataPort : ports) {
</span><del>- if (dataPort == this || m_entangledChannel->isConnectedTo(dataPort.get())) {
- ec = DATA_CLONE_ERR;
- return;
- }
</del><ins>+ if (dataPort == this || m_entangledChannel->isConnectedTo(dataPort.get()))
+ return Exception { DATA_CLONE_ERR };
</ins><span class="cx"> }
</span><del>- channels = MessagePort::disentanglePorts(WTFMove(ports), ec);
- if (ec)
- return;
</del><ins>+ auto disentangleResult = MessagePort::disentanglePorts(WTFMove(ports));
+ if (disentangleResult.hasException())
+ return disentangleResult.releaseException();
+ channels = disentangleResult.releaseReturnValue();
</ins><span class="cx"> }
</span><span class="cx"> m_entangledChannel->postMessageToRemote(WTFMove(message), WTFMove(channels));
</span><ins>+ return { };
</ins><span class="cx"> }
</span><span class="cx">
</span><span class="cx"> std::unique_ptr<MessagePortChannel> MessagePort::disentangle()
</span><span class="lines">@@ -118,7 +116,7 @@
</span><span class="cx"> m_closed = true;
</span><span class="cx"> }
</span><span class="cx">
</span><del>-void MessagePort::entangle(std::unique_ptr<MessagePortChannel> remote)
</del><ins>+void MessagePort::entangle(std::unique_ptr<MessagePortChannel>&& remote)
</ins><span class="cx"> {
</span><span class="cx"> // Only invoked to set our initial entanglement.
</span><span class="cx"> ASSERT(!m_entangledChannel);
</span><span class="lines">@@ -152,9 +150,8 @@
</span><span class="cx"> if (is<WorkerGlobalScope>(*m_scriptExecutionContext) && downcast<WorkerGlobalScope>(*m_scriptExecutionContext).isClosing())
</span><span class="cx"> return;
</span><span class="cx">
</span><del>- Vector<RefPtr<MessagePort>> ports = MessagePort::entanglePorts(*m_scriptExecutionContext, WTFMove(channels));
- Ref<Event> event = MessageEvent::create(WTFMove(ports), WTFMove(message));
- dispatchEvent(event);
</del><ins>+ auto ports = MessagePort::entanglePorts(*m_scriptExecutionContext, WTFMove(channels));
+ dispatchEvent(MessageEvent::create(WTFMove(ports), WTFMove(message)));
</ins><span class="cx"> }
</span><span class="cx"> }
</span><span class="cx">
</span><span class="lines">@@ -174,33 +171,26 @@
</span><span class="cx"> return m_entangledChannel ? m_entangledChannel->locallyEntangledPort(m_scriptExecutionContext) : nullptr;
</span><span class="cx"> }
</span><span class="cx">
</span><del>-std::unique_ptr<MessagePortChannelArray> MessagePort::disentanglePorts(Vector<RefPtr<MessagePort>>&& ports, ExceptionCode& ec)
</del><ins>+ExceptionOr<std::unique_ptr<MessagePortChannelArray>> MessagePort::disentanglePorts(Vector<RefPtr<MessagePort>>&& ports)
</ins><span class="cx"> {
</span><span class="cx"> if (ports.isEmpty())
</span><span class="cx"> return nullptr;
</span><span class="cx">
</span><del>- // HashSet used to efficiently check for duplicates in the passed-in array.
</del><ins>+ // Walk the incoming array - if there are any duplicate ports, or null ports or cloned ports, throw an error (per section 8.3.3 of the HTML5 spec).
</ins><span class="cx"> HashSet<MessagePort*> portSet;
</span><del>-
- // Walk the incoming array - if there are any duplicate ports, or null ports or cloned ports, throw an error (per section 8.3.3 of the HTML5 spec).
</del><span class="cx"> for (auto& port : ports) {
</span><del>- if (!port || port->isNeutered() || portSet.contains(port.get())) {
- ec = DATA_CLONE_ERR;
- return nullptr;
- }
- portSet.add(port.get());
</del><ins>+ if (!port || port->isNeutered() || !portSet.add(port.get()).isNewEntry)
+ return Exception { DATA_CLONE_ERR };
</ins><span class="cx"> }
</span><span class="cx">
</span><span class="cx"> // Passed-in ports passed validity checks, so we can disentangle them.
</span><span class="cx"> auto portArray = std::make_unique<MessagePortChannelArray>(ports.size());
</span><del>- for (unsigned int i = 0 ; i < ports.size() ; ++i) {
- std::unique_ptr<MessagePortChannel> channel = ports[i]->disentangle();
- (*portArray)[i] = WTFMove(channel);
- }
- return portArray;
</del><ins>+ for (unsigned i = 0 ; i < ports.size(); ++i)
+ (*portArray)[i] = ports[i]->disentangle();
+ return WTFMove(portArray);
</ins><span class="cx"> }
</span><span class="cx">
</span><del>-Vector<RefPtr<MessagePort>> MessagePort::entanglePorts(ScriptExecutionContext& context, std::unique_ptr<MessagePortChannelArray> channels)
</del><ins>+Vector<RefPtr<MessagePort>> MessagePort::entanglePorts(ScriptExecutionContext& context, std::unique_ptr<MessagePortChannelArray>&& channels)
</ins><span class="cx"> {
</span><span class="cx"> if (!channels || !channels->size())
</span><span class="cx"> return { };
</span></span></pre></div>
<a id="trunkSourceWebCoredomMessagePorth"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/dom/MessagePort.h (207686 => 207687)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/dom/MessagePort.h        2016-10-21 18:20:07 UTC (rev 207686)
+++ trunk/Source/WebCore/dom/MessagePort.h        2016-10-21 18:32:04 UTC (rev 207687)
</span><span class="lines">@@ -24,85 +24,75 @@
</span><span class="cx"> *
</span><span class="cx"> */
</span><span class="cx">
</span><del>-#ifndef MessagePort_h
-#define MessagePort_h
</del><ins>+#pragma once
</ins><span class="cx">
</span><del>-#include "EventListener.h"
</del><span class="cx"> #include "EventTarget.h"
</span><ins>+#include "ExceptionOr.h"
</ins><span class="cx"> #include "MessagePortChannel.h"
</span><del>-#include <memory>
-#include <wtf/Forward.h>
-#include <wtf/RefPtr.h>
-#include <wtf/Vector.h>
</del><span class="cx">
</span><span class="cx"> namespace WebCore {
</span><span class="cx">
</span><del>- class Event;
- class Frame;
- class MessagePort;
- class ScriptExecutionContext;
</del><ins>+class Frame;
</ins><span class="cx">
</span><del>- class MessagePort final : public RefCounted<MessagePort>, public EventTargetWithInlineData {
- public:
- static Ref<MessagePort> create(ScriptExecutionContext& scriptExecutionContext) { return adoptRef(*new MessagePort(scriptExecutionContext)); }
- virtual ~MessagePort();
</del><ins>+class MessagePort final : public RefCounted<MessagePort>, public EventTargetWithInlineData {
+public:
+ static Ref<MessagePort> create(ScriptExecutionContext& scriptExecutionContext) { return adoptRef(*new MessagePort(scriptExecutionContext)); }
+ virtual ~MessagePort();
</ins><span class="cx">
</span><del>- void postMessage(RefPtr<SerializedScriptValue>&& message, Vector<RefPtr<MessagePort>>&&, ExceptionCode&);
</del><ins>+ ExceptionOr<void> postMessage(RefPtr<SerializedScriptValue>&& message, Vector<RefPtr<MessagePort>>&&);
</ins><span class="cx">
</span><del>- void start();
- void close();
</del><ins>+ void start();
+ void close();
</ins><span class="cx">
</span><del>- void entangle(std::unique_ptr<MessagePortChannel>);
- std::unique_ptr<MessagePortChannel> disentangle();
</del><ins>+ void entangle(std::unique_ptr<MessagePortChannel>&&);
</ins><span class="cx">
</span><del>- // Returns 0 if there is an exception, or if the passed-in array is 0/empty.
- static std::unique_ptr<MessagePortChannelArray> disentanglePorts(Vector<RefPtr<MessagePort>>&&, ExceptionCode&);
</del><ins>+ // Returns nullptr if the passed-in vector is empty.
+ static ExceptionOr<std::unique_ptr<MessagePortChannelArray>> disentanglePorts(Vector<RefPtr<MessagePort>>&&);
</ins><span class="cx">
</span><del>- static Vector<RefPtr<MessagePort>> entanglePorts(ScriptExecutionContext&, std::unique_ptr<MessagePortChannelArray>);
</del><ins>+ static Vector<RefPtr<MessagePort>> entanglePorts(ScriptExecutionContext&, std::unique_ptr<MessagePortChannelArray>&&);
</ins><span class="cx">
</span><del>- void messageAvailable();
- bool started() const { return m_started; }
</del><ins>+ void messageAvailable();
+ bool started() const { return m_started; }
</ins><span class="cx">
</span><del>- void contextDestroyed();
</del><ins>+ void contextDestroyed();
</ins><span class="cx">
</span><del>- EventTargetInterface eventTargetInterface() const override { return MessagePortEventTargetInterfaceType; }
- ScriptExecutionContext* scriptExecutionContext() const override { return m_scriptExecutionContext; }
</del><ins>+ ScriptExecutionContext* scriptExecutionContext() const final { return m_scriptExecutionContext; }
</ins><span class="cx">
</span><del>- void dispatchMessages();
</del><ins>+ void dispatchMessages();
</ins><span class="cx">
</span><del>- using RefCounted<MessagePort>::ref;
- using RefCounted<MessagePort>::deref;
</del><ins>+ bool hasPendingActivity();
</ins><span class="cx">
</span><del>- bool hasPendingActivity();
</del><ins>+ // Returns null if there is no entangled port, or if the entangled port is run by a different thread.
+ // This is used solely to enable a GC optimization. Some platforms may not be able to determine ownership
+ // of the remote port (since it may live cross-process) - those platforms may always return null.
+ MessagePort* locallyEntangledPort();
</ins><span class="cx">
</span><del>- // Returns null if there is no entangled port, or if the entangled port is run by a different thread.
- // This is used solely to enable a GC optimization. Some platforms may not be able to determine ownership
- // of the remote port (since it may live cross-process) - those platforms may always return null.
- MessagePort* locallyEntangledPort();
</del><ins>+ using RefCounted::ref;
+ using RefCounted::deref;
</ins><span class="cx">
</span><del>- // A port starts out its life entangled, and remains entangled until it is closed or is cloned.
- bool isEntangled() { return !m_closed && !isNeutered(); }
</del><ins>+private:
+ explicit MessagePort(ScriptExecutionContext&);
</ins><span class="cx">
</span><del>- // A port gets neutered when it is transferred to a new owner via postMessage().
- bool isNeutered() { return !m_entangledChannel; }
</del><ins>+ void refEventTarget() final { ref(); }
+ void derefEventTarget() final { deref(); }
</ins><span class="cx">
</span><del>- bool addEventListener(const AtomicString& eventType, Ref<EventListener>&&, const AddEventListenerOptions&) override;
</del><ins>+ bool isMessagePort() const final { return true; }
+ EventTargetInterface eventTargetInterface() const final { return MessagePortEventTargetInterfaceType; }
</ins><span class="cx">
</span><del>- private:
- explicit MessagePort(ScriptExecutionContext&);
</del><ins>+ bool addEventListener(const AtomicString& eventType, Ref<EventListener>&&, const AddEventListenerOptions&) final;
</ins><span class="cx">
</span><del>- void refEventTarget() override { ref(); }
- void derefEventTarget() override { deref(); }
- bool isMessagePort() const override { return true; }
</del><ins>+ std::unique_ptr<MessagePortChannel> disentangle();
</ins><span class="cx">
</span><del>- std::unique_ptr<MessagePortChannel> m_entangledChannel;
</del><ins>+ // A port starts out its life entangled, and remains entangled until it is closed or is cloned.
+ bool isEntangled() const { return !m_closed && !isNeutered(); }
</ins><span class="cx">
</span><del>- bool m_started;
- bool m_closed;
</del><ins>+ // A port gets neutered when it is transferred to a new owner via postMessage().
+ bool isNeutered() const { return !m_entangledChannel; }
</ins><span class="cx">
</span><del>- ScriptExecutionContext* m_scriptExecutionContext;
- };
</del><ins>+ std::unique_ptr<MessagePortChannel> m_entangledChannel;
+ bool m_started { false };
+ bool m_closed { false };
+ ScriptExecutionContext* m_scriptExecutionContext;
+};
</ins><span class="cx">
</span><span class="cx"> } // namespace WebCore
</span><del>-
-#endif // MessagePort_h
</del></span></pre></div>
<a id="trunkSourceWebCorefileapiFileReadercpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/fileapi/FileReader.cpp (207686 => 207687)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/fileapi/FileReader.cpp        2016-10-21 18:20:07 UTC (rev 207686)
+++ trunk/Source/WebCore/fileapi/FileReader.cpp        2016-10-21 18:32:04 UTC (rev 207687)
</span><span class="lines">@@ -43,11 +43,12 @@
</span><span class="cx">
</span><span class="cx"> namespace WebCore {
</span><span class="cx">
</span><ins>+// Fire the progress event at least every 50ms.
</ins><span class="cx"> static const auto progressNotificationInterval = 50ms;
</span><span class="cx">
</span><span class="cx"> Ref<FileReader> FileReader::create(ScriptExecutionContext& context)
</span><span class="cx"> {
</span><del>- Ref<FileReader> fileReader = adoptRef(*new FileReader(context));
</del><ins>+ auto fileReader = adoptRef(*new FileReader(context));
</ins><span class="cx"> fileReader->suspendIfNeeded();
</span><span class="cx"> return fileReader;
</span><span class="cx"> }
</span><span class="lines">@@ -54,15 +55,13 @@
</span><span class="cx">
</span><span class="cx"> FileReader::FileReader(ScriptExecutionContext& context)
</span><span class="cx"> : ActiveDOMObject(&context)
</span><del>- , m_state(EMPTY)
- , m_aborting(false)
- , m_readType(FileReaderLoader::ReadAsBinaryString)
</del><span class="cx"> {
</span><span class="cx"> }
</span><span class="cx">
</span><span class="cx"> FileReader::~FileReader()
</span><span class="cx"> {
</span><del>- terminate();
</del><ins>+ if (m_loader)
+ m_loader->cancel();
</ins><span class="cx"> }
</span><span class="cx">
</span><span class="cx"> bool FileReader::canSuspendForDocumentSuspension() const
</span><span class="lines">@@ -78,57 +77,59 @@
</span><span class="cx">
</span><span class="cx"> void FileReader::stop()
</span><span class="cx"> {
</span><del>- terminate();
</del><ins>+ if (m_loader) {
+ m_loader->cancel();
+ m_loader = nullptr;
+ }
+ m_state = DONE;
</ins><span class="cx"> }
</span><span class="cx">
</span><del>-void FileReader::readAsArrayBuffer(Blob* blob, ExceptionCode& ec)
</del><ins>+ExceptionOr<void> FileReader::readAsArrayBuffer(Blob* blob)
</ins><span class="cx"> {
</span><span class="cx"> if (!blob)
</span><del>- return;
</del><ins>+ return { };
</ins><span class="cx">
</span><span class="cx"> LOG(FileAPI, "FileReader: reading as array buffer: %s %s\n", blob->url().string().utf8().data(), is<File>(*blob) ? downcast<File>(*blob).path().utf8().data() : "");
</span><span class="cx">
</span><del>- readInternal(*blob, FileReaderLoader::ReadAsArrayBuffer, ec);
</del><ins>+ return readInternal(*blob, FileReaderLoader::ReadAsArrayBuffer);
</ins><span class="cx"> }
</span><span class="cx">
</span><del>-void FileReader::readAsBinaryString(Blob* blob, ExceptionCode& ec)
</del><ins>+ExceptionOr<void> FileReader::readAsBinaryString(Blob* blob)
</ins><span class="cx"> {
</span><span class="cx"> if (!blob)
</span><del>- return;
</del><ins>+ return { };
</ins><span class="cx">
</span><span class="cx"> LOG(FileAPI, "FileReader: reading as binary: %s %s\n", blob->url().string().utf8().data(), is<File>(*blob) ? downcast<File>(*blob).path().utf8().data() : "");
</span><span class="cx">
</span><del>- readInternal(*blob, FileReaderLoader::ReadAsBinaryString, ec);
</del><ins>+ return readInternal(*blob, FileReaderLoader::ReadAsBinaryString);
</ins><span class="cx"> }
</span><span class="cx">
</span><del>-void FileReader::readAsText(Blob* blob, const String& encoding, ExceptionCode& ec)
</del><ins>+ExceptionOr<void> FileReader::readAsText(Blob* blob, const String& encoding)
</ins><span class="cx"> {
</span><span class="cx"> if (!blob)
</span><del>- return;
</del><ins>+ return { };
</ins><span class="cx">
</span><span class="cx"> LOG(FileAPI, "FileReader: reading as text: %s %s\n", blob->url().string().utf8().data(), is<File>(*blob) ? downcast<File>(*blob).path().utf8().data() : "");
</span><span class="cx">
</span><span class="cx"> m_encoding = encoding;
</span><del>- readInternal(*blob, FileReaderLoader::ReadAsText, ec);
</del><ins>+ return readInternal(*blob, FileReaderLoader::ReadAsText);
</ins><span class="cx"> }
</span><span class="cx">
</span><del>-void FileReader::readAsDataURL(Blob* blob, ExceptionCode& ec)
</del><ins>+ExceptionOr<void> FileReader::readAsDataURL(Blob* blob)
</ins><span class="cx"> {
</span><span class="cx"> if (!blob)
</span><del>- return;
</del><ins>+ return { };
</ins><span class="cx">
</span><span class="cx"> LOG(FileAPI, "FileReader: reading as data URL: %s %s\n", blob->url().string().utf8().data(), is<File>(*blob) ? downcast<File>(*blob).path().utf8().data() : "");
</span><span class="cx">
</span><del>- readInternal(*blob, FileReaderLoader::ReadAsDataURL, ec);
</del><ins>+ return readInternal(*blob, FileReaderLoader::ReadAsDataURL);
</ins><span class="cx"> }
</span><span class="cx">
</span><del>-void FileReader::readInternal(Blob& blob, FileReaderLoader::ReadType type, ExceptionCode& ec)
</del><ins>+ExceptionOr<void> FileReader::readInternal(Blob& blob, FileReaderLoader::ReadType type)
</ins><span class="cx"> {
</span><span class="cx"> // If multiple concurrent read methods are called on the same FileReader, INVALID_STATE_ERR should be thrown when the state is LOADING.
</span><del>- if (m_state == LOADING) {
- ec = INVALID_STATE_ERR;
- return;
- }
</del><ins>+ if (m_state == LOADING)
+ return Exception { INVALID_STATE_ERR };
</ins><span class="cx">
</span><span class="cx"> setPendingActivity(this);
</span><span class="cx">
</span><span class="lines">@@ -137,10 +138,12 @@
</span><span class="cx"> m_state = LOADING;
</span><span class="cx"> m_error = nullptr;
</span><span class="cx">
</span><del>- m_loader = std::make_unique<FileReaderLoader>(m_readType, this);
</del><ins>+ m_loader = std::make_unique<FileReaderLoader>(m_readType, static_cast<FileReaderLoaderClient*>(this));
</ins><span class="cx"> m_loader->setEncoding(m_encoding);
</span><span class="cx"> m_loader->setDataType(m_blob->type());
</span><span class="cx"> m_loader->start(scriptExecutionContext(), blob);
</span><ins>+
+ return { };
</ins><span class="cx"> }
</span><span class="cx">
</span><span class="cx"> void FileReader::abort()
</span><span class="lines">@@ -155,7 +158,7 @@
</span><span class="cx"> scriptExecutionContext()->postTask([this] (ScriptExecutionContext&) {
</span><span class="cx"> ASSERT(m_state != DONE);
</span><span class="cx">
</span><del>- terminate();
</del><ins>+ stop();
</ins><span class="cx"> m_aborting = false;
</span><span class="cx">
</span><span class="cx"> m_error = FileError::create(FileError::ABORT_ERR);
</span><span class="lines">@@ -169,15 +172,6 @@
</span><span class="cx"> });
</span><span class="cx"> }
</span><span class="cx">
</span><del>-void FileReader::terminate()
-{
- if (m_loader) {
- m_loader->cancel();
- m_loader = nullptr;
- }
- m_state = DONE;
-}
-
</del><span class="cx"> void FileReader::didStartLoading()
</span><span class="cx"> {
</span><span class="cx"> fireEvent(eventNames().loadstartEvent);
</span><span class="lines">@@ -185,13 +179,11 @@
</span><span class="cx">
</span><span class="cx"> void FileReader::didReceiveData()
</span><span class="cx"> {
</span><del>- // Fire the progress event at least every 50ms.
</del><span class="cx"> auto now = std::chrono::steady_clock::now();
</span><span class="cx"> if (!m_lastProgressNotificationTime.time_since_epoch().count()) {
</span><span class="cx"> m_lastProgressNotificationTime = now;
</span><span class="cx"> return;
</span><span class="cx"> }
</span><del>-
</del><span class="cx"> if (now - m_lastProgressNotificationTime > progressNotificationInterval) {
</span><span class="cx"> fireEvent(eventNames().progressEvent);
</span><span class="cx"> m_lastProgressNotificationTime = now;
</span></span></pre></div>
<a id="trunkSourceWebCorefileapiFileReaderh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/fileapi/FileReader.h (207686 => 207687)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/fileapi/FileReader.h        2016-10-21 18:20:07 UTC (rev 207686)
+++ trunk/Source/WebCore/fileapi/FileReader.h        2016-10-21 18:32:04 UTC (rev 207687)
</span><span class="lines">@@ -28,18 +28,15 @@
</span><span class="cx"> * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
</span><span class="cx"> */
</span><span class="cx">
</span><del>-#ifndef FileReader_h
-#define FileReader_h
</del><ins>+#pragma once
</ins><span class="cx">
</span><span class="cx"> #include "ActiveDOMObject.h"
</span><span class="cx"> #include "EventTarget.h"
</span><ins>+#include "ExceptionOr.h"
</ins><span class="cx"> #include "FileError.h"
</span><span class="cx"> #include "FileReaderLoader.h"
</span><span class="cx"> #include "FileReaderLoaderClient.h"
</span><span class="cx"> #include <chrono>
</span><del>-#include <wtf/Forward.h>
-#include <wtf/RefCounted.h>
-#include <wtf/text/WTFString.h>
</del><span class="cx">
</span><span class="cx"> namespace JSC {
</span><span class="cx"> class ArrayBuffer;
</span><span class="lines">@@ -50,9 +47,7 @@
</span><span class="cx"> class Blob;
</span><span class="cx"> class ScriptExecutionContext;
</span><span class="cx">
</span><del>-typedef int ExceptionCode;
-
-class FileReader final : public RefCounted<FileReader>, public ActiveDOMObject, public EventTargetWithInlineData, public FileReaderLoaderClient {
</del><ins>+class FileReader final : public RefCounted<FileReader>, public ActiveDOMObject, public EventTargetWithInlineData, private FileReaderLoaderClient {
</ins><span class="cx"> public:
</span><span class="cx"> static Ref<FileReader> create(ScriptExecutionContext&);
</span><span class="cx">
</span><span class="lines">@@ -64,10 +59,10 @@
</span><span class="cx"> DONE = 2
</span><span class="cx"> };
</span><span class="cx">
</span><del>- void readAsArrayBuffer(Blob*, ExceptionCode&);
- void readAsBinaryString(Blob*, ExceptionCode&);
- void readAsText(Blob*, const String& encoding, ExceptionCode&);
- void readAsDataURL(Blob*, ExceptionCode&);
</del><ins>+ ExceptionOr<void> readAsArrayBuffer(Blob*);
+ ExceptionOr<void> readAsBinaryString(Blob*);
+ ExceptionOr<void> readAsText(Blob*, const String& encoding);
+ ExceptionOr<void> readAsDataURL(Blob*);
</ins><span class="cx"> void abort();
</span><span class="cx">
</span><span class="cx"> void doAbort();
</span><span class="lines">@@ -78,40 +73,34 @@
</span><span class="cx"> RefPtr<JSC::ArrayBuffer> arrayBufferResult() const;
</span><span class="cx"> String stringResult();
</span><span class="cx">
</span><del>- // EventTarget
- EventTargetInterface eventTargetInterface() const override { return FileReaderEventTargetInterfaceType; }
- ScriptExecutionContext* scriptExecutionContext() const override { return ActiveDOMObject::scriptExecutionContext(); }
</del><ins>+ using RefCounted::ref;
+ using RefCounted::deref;
</ins><span class="cx">
</span><del>- // FileReaderLoaderClient
- void didStartLoading() override;
- void didReceiveData() override;
- void didFinishLoading() override;
- void didFail(int errorCode) override;
-
- using RefCounted<FileReader>::ref;
- using RefCounted<FileReader>::deref;
-
</del><span class="cx"> private:
</span><span class="cx"> explicit FileReader(ScriptExecutionContext&);
</span><span class="cx">
</span><del>- // ActiveDOMObject API.
- const char* activeDOMObjectName() const override;
- bool canSuspendForDocumentSuspension() const override;
- void stop() override;
</del><ins>+ const char* activeDOMObjectName() const final;
+ bool canSuspendForDocumentSuspension() const final;
+ void stop() final;
</ins><span class="cx">
</span><del>- // EventTarget
- void refEventTarget() override { ref(); }
- void derefEventTarget() override { deref(); }
</del><ins>+ EventTargetInterface eventTargetInterface() const final { return FileReaderEventTargetInterfaceType; }
+ ScriptExecutionContext* scriptExecutionContext() const final { return ActiveDOMObject::scriptExecutionContext(); }
+ void refEventTarget() final { ref(); }
+ void derefEventTarget() final { deref(); }
</ins><span class="cx">
</span><del>- void terminate();
- void readInternal(Blob&, FileReaderLoader::ReadType, ExceptionCode&);
</del><ins>+ void didStartLoading() final;
+ void didReceiveData() final;
+ void didFinishLoading() final;
+ void didFail(int errorCode) final;
+
+ ExceptionOr<void> readInternal(Blob&, FileReaderLoader::ReadType);
</ins><span class="cx"> void fireErrorEvent(int httpStatusCode);
</span><span class="cx"> void fireEvent(const AtomicString& type);
</span><span class="cx">
</span><del>- ReadyState m_state;
- bool m_aborting;
</del><ins>+ ReadyState m_state { EMPTY };
+ bool m_aborting { false };
</ins><span class="cx"> RefPtr<Blob> m_blob;
</span><del>- FileReaderLoader::ReadType m_readType;
</del><ins>+ FileReaderLoader::ReadType m_readType { FileReaderLoader::ReadAsBinaryString };
</ins><span class="cx"> String m_encoding;
</span><span class="cx"> std::unique_ptr<FileReaderLoader> m_loader;
</span><span class="cx"> RefPtr<FileError> m_error;
</span><span class="lines">@@ -119,5 +108,3 @@
</span><span class="cx"> };
</span><span class="cx">
</span><span class="cx"> } // namespace WebCore
</span><del>-
-#endif // FileReader_h
</del></span></pre></div>
<a id="trunkSourceWebCorefileapiFileReaderidl"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/fileapi/FileReader.idl (207686 => 207687)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/fileapi/FileReader.idl        2016-10-21 18:20:07 UTC (rev 207686)
+++ trunk/Source/WebCore/fileapi/FileReader.idl        2016-10-21 18:32:04 UTC (rev 207687)
</span><span class="lines">@@ -43,10 +43,10 @@
</span><span class="cx">
</span><span class="cx"> // FIXME: In all four methods found below, the blob parameter should not be nullable.
</span><span class="cx"> // async read methods
</span><del>- [MayThrowLegacyException] void readAsArrayBuffer(Blob? blob);
- [MayThrowLegacyException] void readAsBinaryString(Blob? blob);
- [MayThrowLegacyException] void readAsText(Blob? blob, optional DOMString encoding);
- [MayThrowLegacyException] void readAsDataURL(Blob? blob);
</del><ins>+ [MayThrowException] void readAsArrayBuffer(Blob? blob);
+ [MayThrowException] void readAsBinaryString(Blob? blob);
+ [MayThrowException] void readAsText(Blob? blob, optional DOMString encoding);
+ [MayThrowException] void readAsDataURL(Blob? blob);
</ins><span class="cx">
</span><span class="cx"> void abort();
</span><span class="cx">
</span></span></pre></div>
<a id="trunkSourceWebCorefileapiFileReaderSynccpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/fileapi/FileReaderSync.cpp (207686 => 207687)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/fileapi/FileReaderSync.cpp        2016-10-21 18:20:07 UTC (rev 207686)
+++ trunk/Source/WebCore/fileapi/FileReaderSync.cpp        2016-10-21 18:32:04 UTC (rev 207687)
</span><span class="lines">@@ -44,41 +44,49 @@
</span><span class="cx"> {
</span><span class="cx"> }
</span><span class="cx">
</span><del>-RefPtr<ArrayBuffer> FileReaderSync::readAsArrayBuffer(ScriptExecutionContext& scriptExecutionContext, Blob& blob, ExceptionCode& ec)
</del><ins>+ExceptionOr<RefPtr<ArrayBuffer>> FileReaderSync::readAsArrayBuffer(ScriptExecutionContext& scriptExecutionContext, Blob& blob)
</ins><span class="cx"> {
</span><span class="cx"> FileReaderLoader loader(FileReaderLoader::ReadAsArrayBuffer, 0);
</span><del>- startLoading(scriptExecutionContext, loader, blob, ec);
-
</del><ins>+ auto result = startLoading(scriptExecutionContext, loader, blob);
+ if (result.hasException())
+ return result.releaseException();
</ins><span class="cx"> return loader.arrayBufferResult();
</span><span class="cx"> }
</span><span class="cx">
</span><del>-String FileReaderSync::readAsBinaryString(ScriptExecutionContext& scriptExecutionContext, Blob& blob, ExceptionCode& ec)
</del><ins>+ExceptionOr<String> FileReaderSync::readAsBinaryString(ScriptExecutionContext& scriptExecutionContext, Blob& blob)
</ins><span class="cx"> {
</span><span class="cx"> FileReaderLoader loader(FileReaderLoader::ReadAsBinaryString, 0);
</span><del>- startLoading(scriptExecutionContext, loader, blob, ec);
- return loader.stringResult();
</del><ins>+ return startLoadingString(scriptExecutionContext, loader, blob);
</ins><span class="cx"> }
</span><span class="cx">
</span><del>-String FileReaderSync::readAsText(ScriptExecutionContext& scriptExecutionContext, Blob& blob, const String& encoding, ExceptionCode& ec)
</del><ins>+ExceptionOr<String> FileReaderSync::readAsText(ScriptExecutionContext& scriptExecutionContext, Blob& blob, const String& encoding)
</ins><span class="cx"> {
</span><span class="cx"> FileReaderLoader loader(FileReaderLoader::ReadAsText, 0);
</span><span class="cx"> loader.setEncoding(encoding);
</span><del>- startLoading(scriptExecutionContext, loader, blob, ec);
- return loader.stringResult();
</del><ins>+ return startLoadingString(scriptExecutionContext, loader, blob);
</ins><span class="cx"> }
</span><span class="cx">
</span><del>-String FileReaderSync::readAsDataURL(ScriptExecutionContext& scriptExecutionContext, Blob& blob, ExceptionCode& ec)
</del><ins>+ExceptionOr<String> FileReaderSync::readAsDataURL(ScriptExecutionContext& scriptExecutionContext, Blob& blob)
</ins><span class="cx"> {
</span><span class="cx"> FileReaderLoader loader(FileReaderLoader::ReadAsDataURL, 0);
</span><span class="cx"> loader.setDataType(blob.type());
</span><del>- startLoading(scriptExecutionContext, loader, blob, ec);
- return loader.stringResult();
</del><ins>+ return startLoadingString(scriptExecutionContext, loader, blob);
</ins><span class="cx"> }
</span><span class="cx">
</span><del>-void FileReaderSync::startLoading(ScriptExecutionContext& scriptExecutionContext, FileReaderLoader& loader, Blob& blob, ExceptionCode& ec)
</del><ins>+ExceptionOr<void> FileReaderSync::startLoading(ScriptExecutionContext& scriptExecutionContext, FileReaderLoader& loader, Blob& blob)
</ins><span class="cx"> {
</span><span class="cx"> loader.start(&scriptExecutionContext, blob);
</span><del>- ec = FileException::ErrorCodeToExceptionCode(loader.errorCode());
</del><ins>+ if (ExceptionCode code = FileException::ErrorCodeToExceptionCode(loader.errorCode()))
+ return Exception { code };
+ return { };
</ins><span class="cx"> }
</span><span class="cx">
</span><ins>+ExceptionOr<String> FileReaderSync::startLoadingString(ScriptExecutionContext& scriptExecutionContext, FileReaderLoader& loader, Blob& blob)
+{
+ auto result = startLoading(scriptExecutionContext, loader, blob);
+ if (result.hasException())
+ return result.releaseException();
+ return loader.stringResult();
+}
+
</ins><span class="cx"> } // namespace WebCore
</span></span></pre></div>
<a id="trunkSourceWebCorefileapiFileReaderSynch"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/fileapi/FileReaderSync.h (207686 => 207687)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/fileapi/FileReaderSync.h        2016-10-21 18:20:07 UTC (rev 207686)
+++ trunk/Source/WebCore/fileapi/FileReaderSync.h        2016-10-21 18:32:04 UTC (rev 207687)
</span><span class="lines">@@ -28,12 +28,9 @@
</span><span class="cx"> * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
</span><span class="cx"> */
</span><span class="cx">
</span><del>-#ifndef FileReaderSync_h
-#define FileReaderSync_h
</del><ins>+#pragma once
</ins><span class="cx">
</span><del>-#include <wtf/Forward.h>
-#include <wtf/RefCounted.h>
-#include <wtf/text/WTFString.h>
</del><ins>+#include "ExceptionOr.h"
</ins><span class="cx">
</span><span class="cx"> namespace JSC {
</span><span class="cx"> class ArrayBuffer;
</span><span class="lines">@@ -45,8 +42,6 @@
</span><span class="cx"> class FileReaderLoader;
</span><span class="cx"> class ScriptExecutionContext;
</span><span class="cx">
</span><del>-typedef int ExceptionCode;
-
</del><span class="cx"> class FileReaderSync : public RefCounted<FileReaderSync> {
</span><span class="cx"> public:
</span><span class="cx"> static Ref<FileReaderSync> create()
</span><span class="lines">@@ -54,19 +49,16 @@
</span><span class="cx"> return adoptRef(*new FileReaderSync);
</span><span class="cx"> }
</span><span class="cx">
</span><del>- virtual ~FileReaderSync() { }
</del><ins>+ ExceptionOr<RefPtr<JSC::ArrayBuffer>> readAsArrayBuffer(ScriptExecutionContext&, Blob&);
+ ExceptionOr<String> readAsBinaryString(ScriptExecutionContext&, Blob&);
+ ExceptionOr<String> readAsText(ScriptExecutionContext&, Blob&, const String& encoding);
+ ExceptionOr<String> readAsDataURL(ScriptExecutionContext&, Blob&);
</ins><span class="cx">
</span><del>- RefPtr<JSC::ArrayBuffer> readAsArrayBuffer(ScriptExecutionContext&, Blob&, ExceptionCode&);
- String readAsBinaryString(ScriptExecutionContext&, Blob&, ExceptionCode&);
- String readAsText(ScriptExecutionContext&, Blob&, const String& encoding, ExceptionCode&);
- String readAsDataURL(ScriptExecutionContext&, Blob&, ExceptionCode&);
-
</del><span class="cx"> private:
</span><span class="cx"> FileReaderSync();
</span><span class="cx">
</span><del>- void startLoading(ScriptExecutionContext&, FileReaderLoader&, Blob&, ExceptionCode&);
</del><ins>+ ExceptionOr<void> startLoading(ScriptExecutionContext&, FileReaderLoader&, Blob&);
+ ExceptionOr<String> startLoadingString(ScriptExecutionContext&, FileReaderLoader&, Blob&);
</ins><span class="cx"> };
</span><span class="cx">
</span><span class="cx"> } // namespace WebCore
</span><del>-
-#endif // FileReaderSync_h
</del></span></pre></div>
<a id="trunkSourceWebCorefileapiFileReaderSyncidl"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/fileapi/FileReaderSync.idl (207686 => 207687)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/fileapi/FileReaderSync.idl        2016-10-21 18:20:07 UTC (rev 207686)
+++ trunk/Source/WebCore/fileapi/FileReaderSync.idl        2016-10-21 18:32:04 UTC (rev 207687)
</span><span class="lines">@@ -31,9 +31,10 @@
</span><span class="cx"> [
</span><span class="cx"> Constructor,
</span><span class="cx"> Exposed=Worker,
</span><ins>+ ImplementationLacksVTable,
</ins><span class="cx"> ] interface FileReaderSync {
</span><del>- [CallWith=ScriptExecutionContext, MayThrowLegacyException] ArrayBuffer readAsArrayBuffer(Blob blob);
- [CallWith=ScriptExecutionContext, MayThrowLegacyException] DOMString readAsBinaryString(Blob blob);
- [CallWith=ScriptExecutionContext, MayThrowLegacyException] DOMString readAsText(Blob blob, optional DOMString encoding = "");
- [CallWith=ScriptExecutionContext, MayThrowLegacyException] DOMString readAsDataURL(Blob blob);
</del><ins>+ [CallWith=ScriptExecutionContext, MayThrowException] ArrayBuffer readAsArrayBuffer(Blob blob);
+ [CallWith=ScriptExecutionContext, MayThrowException] DOMString readAsBinaryString(Blob blob);
+ [CallWith=ScriptExecutionContext, MayThrowException] DOMString readAsText(Blob blob, optional DOMString encoding = "");
+ [CallWith=ScriptExecutionContext, MayThrowException] DOMString readAsDataURL(Blob blob);
</ins><span class="cx"> };
</span></span></pre></div>
<a id="trunkSourceWebCorepageBase64Utilitiescpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/page/Base64Utilities.cpp (207686 => 207687)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/page/Base64Utilities.cpp        2016-10-21 18:20:07 UTC (rev 207686)
+++ trunk/Source/WebCore/page/Base64Utilities.cpp        2016-10-21 18:32:04 UTC (rev 207687)
</span><span class="lines">@@ -26,38 +26,30 @@
</span><span class="cx"> #include "config.h"
</span><span class="cx"> #include "Base64Utilities.h"
</span><span class="cx">
</span><ins>+#include "ExceptionCode.h"
</ins><span class="cx"> #include <wtf/text/Base64.h>
</span><span class="cx">
</span><span class="cx"> namespace WebCore {
</span><span class="cx">
</span><del>-String Base64Utilities::btoa(const String& stringToEncode, ExceptionCode& ec)
</del><ins>+ExceptionOr<String> Base64Utilities::btoa(const String& stringToEncode)
</ins><span class="cx"> {
</span><span class="cx"> if (stringToEncode.isNull())
</span><span class="cx"> return String();
</span><span class="cx">
</span><del>- if (!stringToEncode.containsOnlyLatin1()) {
- ec = INVALID_CHARACTER_ERR;
- return String();
- }
</del><ins>+ if (!stringToEncode.containsOnlyLatin1())
+ return Exception { INVALID_CHARACTER_ERR };
</ins><span class="cx">
</span><span class="cx"> return base64Encode(stringToEncode.latin1());
</span><span class="cx"> }
</span><span class="cx">
</span><del>-String Base64Utilities::atob(const String& encodedString, ExceptionCode& ec)
</del><ins>+ExceptionOr<String> Base64Utilities::atob(const String& encodedString)
</ins><span class="cx"> {
</span><span class="cx"> if (encodedString.isNull())
</span><span class="cx"> return String();
</span><span class="cx">
</span><del>- if (!encodedString.containsOnlyLatin1()) {
- ec = INVALID_CHARACTER_ERR;
- return String();
- }
-
</del><span class="cx"> Vector<char> out;
</span><del>- if (!base64Decode(encodedString, out, Base64ValidatePadding | Base64IgnoreSpacesAndNewLines)) {
- ec = INVALID_CHARACTER_ERR;
- return String();
- }
</del><ins>+ if (!base64Decode(encodedString, out, Base64ValidatePadding | Base64IgnoreSpacesAndNewLines))
+ return Exception { INVALID_CHARACTER_ERR };
</ins><span class="cx">
</span><span class="cx"> return String(out.data(), out.size());
</span><span class="cx"> }
</span></span></pre></div>
<a id="trunkSourceWebCorepageBase64Utilitiesh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/page/Base64Utilities.h (207686 => 207687)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/page/Base64Utilities.h        2016-10-21 18:20:07 UTC (rev 207686)
+++ trunk/Source/WebCore/page/Base64Utilities.h        2016-10-21 18:32:04 UTC (rev 207687)
</span><span class="lines">@@ -25,15 +25,14 @@
</span><span class="cx">
</span><span class="cx"> #pragma once
</span><span class="cx">
</span><del>-#include "ExceptionCode.h"
-#include <wtf/text/WTFString.h>
</del><ins>+#include "ExceptionOr.h"
</ins><span class="cx">
</span><span class="cx"> namespace WebCore {
</span><span class="cx">
</span><span class="cx"> class Base64Utilities {
</span><span class="cx"> public:
</span><del>- static String btoa(const String& stringToEncode, ExceptionCode&);
- static String atob(const String& encodedString, ExceptionCode&);
</del><ins>+ static ExceptionOr<String> btoa(const String&);
+ static ExceptionOr<String> atob(const String&);
</ins><span class="cx"> };
</span><span class="cx">
</span><span class="cx"> }
</span></span></pre></div>
<a id="trunkSourceWebCorepageDOMWindowcpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/page/DOMWindow.cpp (207686 => 207687)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/page/DOMWindow.cpp        2016-10-21 18:20:07 UTC (rev 207686)
+++ trunk/Source/WebCore/page/DOMWindow.cpp        2016-10-21 18:32:04 UTC (rev 207687)
</span><span class="lines">@@ -750,7 +750,7 @@
</span><span class="cx"> if (!isCurrentlyDisplayedInFrame())
</span><span class="cx"> return nullptr;
</span><span class="cx"> if (!m_navigator)
</span><del>- m_navigator = Navigator::create(m_frame);
</del><ins>+ m_navigator = Navigator::create(*m_frame);
</ins><span class="cx"> return m_navigator.get();
</span><span class="cx"> }
</span><span class="cx">
</span><span class="lines">@@ -914,10 +914,9 @@
</span><span class="cx"> return Exception { SYNTAX_ERR };
</span><span class="cx"> }
</span><span class="cx">
</span><del>- ExceptionCode ec = 0;
- auto channels = MessagePort::disentanglePorts(WTFMove(ports), ec);
- if (ec)
- return Exception { ec };
</del><ins>+ auto channels = MessagePort::disentanglePorts(WTFMove(ports));
+ if (channels.hasException())
+ return channels.releaseException();
</ins><span class="cx">
</span><span class="cx"> // Capture the source of the message. We need to do this synchronously
</span><span class="cx"> // in order to capture the source of the message correctly.
</span><span class="lines">@@ -931,7 +930,7 @@
</span><span class="cx"> stackTrace = createScriptCallStack(JSMainThreadExecState::currentState(), ScriptCallStack::maxCallStackSizeToCapture);
</span><span class="cx">
</span><span class="cx"> // Schedule the message.
</span><del>- auto* timer = new PostMessageTimer(*this, PassRefPtr<SerializedScriptValue> { WTFMove(message) }, sourceOrigin, source, WTFMove(channels), WTFMove(target), WTFMove(stackTrace));
</del><ins>+ auto* timer = new PostMessageTimer(*this, WTFMove(message), sourceOrigin, source, channels.releaseReturnValue(), WTFMove(target), WTFMove(stackTrace));
</ins><span class="cx"> timer->startOneShot(0);
</span><span class="cx">
</span><span class="cx"> return { };
</span></span></pre></div>
<a id="trunkSourceWebCorepageNavigatorcpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/page/Navigator.cpp (207686 => 207687)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/page/Navigator.cpp        2016-10-21 18:20:07 UTC (rev 207686)
+++ trunk/Source/WebCore/page/Navigator.cpp        2016-10-21 18:32:04 UTC (rev 207687)
</span><span class="lines">@@ -43,8 +43,8 @@
</span><span class="cx">
</span><span class="cx"> namespace WebCore {
</span><span class="cx">
</span><del>-Navigator::Navigator(Frame* frame)
- : DOMWindowProperty(frame)
</del><ins>+Navigator::Navigator(Frame& frame)
+ : DOMWindowProperty(&frame)
</ins><span class="cx"> {
</span><span class="cx"> }
</span><span class="cx">
</span><span class="lines">@@ -56,14 +56,14 @@
</span><span class="cx"> // appear in the appVersion string. This is to avoid problems with old versions of a
</span><span class="cx"> // library called OpenCube QuickMenu, which as of this writing is still being used on
</span><span class="cx"> // sites such as nwa.com -- the library thinks Safari is Netscape 4 if we don't do this!
</span><del>-static bool shouldHideFourDot(Frame* frame)
</del><ins>+static bool shouldHideFourDot(Frame& frame)
</ins><span class="cx"> {
</span><del>- const String* sourceURL = frame->script().sourceURL();
</del><ins>+ auto* sourceURL = frame.script().sourceURL();
</ins><span class="cx"> if (!sourceURL)
</span><span class="cx"> return false;
</span><span class="cx"> if (!(sourceURL->endsWith("/dqm_script.js") || sourceURL->endsWith("/dqm_loader.js") || sourceURL->endsWith("/tdqm_loader.js")))
</span><span class="cx"> return false;
</span><del>- return frame->settings().needsSiteSpecificQuirks();
</del><ins>+ return frame.settings().needsSiteSpecificQuirks();
</ins><span class="cx"> }
</span><span class="cx">
</span><span class="cx"> String Navigator::appVersion() const
</span><span class="lines">@@ -71,7 +71,7 @@
</span><span class="cx"> if (!m_frame)
</span><span class="cx"> return String();
</span><span class="cx"> String appVersion = NavigatorBase::appVersion();
</span><del>- if (shouldHideFourDot(m_frame))
</del><ins>+ if (shouldHideFourDot(*m_frame))
</ins><span class="cx"> appVersion.replace("4.", "4_");
</span><span class="cx"> return appVersion;
</span><span class="cx"> }
</span><span class="lines">@@ -80,27 +80,27 @@
</span><span class="cx"> {
</span><span class="cx"> if (!m_frame)
</span><span class="cx"> return String();
</span><del>-
</del><ins>+
</ins><span class="cx"> // If the frame is already detached, FrameLoader::userAgent may malfunction, because it calls a client method
</span><span class="cx"> // that uses frame's WebView (at least, in Mac WebKit).
</span><span class="cx"> if (!m_frame->page())
</span><span class="cx"> return String();
</span><del>-
</del><ins>+
</ins><span class="cx"> return m_frame->loader().userAgent(m_frame->document()->url());
</span><span class="cx"> }
</span><span class="cx">
</span><del>-DOMPluginArray* Navigator::plugins() const
</del><ins>+DOMPluginArray& Navigator::plugins()
</ins><span class="cx"> {
</span><span class="cx"> if (!m_plugins)
</span><span class="cx"> m_plugins = DOMPluginArray::create(m_frame);
</span><del>- return m_plugins.get();
</del><ins>+ return *m_plugins;
</ins><span class="cx"> }
</span><span class="cx">
</span><del>-DOMMimeTypeArray* Navigator::mimeTypes() const
</del><ins>+DOMMimeTypeArray& Navigator::mimeTypes()
</ins><span class="cx"> {
</span><span class="cx"> if (!m_mimeTypes)
</span><span class="cx"> m_mimeTypes = DOMMimeTypeArray::create(m_frame);
</span><del>- return m_mimeTypes.get();
</del><ins>+ return *m_mimeTypes;
</ins><span class="cx"> }
</span><span class="cx">
</span><span class="cx"> bool Navigator::cookieEnabled() const
</span><span class="lines">@@ -114,7 +114,7 @@
</span><span class="cx"> auto* document = m_frame->document();
</span><span class="cx"> if (!document)
</span><span class="cx"> return false;
</span><del>-
</del><ins>+
</ins><span class="cx"> return cookiesEnabled(*document);
</span><span class="cx"> }
</span><span class="cx">
</span><span class="lines">@@ -132,15 +132,16 @@
</span><span class="cx"> }
</span><span class="cx">
</span><span class="cx"> #if PLATFORM(IOS)
</span><ins>+
</ins><span class="cx"> bool Navigator::standalone() const
</span><span class="cx"> {
</span><span class="cx"> return m_frame && m_frame->settings().standalone();
</span><span class="cx"> }
</span><ins>+
</ins><span class="cx"> #endif
</span><span class="cx">
</span><span class="cx"> void Navigator::getStorageUpdates()
</span><span class="cx"> {
</span><del>- // FIXME: Remove this method or rename to yieldForStorageUpdates.
</del><span class="cx"> }
</span><span class="cx">
</span><span class="cx"> } // namespace WebCore
</span></span></pre></div>
<a id="trunkSourceWebCorepageNavigatorh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/page/Navigator.h (207686 => 207687)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/page/Navigator.h        2016-10-21 18:20:07 UTC (rev 207686)
+++ trunk/Source/WebCore/page/Navigator.h        2016-10-21 18:32:04 UTC (rev 207687)
</span><span class="lines">@@ -17,47 +17,38 @@
</span><span class="cx"> Boston, MA 02110-1301, USA.
</span><span class="cx"> */
</span><span class="cx">
</span><del>-#ifndef Navigator_h
-#define Navigator_h
</del><ins>+#pragma once
</ins><span class="cx">
</span><span class="cx"> #include "DOMWindowProperty.h"
</span><span class="cx"> #include "NavigatorBase.h"
</span><span class="cx"> #include "ScriptWrappable.h"
</span><span class="cx"> #include "Supplementable.h"
</span><del>-#include <wtf/Forward.h>
-#include <wtf/RefCounted.h>
-#include <wtf/RefPtr.h>
</del><span class="cx">
</span><span class="cx"> namespace WebCore {
</span><span class="cx">
</span><span class="cx"> class DOMMimeTypeArray;
</span><span class="cx"> class DOMPluginArray;
</span><del>-class Frame;
-class PluginData;
</del><span class="cx">
</span><del>-typedef int ExceptionCode;
-
-class Navigator : public NavigatorBase, public ScriptWrappable, public RefCounted<Navigator>, public DOMWindowProperty, public Supplementable<Navigator> {
</del><ins>+class Navigator final : public NavigatorBase, public ScriptWrappable, public DOMWindowProperty, public Supplementable<Navigator> {
</ins><span class="cx"> public:
</span><del>- static Ref<Navigator> create(Frame* frame) { return adoptRef(*new Navigator(frame)); }
</del><ins>+ static Ref<Navigator> create(Frame& frame) { return adoptRef(*new Navigator(frame)); }
</ins><span class="cx"> virtual ~Navigator();
</span><span class="cx">
</span><span class="cx"> String appVersion() const;
</span><del>- DOMPluginArray* plugins() const;
- DOMMimeTypeArray* mimeTypes() const;
</del><ins>+ DOMPluginArray& plugins();
+ DOMMimeTypeArray& mimeTypes();
</ins><span class="cx"> bool cookieEnabled() const;
</span><span class="cx"> bool javaEnabled() const;
</span><del>- virtual String userAgent() const;
</del><ins>+ String userAgent() const final;
</ins><span class="cx">
</span><span class="cx"> #if PLATFORM(IOS)
</span><span class="cx"> bool standalone() const;
</span><span class="cx"> #endif
</span><span class="cx">
</span><del>- // Relinquishes the storage lock, if one exists.
</del><span class="cx"> void getStorageUpdates();
</span><span class="cx">
</span><span class="cx"> private:
</span><del>- explicit Navigator(Frame*);
</del><ins>+ explicit Navigator(Frame&);
</ins><span class="cx">
</span><span class="cx"> mutable RefPtr<DOMPluginArray> m_plugins;
</span><span class="cx"> mutable RefPtr<DOMMimeTypeArray> m_mimeTypes;
</span><span class="lines">@@ -64,5 +55,3 @@
</span><span class="cx"> };
</span><span class="cx">
</span><span class="cx"> }
</span><del>-
-#endif
</del></span></pre></div>
<a id="trunkSourceWebCorepageNavigatorBaseh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/page/NavigatorBase.h (207686 => 207687)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/page/NavigatorBase.h        2016-10-21 18:20:07 UTC (rev 207686)
+++ trunk/Source/WebCore/page/NavigatorBase.h        2016-10-21 18:32:04 UTC (rev 207687)
</span><span class="lines">@@ -23,16 +23,18 @@
</span><span class="cx"> * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
</span><span class="cx"> */
</span><span class="cx">
</span><del>-#ifndef NavigatorBase_h
-#define NavigatorBase_h
</del><ins>+#pragma once
</ins><span class="cx">
</span><span class="cx"> #include <wtf/Forward.h>
</span><ins>+#include <wtf/RefCounted.h>
</ins><span class="cx"> #include <wtf/Vector.h>
</span><span class="cx">
</span><span class="cx"> namespace WebCore {
</span><span class="cx">
</span><del>-class NavigatorBase {
</del><ins>+class NavigatorBase : public RefCounted<NavigatorBase> {
</ins><span class="cx"> public:
</span><ins>+ virtual ~NavigatorBase();
+
</ins><span class="cx"> static String appName();
</span><span class="cx"> String appVersion() const;
</span><span class="cx"> virtual String userAgent() const = 0;
</span><span class="lines">@@ -52,11 +54,6 @@
</span><span class="cx"> #if ENABLE(NAVIGATOR_HWCONCURRENCY)
</span><span class="cx"> static int hardwareConcurrency();
</span><span class="cx"> #endif
</span><del>-
-protected:
- virtual ~NavigatorBase();
</del><span class="cx"> };
</span><span class="cx">
</span><span class="cx"> } // namespace WebCore
</span><del>-
-#endif // NavigatorBase_h
</del></span></pre></div>
<a id="trunkSourceWebCorepageWindowOrWorkerGlobalScopeidl"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/page/WindowOrWorkerGlobalScope.idl (207686 => 207687)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/page/WindowOrWorkerGlobalScope.idl        2016-10-21 18:20:07 UTC (rev 207686)
+++ trunk/Source/WebCore/page/WindowOrWorkerGlobalScope.idl        2016-10-21 18:32:04 UTC (rev 207687)
</span><span class="lines">@@ -35,7 +35,6 @@
</span><span class="cx"> void clearInterval(optional long handle = 0);
</span><span class="cx">
</span><span class="cx"> // Base64 utility methods.
</span><del>- [MayThrowLegacyException] DOMString atob(DOMString string);
- [MayThrowLegacyException] DOMString btoa(DOMString string);
</del><ins>+ [MayThrowException] DOMString atob(DOMString string);
+ [MayThrowException] DOMString btoa(DOMString string);
</ins><span class="cx"> };
</span><del>-
</del></span></pre></div>
<a id="trunkSourceWebCorepageWorkerNavigatorcpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/page/WorkerNavigator.cpp (207686 => 207687)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/page/WorkerNavigator.cpp        2016-10-21 18:20:07 UTC (rev 207686)
+++ trunk/Source/WebCore/page/WorkerNavigator.cpp        2016-10-21 18:32:04 UTC (rev 207687)
</span><span class="lines">@@ -34,10 +34,6 @@
</span><span class="cx"> {
</span><span class="cx"> }
</span><span class="cx">
</span><del>-WorkerNavigator::~WorkerNavigator()
-{
-}
-
</del><span class="cx"> String WorkerNavigator::userAgent() const
</span><span class="cx"> {
</span><span class="cx"> return m_userAgent;
</span></span></pre></div>
<a id="trunkSourceWebCorepageWorkerNavigatorh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/page/WorkerNavigator.h (207686 => 207687)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/page/WorkerNavigator.h        2016-10-21 18:20:07 UTC (rev 207686)
+++ trunk/Source/WebCore/page/WorkerNavigator.h        2016-10-21 18:32:04 UTC (rev 207687)
</span><span class="lines">@@ -23,22 +23,19 @@
</span><span class="cx"> * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
</span><span class="cx"> */
</span><span class="cx">
</span><del>-#ifndef WorkerNavigator_h
-#define WorkerNavigator_h
</del><ins>+#pragma once
</ins><span class="cx">
</span><span class="cx"> #include "NavigatorBase.h"
</span><span class="cx"> #include "Supplementable.h"
</span><del>-#include <wtf/RefCounted.h>
</del><span class="cx"> #include <wtf/text/WTFString.h>
</span><span class="cx">
</span><span class="cx"> namespace WebCore {
</span><span class="cx">
</span><del>-class WorkerNavigator : public NavigatorBase, public RefCounted<WorkerNavigator>, public Supplementable<WorkerNavigator> {
</del><ins>+class WorkerNavigator final : public NavigatorBase, public Supplementable<WorkerNavigator> {
</ins><span class="cx"> public:
</span><span class="cx"> static Ref<WorkerNavigator> create(const String& userAgent) { return adoptRef(*new WorkerNavigator(userAgent)); }
</span><del>- virtual ~WorkerNavigator();
</del><span class="cx">
</span><del>- virtual String userAgent() const;
</del><ins>+ String userAgent() const final;
</ins><span class="cx">
</span><span class="cx"> private:
</span><span class="cx"> explicit WorkerNavigator(const String&);
</span><span class="lines">@@ -47,5 +44,3 @@
</span><span class="cx"> };
</span><span class="cx">
</span><span class="cx"> } // namespace WebCore
</span><del>-
-#endif // WorkerNavigator_h
</del></span></pre></div>
<a id="trunkSourceWebCoreworkersAbstractWorkercpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/workers/AbstractWorker.cpp (207686 => 207687)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/workers/AbstractWorker.cpp        2016-10-21 18:20:07 UTC (rev 207686)
+++ trunk/Source/WebCore/workers/AbstractWorker.cpp        2016-10-21 18:32:04 UTC (rev 207687)
</span><span class="lines">@@ -38,36 +38,26 @@
</span><span class="cx">
</span><span class="cx"> namespace WebCore {
</span><span class="cx">
</span><del>-AbstractWorker::~AbstractWorker()
</del><ins>+ExceptionOr<URL> AbstractWorker::resolveURL(const String& url, bool shouldBypassMainWorldContentSecurityPolicy)
</ins><span class="cx"> {
</span><del>-}
</del><ins>+ if (url.isEmpty())
+ return Exception { SYNTAX_ERR };
</ins><span class="cx">
</span><del>-URL AbstractWorker::resolveURL(const String& url, bool shouldBypassMainWorldContentSecurityPolicy, ExceptionCode& ec)
-{
- if (url.isEmpty()) {
- ec = SYNTAX_ERR;
- return URL();
- }
</del><ins>+ auto& context = *scriptExecutionContext();
</ins><span class="cx">
</span><del>- // FIXME: This should use the dynamic global scope (bug #27887)
- URL scriptURL = scriptExecutionContext()->completeURL(url);
- if (!scriptURL.isValid()) {
- ec = SYNTAX_ERR;
- return URL();
- }
</del><ins>+ // FIXME: This should use the dynamic global scope (bug #27887).
+ URL scriptURL = context.completeURL(url);
+ if (!scriptURL.isValid())
+ return Exception { SYNTAX_ERR };
</ins><span class="cx">
</span><del>- if (!scriptExecutionContext()->securityOrigin()->canRequest(scriptURL)) {
- ec = SECURITY_ERR;
- return URL();
- }
</del><ins>+ if (!context.securityOrigin()->canRequest(scriptURL))
+ return Exception { SECURITY_ERR };
</ins><span class="cx">
</span><del>- ASSERT(scriptExecutionContext()->contentSecurityPolicy());
- if (!shouldBypassMainWorldContentSecurityPolicy && !scriptExecutionContext()->contentSecurityPolicy()->allowChildContextFromSource(scriptURL)) {
- ec = SECURITY_ERR;
- return URL();
- }
</del><ins>+ ASSERT(context.contentSecurityPolicy());
+ if (!shouldBypassMainWorldContentSecurityPolicy && !context.contentSecurityPolicy()->allowChildContextFromSource(scriptURL))
+ return Exception { SECURITY_ERR };
</ins><span class="cx">
</span><del>- return scriptURL;
</del><ins>+ return WTFMove(scriptURL);
</ins><span class="cx"> }
</span><span class="cx">
</span><span class="cx"> } // namespace WebCore
</span></span></pre></div>
<a id="trunkSourceWebCoreworkersAbstractWorkerh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/workers/AbstractWorker.h (207686 => 207687)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/workers/AbstractWorker.h        2016-10-21 18:20:07 UTC (rev 207686)
+++ trunk/Source/WebCore/workers/AbstractWorker.h        2016-10-21 18:32:04 UTC (rev 207687)
</span><span class="lines">@@ -30,33 +30,29 @@
</span><span class="cx">
</span><span class="cx"> #pragma once
</span><span class="cx">
</span><del>-#include "ActiveDOMObject.h"
-#include "EventListener.h"
</del><span class="cx"> #include "EventTarget.h"
</span><del>-#include <wtf/RefCounted.h>
-#include <wtf/text/AtomicStringHash.h>
</del><ins>+#include "ExceptionOr.h"
</ins><span class="cx">
</span><span class="cx"> namespace WebCore {
</span><span class="cx">
</span><del>- class URL;
</del><ins>+class URL;
</ins><span class="cx">
</span><del>- class AbstractWorker : public RefCounted<AbstractWorker>, public EventTargetWithInlineData {
- public:
- using RefCounted<AbstractWorker>::ref;
- using RefCounted<AbstractWorker>::deref;
</del><ins>+class AbstractWorker : public RefCounted<AbstractWorker>, public EventTargetWithInlineData {
+public:
+ using RefCounted::ref;
+ using RefCounted::deref;
</ins><span class="cx">
</span><del>- virtual ~AbstractWorker();
</del><ins>+protected:
+ AbstractWorker() = default;
</ins><span class="cx">
</span><del>- protected:
- AbstractWorker() = default;
</del><ins>+ // Helper function that converts a URL to an absolute URL and checks the result for validity.
+ ExceptionOr<URL> resolveURL(const String& url, bool shouldBypassMainWorldContentSecurityPolicy);
</ins><span class="cx">
</span><del>- // Helper function that converts a URL to an absolute URL and checks the result for validity.
- URL resolveURL(const String& url, bool shouldBypassMainWorldContentSecurityPolicy, ExceptionCode&);
- intptr_t asID() const { return reinterpret_cast<intptr_t>(this); }
</del><ins>+ intptr_t asID() const { return reinterpret_cast<intptr_t>(this); }
</ins><span class="cx">
</span><del>- private:
- void refEventTarget() final { ref(); }
- void derefEventTarget() final { deref(); }
- };
</del><ins>+private:
+ void refEventTarget() final { ref(); }
+ void derefEventTarget() final { deref(); }
+};
</ins><span class="cx">
</span><span class="cx"> } // namespace WebCore
</span></span></pre></div>
<a id="trunkSourceWebCoreworkersDedicatedWorkerGlobalScopecpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/workers/DedicatedWorkerGlobalScope.cpp (207686 => 207687)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/workers/DedicatedWorkerGlobalScope.cpp        2016-10-21 18:20:07 UTC (rev 207686)
+++ trunk/Source/WebCore/workers/DedicatedWorkerGlobalScope.cpp        2016-10-21 18:32:04 UTC (rev 207687)
</span><span class="lines">@@ -41,16 +41,16 @@
</span><span class="cx">
</span><span class="cx"> namespace WebCore {
</span><span class="cx">
</span><del>-Ref<DedicatedWorkerGlobalScope> DedicatedWorkerGlobalScope::create(const URL& url, const String& userAgent, DedicatedWorkerThread& thread, const ContentSecurityPolicyResponseHeaders& contentSecurityPolicyResponseHeaders, bool shouldBypassMainWorldContentSecurityPolicy, PassRefPtr<SecurityOrigin> topOrigin, IDBClient::IDBConnectionProxy* connectionProxy, SocketProvider* socketProvider)
</del><ins>+Ref<DedicatedWorkerGlobalScope> DedicatedWorkerGlobalScope::create(const URL& url, const String& userAgent, DedicatedWorkerThread& thread, const ContentSecurityPolicyResponseHeaders& contentSecurityPolicyResponseHeaders, bool shouldBypassMainWorldContentSecurityPolicy, RefPtr<SecurityOrigin>&& topOrigin, IDBClient::IDBConnectionProxy* connectionProxy, SocketProvider* socketProvider)
</ins><span class="cx"> {
</span><del>- Ref<DedicatedWorkerGlobalScope> context = adoptRef(*new DedicatedWorkerGlobalScope(url, userAgent, thread, shouldBypassMainWorldContentSecurityPolicy, topOrigin, connectionProxy, socketProvider));
</del><ins>+ auto context = adoptRef(*new DedicatedWorkerGlobalScope(url, userAgent, thread, shouldBypassMainWorldContentSecurityPolicy, WTFMove(topOrigin), connectionProxy, socketProvider));
</ins><span class="cx"> if (!shouldBypassMainWorldContentSecurityPolicy)
</span><span class="cx"> context->applyContentSecurityPolicyResponseHeaders(contentSecurityPolicyResponseHeaders);
</span><span class="cx"> return context;
</span><span class="cx"> }
</span><span class="cx">
</span><del>-DedicatedWorkerGlobalScope::DedicatedWorkerGlobalScope(const URL& url, const String& userAgent, DedicatedWorkerThread& thread, bool shouldBypassMainWorldContentSecurityPolicy, PassRefPtr<SecurityOrigin> topOrigin, IDBClient::IDBConnectionProxy* connectionProxy, SocketProvider* socketProvider)
- : WorkerGlobalScope(url, userAgent, thread, shouldBypassMainWorldContentSecurityPolicy, topOrigin, connectionProxy, socketProvider)
</del><ins>+DedicatedWorkerGlobalScope::DedicatedWorkerGlobalScope(const URL& url, const String& userAgent, DedicatedWorkerThread& thread, bool shouldBypassMainWorldContentSecurityPolicy, RefPtr<SecurityOrigin>&& topOrigin, IDBClient::IDBConnectionProxy* connectionProxy, SocketProvider* socketProvider)
+ : WorkerGlobalScope(url, userAgent, thread, shouldBypassMainWorldContentSecurityPolicy, WTFMove(topOrigin), connectionProxy, socketProvider)
</ins><span class="cx"> {
</span><span class="cx"> }
</span><span class="cx">
</span><span class="lines">@@ -63,19 +63,21 @@
</span><span class="cx"> return DedicatedWorkerGlobalScopeEventTargetInterfaceType;
</span><span class="cx"> }
</span><span class="cx">
</span><del>-void DedicatedWorkerGlobalScope::postMessage(RefPtr<SerializedScriptValue>&& message, Vector<RefPtr<MessagePort>>&& ports, ExceptionCode& ec)
</del><ins>+ExceptionOr<void> DedicatedWorkerGlobalScope::postMessage(RefPtr<SerializedScriptValue>&& message, Vector<RefPtr<MessagePort>>&& ports)
</ins><span class="cx"> {
</span><span class="cx"> // Disentangle the port in preparation for sending it to the remote context.
</span><del>- auto channels = MessagePort::disentanglePorts(WTFMove(ports), ec);
- if (ec)
- return;
- thread().workerObjectProxy().postMessageToWorkerObject(WTFMove(message), WTFMove(channels));
</del><ins>+ auto channels = MessagePort::disentanglePorts(WTFMove(ports));
+ if (channels.hasException())
+ return channels.releaseException();
+ thread().workerObjectProxy().postMessageToWorkerObject(WTFMove(message), channels.releaseReturnValue());
+ return { };
</ins><span class="cx"> }
</span><span class="cx">
</span><del>-void DedicatedWorkerGlobalScope::importScripts(const Vector<String>& urls, ExceptionCode& ec)
</del><ins>+ExceptionOr<void> DedicatedWorkerGlobalScope::importScripts(const Vector<String>& urls)
</ins><span class="cx"> {
</span><del>- Base::importScripts(urls, ec);
</del><ins>+ auto result = Base::importScripts(urls);
</ins><span class="cx"> thread().workerObjectProxy().reportPendingActivity(hasPendingActivity());
</span><ins>+ return result;
</ins><span class="cx"> }
</span><span class="cx">
</span><span class="cx"> DedicatedWorkerThread& DedicatedWorkerGlobalScope::thread()
</span></span></pre></div>
<a id="trunkSourceWebCoreworkersDedicatedWorkerGlobalScopeh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/workers/DedicatedWorkerGlobalScope.h (207686 => 207687)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/workers/DedicatedWorkerGlobalScope.h        2016-10-21 18:20:07 UTC (rev 207686)
+++ trunk/Source/WebCore/workers/DedicatedWorkerGlobalScope.h        2016-10-21 18:32:04 UTC (rev 207687)
</span><span class="lines">@@ -31,34 +31,32 @@
</span><span class="cx">
</span><span class="cx"> #pragma once
</span><span class="cx">
</span><del>-#include "MessagePort.h"
</del><span class="cx"> #include "WorkerGlobalScope.h"
</span><span class="cx">
</span><span class="cx"> namespace WebCore {
</span><span class="cx">
</span><del>- class ContentSecurityPolicyResponseHeaders;
- class DedicatedWorkerThread;
</del><ins>+class ContentSecurityPolicyResponseHeaders;
+class DedicatedWorkerThread;
+class MessagePort;
+class SerializedScriptValue;
</ins><span class="cx">
</span><del>- class DedicatedWorkerGlobalScope : public WorkerGlobalScope {
- public:
- typedef WorkerGlobalScope Base;
- static Ref<DedicatedWorkerGlobalScope> create(const URL&, const String& userAgent, DedicatedWorkerThread&, const ContentSecurityPolicyResponseHeaders&, bool shouldBypassMainWorldContentSecurityPolicy, PassRefPtr<SecurityOrigin> topOrigin, IDBClient::IDBConnectionProxy*, SocketProvider*);
- virtual ~DedicatedWorkerGlobalScope();
</del><ins>+class DedicatedWorkerGlobalScope final : public WorkerGlobalScope {
+public:
+ static Ref<DedicatedWorkerGlobalScope> create(const URL&, const String& userAgent, DedicatedWorkerThread&, const ContentSecurityPolicyResponseHeaders&, bool shouldBypassMainWorldContentSecurityPolicy, RefPtr<SecurityOrigin>&& topOrigin, IDBClient::IDBConnectionProxy*, SocketProvider*);
+ virtual ~DedicatedWorkerGlobalScope();
</ins><span class="cx">
</span><del>- bool isDedicatedWorkerGlobalScope() const override { return true; }
</del><ins>+ ExceptionOr<void> postMessage(RefPtr<SerializedScriptValue>&&, Vector<RefPtr<MessagePort>>&&);
</ins><span class="cx">
</span><del>- // Overridden to allow us to check our pending activity after executing imported script.
- void importScripts(const Vector<String>& urls, ExceptionCode&) override;
</del><ins>+ DedicatedWorkerThread& thread();
</ins><span class="cx">
</span><del>- // EventTarget
- EventTargetInterface eventTargetInterface() const override;
</del><ins>+private:
+ using Base = WorkerGlobalScope;
</ins><span class="cx">
</span><del>- void postMessage(RefPtr<SerializedScriptValue>&&, Vector<RefPtr<MessagePort>>&&, ExceptionCode&);
</del><ins>+ DedicatedWorkerGlobalScope(const URL&, const String& userAgent, DedicatedWorkerThread&, bool shouldBypassMainWorldContentSecurityPolicy, RefPtr<SecurityOrigin>&& topOrigin, IDBClient::IDBConnectionProxy*, SocketProvider*);
</ins><span class="cx">
</span><del>- DedicatedWorkerThread& thread();
</del><ins>+ bool isDedicatedWorkerGlobalScope() const final { return true; }
+ ExceptionOr<void> importScripts(const Vector<String>& urls) final;
+ EventTargetInterface eventTargetInterface() const final;
+};
</ins><span class="cx">
</span><del>- private:
- DedicatedWorkerGlobalScope(const URL&, const String& userAgent, DedicatedWorkerThread&, bool shouldBypassMainWorldContentSecurityPolicy, PassRefPtr<SecurityOrigin> topOrigin, IDBClient::IDBConnectionProxy*, SocketProvider*);
- };
-
</del><span class="cx"> } // namespace WebCore
</span></span></pre></div>
<a id="trunkSourceWebCoreworkersDedicatedWorkerGlobalScopeidl"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/workers/DedicatedWorkerGlobalScope.idl (207686 => 207687)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/workers/DedicatedWorkerGlobalScope.idl        2016-10-21 18:20:07 UTC (rev 207686)
+++ trunk/Source/WebCore/workers/DedicatedWorkerGlobalScope.idl        2016-10-21 18:32:04 UTC (rev 207687)
</span><span class="lines">@@ -33,7 +33,7 @@
</span><span class="cx"> Exposed=DedicatedWorker,
</span><span class="cx"> JSGenerateToNativeObject,
</span><span class="cx"> ] interface DedicatedWorkerGlobalScope : WorkerGlobalScope {
</span><del>- [Custom, MayThrowLegacyException] void postMessage(any message, optional Array messagePorts);
</del><ins>+ [Custom, MayThrowException] void postMessage(any message, optional Array messagePorts);
</ins><span class="cx">
</span><span class="cx"> attribute EventHandler onmessage;
</span><span class="cx"> };
</span></span></pre></div>
<a id="trunkSourceWebCoreworkersWorkercpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/workers/Worker.cpp (207686 => 207687)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/workers/Worker.cpp        2016-10-21 18:20:07 UTC (rev 207686)
+++ trunk/Source/WebCore/workers/Worker.cpp        2016-10-21 18:32:04 UTC (rev 207687)
</span><span class="lines">@@ -64,7 +64,7 @@
</span><span class="cx"> ASSERT_UNUSED(addResult, addResult.isNewEntry);
</span><span class="cx"> }
</span><span class="cx">
</span><del>-RefPtr<Worker> Worker::create(ScriptExecutionContext& context, const String& url, ExceptionCode& ec)
</del><ins>+ExceptionOr<Ref<Worker>> Worker::create(ScriptExecutionContext& context, const String& url)
</ins><span class="cx"> {
</span><span class="cx"> ASSERT(isMainThread());
</span><span class="cx">
</span><span class="lines">@@ -71,14 +71,14 @@
</span><span class="cx"> // We don't currently support nested workers, so workers can only be created from documents.
</span><span class="cx"> ASSERT_WITH_SECURITY_IMPLICATION(context.isDocument());
</span><span class="cx">
</span><del>- Ref<Worker> worker = adoptRef(*new Worker(context));
</del><ins>+ auto worker = adoptRef(*new Worker(context));
</ins><span class="cx">
</span><span class="cx"> worker->suspendIfNeeded();
</span><span class="cx">
</span><span class="cx"> bool shouldBypassMainWorldContentSecurityPolicy = context.shouldBypassMainWorldContentSecurityPolicy();
</span><del>- URL scriptURL = worker->resolveURL(url, shouldBypassMainWorldContentSecurityPolicy, ec);
- if (scriptURL.isEmpty())
- return nullptr;
</del><ins>+ auto scriptURL = worker->resolveURL(url, shouldBypassMainWorldContentSecurityPolicy);
+ if (scriptURL.hasException())
+ return scriptURL.releaseException();
</ins><span class="cx">
</span><span class="cx"> worker->m_shouldBypassMainWorldContentSecurityPolicy = shouldBypassMainWorldContentSecurityPolicy;
</span><span class="cx">
</span><span class="lines">@@ -87,7 +87,7 @@
</span><span class="cx">
</span><span class="cx"> worker->m_scriptLoader = WorkerScriptLoader::create();
</span><span class="cx"> auto contentSecurityPolicyEnforcement = shouldBypassMainWorldContentSecurityPolicy ? ContentSecurityPolicyEnforcement::DoNotEnforce : ContentSecurityPolicyEnforcement::EnforceChildSrcDirective;
</span><del>- worker->m_scriptLoader->loadAsynchronously(&context, scriptURL, FetchOptions::Mode::SameOrigin, contentSecurityPolicyEnforcement, worker.ptr());
</del><ins>+ worker->m_scriptLoader->loadAsynchronously(&context, scriptURL.releaseReturnValue(), FetchOptions::Mode::SameOrigin, contentSecurityPolicyEnforcement, worker.ptr());
</ins><span class="cx"> return WTFMove(worker);
</span><span class="cx"> }
</span><span class="cx">
</span><span class="lines">@@ -99,13 +99,14 @@
</span><span class="cx"> m_contextProxy->workerObjectDestroyed();
</span><span class="cx"> }
</span><span class="cx">
</span><del>-void Worker::postMessage(RefPtr<SerializedScriptValue>&& message, Vector<RefPtr<MessagePort>>&& ports, ExceptionCode& ec)
</del><ins>+ExceptionOr<void> Worker::postMessage(RefPtr<SerializedScriptValue>&& message, Vector<RefPtr<MessagePort>>&& ports)
</ins><span class="cx"> {
</span><span class="cx"> // Disentangle the port in preparation for sending it to the remote context.
</span><del>- auto channels = MessagePort::disentanglePorts(WTFMove(ports), ec);
- if (ec)
- return;
- m_contextProxy->postMessageToWorkerGlobalScope(WTFMove(message), WTFMove(channels));
</del><ins>+ auto channels = MessagePort::disentanglePorts(WTFMove(ports));
+ if (channels.hasException())
+ return channels.releaseException();
+ m_contextProxy->postMessageToWorkerGlobalScope(WTFMove(message), channels.releaseReturnValue());
+ return { };
</ins><span class="cx"> }
</span><span class="cx">
</span><span class="cx"> void Worker::terminate()
</span></span></pre></div>
<a id="trunkSourceWebCoreworkersWorkerh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/workers/Worker.h (207686 => 207687)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/workers/Worker.h        2016-10-21 18:20:07 UTC (rev 207686)
+++ trunk/Source/WebCore/workers/Worker.h        2016-10-21 18:32:04 UTC (rev 207687)
</span><span class="lines">@@ -31,56 +31,48 @@
</span><span class="cx"> #include "EventTarget.h"
</span><span class="cx"> #include "MessagePort.h"
</span><span class="cx"> #include "WorkerScriptLoaderClient.h"
</span><del>-#include <wtf/Forward.h>
</del><span class="cx"> #include <wtf/Optional.h>
</span><del>-#include <wtf/RefPtr.h>
</del><span class="cx"> #include <wtf/text/AtomicStringHash.h>
</span><span class="cx">
</span><span class="cx"> namespace WebCore {
</span><span class="cx">
</span><del>- class ScriptExecutionContext;
- class WorkerGlobalScopeProxy;
- class WorkerScriptLoader;
</del><ins>+class ScriptExecutionContext;
+class WorkerGlobalScopeProxy;
+class WorkerScriptLoader;
</ins><span class="cx">
</span><del>- typedef int ExceptionCode;
</del><ins>+class Worker final : public AbstractWorker, public ActiveDOMObject, private WorkerScriptLoaderClient {
+public:
+ static ExceptionOr<Ref<Worker>> create(ScriptExecutionContext&, const String& url);
+ virtual ~Worker();
</ins><span class="cx">
</span><del>- class Worker final : public AbstractWorker, public ActiveDOMObject, private WorkerScriptLoaderClient {
- public:
- static RefPtr<Worker> create(ScriptExecutionContext&, const String& url, ExceptionCode&);
- virtual ~Worker();
</del><ins>+ ExceptionOr<void> postMessage(RefPtr<SerializedScriptValue>&& message, Vector<RefPtr<MessagePort>>&&);
</ins><span class="cx">
</span><del>- EventTargetInterface eventTargetInterface() const override { return WorkerEventTargetInterfaceType; }
</del><ins>+ void terminate();
</ins><span class="cx">
</span><del>- void postMessage(RefPtr<SerializedScriptValue>&& message, Vector<RefPtr<MessagePort>>&&, ExceptionCode&);
</del><ins>+ bool hasPendingActivity() const final;
</ins><span class="cx">
</span><del>- void terminate();
</del><ins>+ ScriptExecutionContext* scriptExecutionContext() const final { return ActiveDOMObject::scriptExecutionContext(); }
</ins><span class="cx">
</span><del>- // EventTarget API.
- ScriptExecutionContext* scriptExecutionContext() const final { return ActiveDOMObject::scriptExecutionContext(); }
</del><ins>+private:
+ explicit Worker(ScriptExecutionContext&);
</ins><span class="cx">
</span><del>- // ActiveDOMObject API.
- bool hasPendingActivity() const override;
</del><ins>+ EventTargetInterface eventTargetInterface() const final { return WorkerEventTargetInterfaceType; }
</ins><span class="cx">
</span><del>- private:
- explicit Worker(ScriptExecutionContext&);
</del><ins>+ void notifyNetworkStateChange(bool isOnline);
</ins><span class="cx">
</span><del>- void notifyNetworkStateChange(bool isOnline);
</del><ins>+ void didReceiveResponse(unsigned long identifier, const ResourceResponse&) final;
+ void notifyFinished() final;
</ins><span class="cx">
</span><del>- // WorkerScriptLoaderClient callbacks
- void didReceiveResponse(unsigned long identifier, const ResourceResponse&) override;
- void notifyFinished() override;
</del><ins>+ bool canSuspendForDocumentSuspension() const final;
+ void stop() final;
+ const char* activeDOMObjectName() const final;
</ins><span class="cx">
</span><del>- // ActiveDOMObject API.
- bool canSuspendForDocumentSuspension() const override;
- void stop() override;
- const char* activeDOMObjectName() const override;
</del><ins>+ friend void networkStateChanged(bool isOnLine);
</ins><span class="cx">
</span><del>- friend void networkStateChanged(bool isOnLine);
</del><ins>+ RefPtr<WorkerScriptLoader> m_scriptLoader;
+ WorkerGlobalScopeProxy* m_contextProxy; // The proxy outlives the worker to perform thread shutdown.
+ Optional<ContentSecurityPolicyResponseHeaders> m_contentSecurityPolicyResponseHeaders;
+ bool m_shouldBypassMainWorldContentSecurityPolicy { false };
+};
</ins><span class="cx">
</span><del>- RefPtr<WorkerScriptLoader> m_scriptLoader;
- WorkerGlobalScopeProxy* m_contextProxy; // The proxy outlives the worker to perform thread shutdown.
- Optional<ContentSecurityPolicyResponseHeaders> m_contentSecurityPolicyResponseHeaders;
- bool m_shouldBypassMainWorldContentSecurityPolicy { false };
- };
-
</del><span class="cx"> } // namespace WebCore
</span></span></pre></div>
<a id="trunkSourceWebCoreworkersWorkeridl"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/workers/Worker.idl (207686 => 207687)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/workers/Worker.idl        2016-10-21 18:20:07 UTC (rev 207686)
+++ trunk/Source/WebCore/workers/Worker.idl        2016-10-21 18:32:04 UTC (rev 207687)
</span><span class="lines">@@ -30,7 +30,7 @@
</span><span class="cx"> ] interface Worker : EventTarget {
</span><span class="cx"> attribute EventHandler onmessage;
</span><span class="cx">
</span><del>- [Custom, MayThrowLegacyException] void postMessage(SerializedScriptValue message, optional Array messagePorts);
</del><ins>+ [Custom, MayThrowException] void postMessage(SerializedScriptValue message, optional Array messagePorts);
</ins><span class="cx">
</span><span class="cx"> void terminate();
</span><span class="cx"> };
</span></span></pre></div>
<a id="trunkSourceWebCoreworkersWorkerGlobalScopecpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/workers/WorkerGlobalScope.cpp (207686 => 207687)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/workers/WorkerGlobalScope.cpp        2016-10-21 18:20:07 UTC (rev 207686)
+++ trunk/Source/WebCore/workers/WorkerGlobalScope.cpp        2016-10-21 18:32:04 UTC (rev 207687)
</span><span class="lines">@@ -30,8 +30,6 @@
</span><span class="cx">
</span><span class="cx"> #include "ContentSecurityPolicy.h"
</span><span class="cx"> #include "Crypto.h"
</span><del>-#include "DOMTimer.h"
-#include "Event.h"
</del><span class="cx"> #include "ExceptionCode.h"
</span><span class="cx"> #include "IDBConnectionProxy.h"
</span><span class="cx"> #include "InspectorConsoleInstrumentation.h"
</span><span class="lines">@@ -40,7 +38,6 @@
</span><span class="cx"> #include "SecurityOrigin.h"
</span><span class="cx"> #include "SecurityOriginPolicy.h"
</span><span class="cx"> #include "SocketProvider.h"
</span><del>-#include "URL.h"
</del><span class="cx"> #include "WorkerLoaderProxy.h"
</span><span class="cx"> #include "WorkerLocation.h"
</span><span class="cx"> #include "WorkerNavigator.h"
</span><span class="lines">@@ -47,9 +44,7 @@
</span><span class="cx"> #include "WorkerReportingProxy.h"
</span><span class="cx"> #include "WorkerScriptLoader.h"
</span><span class="cx"> #include "WorkerThread.h"
</span><del>-#include "WorkerThreadableLoader.h"
</del><span class="cx"> #include <inspector/ConsoleMessage.h>
</span><del>-#include <inspector/ScriptCallStack.h>
</del><span class="cx">
</span><span class="cx"> using namespace Inspector;
</span><span class="cx">
</span><span class="lines">@@ -60,7 +55,6 @@
</span><span class="cx"> , m_userAgent(userAgent)
</span><span class="cx"> , m_script(std::make_unique<WorkerScriptController>(this))
</span><span class="cx"> , m_thread(thread)
</span><del>- , m_closing(false)
</del><span class="cx"> , m_shouldBypassMainWorldContentSecurityPolicy(shouldBypassMainWorldContentSecurityPolicy)
</span><span class="cx"> , m_eventQueue(*this)
</span><span class="cx"> , m_topOrigin(topOrigin)
</span><span class="lines">@@ -90,9 +84,6 @@
</span><span class="cx"> {
</span><span class="cx"> ASSERT(currentThread() == thread().threadID());
</span><span class="cx">
</span><del>- // Make sure we have no observers.
- notifyObserversOfStop();
-
</del><span class="cx"> // Notify proxy that we are going away. This can free the WorkerThread object, so do not access it after this.
</span><span class="cx"> thread().workerReportingProxy().workerGlobalScopeDestroyed();
</span><span class="cx"> }
</span><span class="lines">@@ -123,13 +114,16 @@
</span><span class="cx"> }
</span><span class="cx">
</span><span class="cx"> #if ENABLE(WEB_SOCKETS)
</span><ins>+
</ins><span class="cx"> SocketProvider* WorkerGlobalScope::socketProvider()
</span><span class="cx"> {
</span><span class="cx"> return m_socketProvider.get();
</span><span class="cx"> }
</span><ins>+
</ins><span class="cx"> #endif
</span><span class="cx">
</span><span class="cx"> #if ENABLE(INDEXED_DATABASE)
</span><ins>+
</ins><span class="cx"> IDBClient::IDBConnectionProxy* WorkerGlobalScope::idbConnectionProxy()
</span><span class="cx"> {
</span><span class="cx"> #if ENABLE(INDEXED_DATABASE_IN_WORKERS)
</span><span class="lines">@@ -146,6 +140,7 @@
</span><span class="cx"> m_connectionProxy->forgetActivityForCurrentThread();
</span><span class="cx"> #endif
</span><span class="cx"> }
</span><ins>+
</ins><span class="cx"> #endif // ENABLE(INDEXED_DATABASE)
</span><span class="cx">
</span><span class="cx"> WorkerLocation& WorkerGlobalScope::location() const
</span><span class="lines">@@ -204,49 +199,43 @@
</span><span class="cx"> DOMTimer::removeById(*this, timeoutId);
</span><span class="cx"> }
</span><span class="cx">
</span><del>-void WorkerGlobalScope::importScripts(const Vector<String>& urls, ExceptionCode& ec)
</del><ins>+ExceptionOr<void> WorkerGlobalScope::importScripts(const Vector<String>& urls)
</ins><span class="cx"> {
</span><del>- ASSERT(scriptExecutionContext());
</del><span class="cx"> ASSERT(contentSecurityPolicy());
</span><span class="cx">
</span><del>- auto& context = *scriptExecutionContext();
- ec = 0;
</del><span class="cx"> Vector<URL> completedURLs;
</span><ins>+ completedURLs.reserveInitialCapacity(urls.size());
</ins><span class="cx"> for (auto& entry : urls) {
</span><del>- URL url = context.completeURL(entry);
- if (!url.isValid()) {
- ec = SYNTAX_ERR;
- return;
- }
- completedURLs.append(WTFMove(url));
</del><ins>+ URL url = completeURL(entry);
+ if (!url.isValid())
+ return Exception { SYNTAX_ERR };
+ completedURLs.uncheckedAppend(WTFMove(url));
</ins><span class="cx"> }
</span><span class="cx">
</span><span class="cx"> for (auto& url : completedURLs) {
</span><span class="cx"> // FIXME: Convert this to check the isolated world's Content Security Policy once webkit.org/b/104520 is solved.
</span><del>- bool shouldBypassMainWorldContentSecurityPolicy = context.shouldBypassMainWorldContentSecurityPolicy();
- if (!shouldBypassMainWorldContentSecurityPolicy && !context.contentSecurityPolicy()->allowScriptFromSource(url)) {
- ec = NETWORK_ERR;
- return;
- }
</del><ins>+ bool shouldBypassMainWorldContentSecurityPolicy = this->shouldBypassMainWorldContentSecurityPolicy();
+ if (!shouldBypassMainWorldContentSecurityPolicy && !contentSecurityPolicy()->allowScriptFromSource(url))
+ return Exception { NETWORK_ERR };
</ins><span class="cx">
</span><del>- Ref<WorkerScriptLoader> scriptLoader = WorkerScriptLoader::create();
- scriptLoader->loadSynchronously(&context, url, FetchOptions::Mode::NoCors, shouldBypassMainWorldContentSecurityPolicy ? ContentSecurityPolicyEnforcement::DoNotEnforce : ContentSecurityPolicyEnforcement::EnforceScriptSrcDirective);
</del><ins>+ auto scriptLoader = WorkerScriptLoader::create();
+ scriptLoader->loadSynchronously(this, url, FetchOptions::Mode::NoCors, shouldBypassMainWorldContentSecurityPolicy ? ContentSecurityPolicyEnforcement::DoNotEnforce : ContentSecurityPolicyEnforcement::EnforceScriptSrcDirective);
</ins><span class="cx">
</span><span class="cx"> // If the fetching attempt failed, throw a NETWORK_ERR exception and abort all these steps.
</span><del>- if (scriptLoader->failed()) {
- ec = NETWORK_ERR;
- return;
- }
</del><ins>+ if (scriptLoader->failed())
+ return Exception { NETWORK_ERR };
</ins><span class="cx">
</span><del>- InspectorInstrumentation::scriptImported(&context, scriptLoader->identifier(), scriptLoader->script());
</del><ins>+ InspectorInstrumentation::scriptImported(this, scriptLoader->identifier(), scriptLoader->script());
</ins><span class="cx">
</span><span class="cx"> NakedPtr<JSC::Exception> exception;
</span><span class="cx"> m_script->evaluate(ScriptSourceCode(scriptLoader->script(), scriptLoader->responseURL()), exception);
</span><span class="cx"> if (exception) {
</span><span class="cx"> m_script->setException(exception);
</span><del>- return;
</del><ins>+ return { };
</ins><span class="cx"> }
</span><span class="cx"> }
</span><ins>+
+ return { };
</ins><span class="cx"> }
</span><span class="cx">
</span><span class="cx"> EventTarget* WorkerGlobalScope::errorEventTarget()
</span><span class="lines">@@ -259,7 +248,7 @@
</span><span class="cx"> thread().workerReportingProxy().postExceptionToWorkerObject(errorMessage, lineNumber, columnNumber, sourceURL);
</span><span class="cx"> }
</span><span class="cx">
</span><del>-void WorkerGlobalScope::addConsoleMessage(std::unique_ptr<Inspector::ConsoleMessage> message)
</del><ins>+void WorkerGlobalScope::addConsoleMessage(std::unique_ptr<Inspector::ConsoleMessage>&& message)
</ins><span class="cx"> {
</span><span class="cx"> if (!isContextThread()) {
</span><span class="cx"> postTask(AddConsoleMessageTask(message->source(), message->level(), message->message()));
</span><span class="lines">@@ -267,46 +256,28 @@
</span><span class="cx"> }
</span><span class="cx">
</span><span class="cx"> thread().workerReportingProxy().postConsoleMessageToWorkerObject(message->source(), message->level(), message->message(), message->line(), message->column(), message->url());
</span><del>- addMessageToWorkerConsole(WTFMove(message));
</del><ins>+ InspectorInstrumentation::addMessageToConsole(this, WTFMove(message));
</ins><span class="cx"> }
</span><span class="cx">
</span><span class="cx"> void WorkerGlobalScope::addConsoleMessage(MessageSource source, MessageLevel level, const String& message, unsigned long requestIdentifier)
</span><span class="cx"> {
</span><del>- if (!isContextThread()) {
- postTask(AddConsoleMessageTask(source, level, message));
- return;
- }
-
- thread().workerReportingProxy().postConsoleMessageToWorkerObject(source, level, message, 0, 0, String());
- addMessageToWorkerConsole(source, level, message, String(), 0, 0, nullptr, nullptr, requestIdentifier);
</del><ins>+ addMessage(source, level, message, { }, 0, 0, nullptr, nullptr, requestIdentifier);
</ins><span class="cx"> }
</span><span class="cx">
</span><del>-void WorkerGlobalScope::addMessage(MessageSource source, MessageLevel level, const String& message, const String& sourceURL, unsigned lineNumber, unsigned columnNumber, RefPtr<ScriptCallStack>&& callStack, JSC::ExecState* state, unsigned long requestIdentifier)
</del><ins>+void WorkerGlobalScope::addMessage(MessageSource source, MessageLevel level, const String& messageText, const String& sourceURL, unsigned lineNumber, unsigned columnNumber, RefPtr<ScriptCallStack>&& callStack, JSC::ExecState* state, unsigned long requestIdentifier)
</ins><span class="cx"> {
</span><span class="cx"> if (!isContextThread()) {
</span><del>- postTask(AddConsoleMessageTask(source, level, message));
</del><ins>+ postTask(AddConsoleMessageTask(source, level, messageText));
</ins><span class="cx"> return;
</span><span class="cx"> }
</span><span class="cx">
</span><del>- thread().workerReportingProxy().postConsoleMessageToWorkerObject(source, level, message, lineNumber, columnNumber, sourceURL);
- addMessageToWorkerConsole(source, level, message, sourceURL, lineNumber, columnNumber, WTFMove(callStack), state, requestIdentifier);
-}
</del><ins>+ thread().workerReportingProxy().postConsoleMessageToWorkerObject(source, level, messageText, lineNumber, columnNumber, sourceURL);
</ins><span class="cx">
</span><del>-void WorkerGlobalScope::addMessageToWorkerConsole(MessageSource source, MessageLevel level, const String& messageText, const String& suggestedURL, unsigned suggestedLineNumber, unsigned suggestedColumnNumber, RefPtr<ScriptCallStack>&& callStack, JSC::ExecState* state, unsigned long requestIdentifier)
-{
</del><span class="cx"> std::unique_ptr<Inspector::ConsoleMessage> message;
</span><del>-
</del><span class="cx"> if (callStack)
</span><span class="cx"> message = std::make_unique<Inspector::ConsoleMessage>(source, MessageType::Log, level, messageText, WTFMove(callStack), requestIdentifier);
</span><span class="cx"> else
</span><del>- message = std::make_unique<Inspector::ConsoleMessage>(source, MessageType::Log, level, messageText, suggestedURL, suggestedLineNumber, suggestedColumnNumber, state, requestIdentifier);
-
- addMessageToWorkerConsole(WTFMove(message));
-}
-
-void WorkerGlobalScope::addMessageToWorkerConsole(std::unique_ptr<Inspector::ConsoleMessage> message)
-{
- ASSERT(isContextThread());
</del><ins>+ message = std::make_unique<Inspector::ConsoleMessage>(source, MessageType::Log, level, messageText, sourceURL, lineNumber, columnNumber, state, requestIdentifier);
</ins><span class="cx"> InspectorInstrumentation::addMessageToConsole(this, WTFMove(message));
</span><span class="cx"> }
</span><span class="cx">
</span><span class="lines">@@ -320,53 +291,6 @@
</span><span class="cx"> return m_script->isExecutionForbidden();
</span><span class="cx"> }
</span><span class="cx">
</span><del>-WorkerGlobalScope::Observer::Observer(WorkerGlobalScope* context)
- : m_context(context)
-{
- ASSERT(m_context && m_context->isContextThread());
- m_context->registerObserver(this);
-}
-
-WorkerGlobalScope::Observer::~Observer()
-{
- if (!m_context)
- return;
- ASSERT(m_context->isContextThread());
- m_context->unregisterObserver(this);
-}
-
-void WorkerGlobalScope::Observer::stopObserving()
-{
- if (!m_context)
- return;
- ASSERT(m_context->isContextThread());
- m_context->unregisterObserver(this);
- m_context = nullptr;
-}
-
-void WorkerGlobalScope::registerObserver(Observer* observer)
-{
- ASSERT(observer);
- m_workerObservers.add(observer);
-}
-
-void WorkerGlobalScope::unregisterObserver(Observer* observer)
-{
- ASSERT(observer);
- m_workerObservers.remove(observer);
-}
-
-void WorkerGlobalScope::notifyObserversOfStop()
-{
- HashSet<Observer*>::iterator iter = m_workerObservers.begin();
- while (iter != m_workerObservers.end()) {
- WorkerGlobalScope::Observer* observer = *iter;
- observer->stopObserving();
- observer->notifyStop();
- iter = m_workerObservers.begin();
- }
-}
-
</del><span class="cx"> WorkerEventQueue& WorkerGlobalScope::eventQueue() const
</span><span class="cx"> {
</span><span class="cx"> return m_eventQueue;
</span><span class="lines">@@ -373,9 +297,11 @@
</span><span class="cx"> }
</span><span class="cx">
</span><span class="cx"> #if ENABLE(SUBTLE_CRYPTO)
</span><ins>+
</ins><span class="cx"> bool WorkerGlobalScope::wrapCryptoKey(const Vector<uint8_t>& key, Vector<uint8_t>& wrappedKey)
</span><span class="cx"> {
</span><del>- bool result = false, done = false;
</del><ins>+ bool result = false;
+ bool done = false;
</ins><span class="cx"> m_thread.workerLoaderProxy().postTaskToLoader([&result, &key, &wrappedKey, &done, workerGlobalScope = this](ScriptExecutionContext& context) {
</span><span class="cx"> result = context.wrapCryptoKey(key, wrappedKey);
</span><span class="cx"> done = true;
</span><span class="lines">@@ -384,7 +310,7 @@
</span><span class="cx"> });
</span><span class="cx"> });
</span><span class="cx">
</span><del>- MessageQueueWaitResult waitResult = MessageQueueMessageReceived;
</del><ins>+ auto waitResult = MessageQueueMessageReceived;
</ins><span class="cx"> while (!done && waitResult != MessageQueueTerminated)
</span><span class="cx"> waitResult = m_thread.runLoop().runInMode(this, WorkerRunLoop::defaultMode());
</span><span class="cx">
</span><span class="lines">@@ -402,18 +328,19 @@
</span><span class="cx"> });
</span><span class="cx"> });
</span><span class="cx">
</span><del>- MessageQueueWaitResult waitResult = MessageQueueMessageReceived;
</del><ins>+ auto waitResult = MessageQueueMessageReceived;
</ins><span class="cx"> while (!done && waitResult != MessageQueueTerminated)
</span><span class="cx"> waitResult = m_thread.runLoop().runInMode(this, WorkerRunLoop::defaultMode());
</span><span class="cx">
</span><span class="cx"> return result;
</span><span class="cx"> }
</span><ins>+
</ins><span class="cx"> #endif // ENABLE(SUBTLE_CRYPTO)
</span><span class="cx">
</span><del>-Crypto& WorkerGlobalScope::crypto() const
</del><ins>+Crypto& WorkerGlobalScope::crypto()
</ins><span class="cx"> {
</span><span class="cx"> if (!m_crypto)
</span><del>- m_crypto = Crypto::create(*scriptExecutionContext());
</del><ins>+ m_crypto = Crypto::create(*this);
</ins><span class="cx"> return *m_crypto;
</span><span class="cx"> }
</span><span class="cx">
</span></span></pre></div>
<a id="trunkSourceWebCoreworkersWorkerGlobalScopeh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/workers/WorkerGlobalScope.h (207686 => 207687)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/workers/WorkerGlobalScope.h        2016-10-21 18:20:07 UTC (rev 207686)
+++ trunk/Source/WebCore/workers/WorkerGlobalScope.h        2016-10-21 18:32:04 UTC (rev 207687)
</span><span class="lines">@@ -1,5 +1,5 @@
</span><span class="cx"> /*
</span><del>- * Copyright (C) 2008, 2009, 2010, 2011, 2012, 2013, 2014, 2015, 2016 Apple Inc. All rights reserved.
</del><ins>+ * Copyright (C) 2008-2016 Apple Inc. All rights reserved.
</ins><span class="cx"> *
</span><span class="cx"> * Redistribution and use in source and binary forms, with or without
</span><span class="cx"> * modification, are permitted provided that the following conditions
</span><span class="lines">@@ -27,7 +27,6 @@
</span><span class="cx"> #pragma once
</span><span class="cx">
</span><span class="cx"> #include "Base64Utilities.h"
</span><del>-#include "EventListener.h"
</del><span class="cx"> #include "EventTarget.h"
</span><span class="cx"> #include "ScriptExecutionContext.h"
</span><span class="cx"> #include "URL.h"
</span><span class="lines">@@ -34,10 +33,6 @@
</span><span class="cx"> #include "WorkerEventQueue.h"
</span><span class="cx"> #include "WorkerScriptController.h"
</span><span class="cx"> #include <memory>
</span><del>-#include <wtf/HashSet.h>
-#include <wtf/RefCounted.h>
-#include <wtf/RefPtr.h>
-#include <wtf/TypeCasts.h>
</del><span class="cx">
</span><span class="cx"> namespace Inspector {
</span><span class="cx"> class ConsoleMessage;
</span><span class="lines">@@ -60,30 +55,15 @@
</span><span class="cx"> public:
</span><span class="cx"> virtual ~WorkerGlobalScope();
</span><span class="cx">
</span><del>- bool isWorkerGlobalScope() const override { return true; }
-
- ScriptExecutionContext* scriptExecutionContext() const final { return const_cast<WorkerGlobalScope*>(this); }
-
</del><span class="cx"> virtual bool isDedicatedWorkerGlobalScope() const { return false; }
</span><span class="cx">
</span><span class="cx"> const URL& url() const final { return m_url; }
</span><del>- URL completeURL(const String&) const final;
</del><span class="cx">
</span><del>- String userAgent(const URL&) const override;
-
- void disableEval(const String& errorMessage) override;
-
</del><span class="cx"> #if ENABLE(INDEXED_DATABASE)
</span><span class="cx"> IDBClient::IDBConnectionProxy* idbConnectionProxy() final;
</span><span class="cx"> void stopIndexedDatabase();
</span><span class="cx"> #endif
</span><span class="cx">
</span><del>-#if ENABLE(WEB_SOCKETS)
- SocketProvider* socketProvider() final;
-#endif
-
- bool shouldBypassMainWorldContentSecurityPolicy() const final { return m_shouldBypassMainWorldContentSecurityPolicy; }
-
</del><span class="cx"> WorkerScriptController* script() { return m_script.get(); }
</span><span class="cx"> void clearScript() { m_script = nullptr; }
</span><span class="cx">
</span><span class="lines">@@ -93,55 +73,65 @@
</span><span class="cx">
</span><span class="cx"> void postTask(Task&&) final; // Executes the task on context's thread asynchronously.
</span><span class="cx">
</span><del>- // WorkerGlobalScope
</del><span class="cx"> WorkerGlobalScope& self() { return *this; }
</span><span class="cx"> WorkerLocation& location() const;
</span><span class="cx"> void close();
</span><span class="cx">
</span><del>- // WorkerUtils
- virtual void importScripts(const Vector<String>& urls, ExceptionCode&);
</del><ins>+ virtual ExceptionOr<void> importScripts(const Vector<String>& urls);
</ins><span class="cx"> WorkerNavigator& navigator() const;
</span><span class="cx">
</span><del>- // Timers
</del><span class="cx"> int setTimeout(std::unique_ptr<ScheduledAction>, int timeout);
</span><span class="cx"> void clearTimeout(int timeoutId);
</span><span class="cx"> int setInterval(std::unique_ptr<ScheduledAction>, int timeout);
</span><span class="cx"> void clearInterval(int timeoutId);
</span><span class="cx">
</span><del>- bool isContextThread() const override;
- bool isJSExecutionForbidden() const override;
</del><ins>+ bool isContextThread() const final;
</ins><span class="cx">
</span><del>- // These methods are used for GC marking. See JSWorkerGlobalScope::visitChildrenVirtual(SlotVisitor&) in
- // JSWorkerGlobalScopeCustom.cpp.
</del><span class="cx"> WorkerNavigator* optionalNavigator() const { return m_navigator.get(); }
</span><span class="cx"> WorkerLocation* optionalLocation() const { return m_location.get(); }
</span><span class="cx">
</span><del>- using RefCounted<WorkerGlobalScope>::ref;
- using RefCounted<WorkerGlobalScope>::deref;
</del><ins>+ using RefCounted::ref;
+ using RefCounted::deref;
</ins><span class="cx">
</span><span class="cx"> bool isClosing() { return m_closing; }
</span><span class="cx">
</span><del>- // An observer interface to be notified when the worker thread is getting stopped.
- class Observer {
- WTF_MAKE_NONCOPYABLE(Observer);
- public:
- Observer(WorkerGlobalScope*);
- virtual ~Observer();
- virtual void notifyStop() = 0;
- void stopObserving();
- private:
- WorkerGlobalScope* m_context;
- };
- friend class Observer;
- void registerObserver(Observer*);
- void unregisterObserver(Observer*);
- void notifyObserversOfStop();
</del><ins>+ void addConsoleMessage(std::unique_ptr<Inspector::ConsoleMessage>&&);
</ins><span class="cx">
</span><del>- SecurityOrigin* topOrigin() const override { return m_topOrigin.get(); }
</del><ins>+ Crypto& crypto();
</ins><span class="cx">
</span><del>- void addConsoleMessage(std::unique_ptr<Inspector::ConsoleMessage>);
- void addConsoleMessage(MessageSource, MessageLevel, const String& message, unsigned long requestIdentifier = 0) override;
</del><ins>+protected:
+ WorkerGlobalScope(const URL&, const String& userAgent, WorkerThread&, bool shouldBypassMainWorldContentSecurityPolicy, RefPtr<SecurityOrigin>&& topOrigin, IDBClient::IDBConnectionProxy*, SocketProvider*);
</ins><span class="cx">
</span><ins>+ void applyContentSecurityPolicyResponseHeaders(const ContentSecurityPolicyResponseHeaders&);
+
+private:
+ void refScriptExecutionContext() final { ref(); }
+ void derefScriptExecutionContext() final { deref(); }
+
+ void refEventTarget() final { ref(); }
+ void derefEventTarget() final { deref(); }
+
+ void logExceptionToConsole(const String& errorMessage, const String& sourceURL, int lineNumber, int columnNumber, RefPtr<Inspector::ScriptCallStack>&&) final;
+ void addMessage(MessageSource, MessageLevel, const String& message, const String& sourceURL, unsigned lineNumber, unsigned columnNumber, RefPtr<Inspector::ScriptCallStack>&&, JSC::ExecState*, unsigned long requestIdentifier) final;
+ void addConsoleMessage(MessageSource, MessageLevel, const String& message, unsigned long requestIdentifier) final;
+
+ bool isWorkerGlobalScope() const final { return true; }
+
+ ScriptExecutionContext* scriptExecutionContext() const final { return const_cast<WorkerGlobalScope*>(this); }
+ URL completeURL(const String&) const final;
+ String userAgent(const URL&) const final;
+ void disableEval(const String& errorMessage) final;
+ EventTarget* errorEventTarget() final;
+ WorkerEventQueue& eventQueue() const final;
+
+#if ENABLE(WEB_SOCKETS)
+ SocketProvider* socketProvider() final;
+#endif
+
+ bool shouldBypassMainWorldContentSecurityPolicy() const final { return m_shouldBypassMainWorldContentSecurityPolicy; }
+ bool isJSExecutionForbidden() const final;
+ SecurityOrigin* topOrigin() const final { return m_topOrigin.get(); }
+
</ins><span class="cx"> #if ENABLE(SUBTLE_CRYPTO)
</span><span class="cx"> // The following two functions are side effects of providing extra protection to serialized
</span><span class="cx"> // CryptoKey data that went through the structured clone algorithm to local storage such as
</span><span class="lines">@@ -154,29 +144,6 @@
</span><span class="cx"> bool unwrapCryptoKey(const Vector<uint8_t>& wrappedKey, Vector<uint8_t>& key) final;
</span><span class="cx"> #endif
</span><span class="cx">
</span><del>- Crypto& crypto() const;
-
-protected:
- WorkerGlobalScope(const URL&, const String& userAgent, WorkerThread&, bool shouldBypassMainWorldContentSecurityPolicy, RefPtr<SecurityOrigin>&& topOrigin, IDBClient::IDBConnectionProxy*, SocketProvider*);
- void applyContentSecurityPolicyResponseHeaders(const ContentSecurityPolicyResponseHeaders&);
-
- void logExceptionToConsole(const String& errorMessage, const String& sourceURL, int lineNumber, int columnNumber, RefPtr<Inspector::ScriptCallStack>&&) override;
- void addMessageToWorkerConsole(std::unique_ptr<Inspector::ConsoleMessage>);
- void addMessageToWorkerConsole(MessageSource, MessageLevel, const String& message, const String& sourceURL, unsigned lineNumber, unsigned columnNumber, RefPtr<Inspector::ScriptCallStack>&&, JSC::ExecState* = nullptr, unsigned long requestIdentifier = 0);
-
-private:
- void refScriptExecutionContext() override { ref(); }
- void derefScriptExecutionContext() override { deref(); }
-
- void refEventTarget() final { ref(); }
- void derefEventTarget() final { deref(); }
-
- void addMessage(MessageSource, MessageLevel, const String& message, const String& sourceURL, unsigned lineNumber, unsigned columnNumber, RefPtr<Inspector::ScriptCallStack>&&, JSC::ExecState* = nullptr, unsigned long requestIdentifier = 0) override;
-
- EventTarget* errorEventTarget() override;
-
- WorkerEventQueue& eventQueue() const final;
-
</del><span class="cx"> URL m_url;
</span><span class="cx"> String m_userAgent;
</span><span class="cx">
</span><span class="lines">@@ -186,11 +153,9 @@
</span><span class="cx"> std::unique_ptr<WorkerScriptController> m_script;
</span><span class="cx"> WorkerThread& m_thread;
</span><span class="cx">
</span><del>- bool m_closing;
</del><ins>+ bool m_closing { false };
</ins><span class="cx"> bool m_shouldBypassMainWorldContentSecurityPolicy;
</span><span class="cx">
</span><del>- HashSet<Observer*> m_workerObservers;
-
</del><span class="cx"> mutable WorkerEventQueue m_eventQueue;
</span><span class="cx">
</span><span class="cx"> RefPtr<SecurityOrigin> m_topOrigin;
</span><span class="lines">@@ -198,6 +163,7 @@
</span><span class="cx"> #if ENABLE(INDEXED_DATABASE)
</span><span class="cx"> RefPtr<IDBClient::IDBConnectionProxy> m_connectionProxy;
</span><span class="cx"> #endif
</span><ins>+
</ins><span class="cx"> #if ENABLE(WEB_SOCKETS)
</span><span class="cx"> RefPtr<SocketProvider> m_socketProvider;
</span><span class="cx"> #endif
</span></span></pre></div>
<a id="trunkSourceWebCoreworkersWorkerThreadcpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/workers/WorkerThread.cpp (207686 => 207687)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/workers/WorkerThread.cpp        2016-10-21 18:20:07 UTC (rev 207686)
+++ trunk/Source/WebCore/workers/WorkerThread.cpp        2016-10-21 18:32:04 UTC (rev 207687)
</span><span class="lines">@@ -217,7 +217,6 @@
</span><span class="cx"> #endif
</span><span class="cx">
</span><span class="cx"> workerGlobalScope.stopActiveDOMObjects();
</span><del>- workerGlobalScope.notifyObserversOfStop();
</del><span class="cx">
</span><span class="cx"> // Event listeners would keep DOMWrapperWorld objects alive for too long. Also, they have references to JS objects,
</span><span class="cx"> // which become dangling once Heap is destroyed.
</span></span></pre>
</div>
</div>
</body>
</html>