<!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>[161638] trunk</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/161638">161638</a></dd>
<dt>Author</dt> <dd>dbates@webkit.org</dd>
<dt>Date</dt> <dd>2014-01-10 09:06:52 -0800 (Fri, 10 Jan 2014)</dd>
</dl>
<h3>Log Message</h3>
<pre>[iOS] Upstream WebCore and Tools miscellaneous changes
https://bugs.webkit.org/show_bug.cgi?id=126698
Reviewed by David Kilzer.
Source/WebCore:
* Configurations/Base.xcconfig:
* Configurations/WebCore.xcconfig:
* Configurations/WebCoreTestSupport.xcconfig:
* Configurations/iOS.xcconfig: Added.
* DerivedSources.make:
* English.lproj/Localizable.strings:
* Modules/airplay/WebKitPlaybackTargetAvailabilityEvent.cpp: Copied from Source/WebCore/editing/TextAffinity.h.
(WebCore::stringForPlaybackTargetAvailability):
(WebCore::WebKitPlaybackTargetAvailabilityEvent::WebKitPlaybackTargetAvailabilityEvent):
* Modules/airplay/WebKitPlaybackTargetAvailabilityEvent.h: Added.
(WebCore::WebKitPlaybackTargetAvailabilityEventInit::WebKitPlaybackTargetAvailabilityEventInit):
(WebCore::WebKitPlaybackTargetAvailabilityEvent::~WebKitPlaybackTargetAvailabilityEvent):
(WebCore::WebKitPlaybackTargetAvailabilityEvent::create):
(WebCore::WebKitPlaybackTargetAvailabilityEvent::availability):
* Modules/airplay/WebKitPlaybackTargetAvailabilityEvent.idl: Copied from Source/WebCore/editing/DeleteButton.h.
* Modules/geolocation/Geolocation.cpp:
(WebCore::Geolocation::Geolocation):
(WebCore::Geolocation::canSuspend):
(WebCore::Geolocation::suspend):
(WebCore::Geolocation::resume):
(WebCore::Geolocation::resumeTimerFired):
(WebCore::Geolocation::resetAllGeolocationPermission):
(WebCore::Geolocation::stop):
(WebCore::Geolocation::setIsAllowed):
(WebCore::Geolocation::positionChanged):
(WebCore::Geolocation::setError):
* Modules/geolocation/Geolocation.h:
* Modules/geolocation/NavigatorGeolocation.cpp:
(WebCore::NavigatorGeolocation::resetAllGeolocationPermission):
* Modules/geolocation/NavigatorGeolocation.h:
* Modules/speech/SpeechSynthesis.cpp:
(WebCore::SpeechSynthesis::SpeechSynthesis):
(WebCore::SpeechSynthesis::speak):
* Modules/speech/SpeechSynthesis.h:
(WebCore::SpeechSynthesis::userGestureRequiredForSpeechStart):
(WebCore::SpeechSynthesis::removeBehaviorRestriction):
* Modules/webaudio/AudioContext.cpp:
* Modules/webaudio/AudioContext.h:
* Modules/webaudio/AudioScheduledSourceNode.cpp:
* Modules/webdatabase/Database.cpp:
* Modules/webdatabase/DatabaseBackendBase.cpp:
(WebCore::DatabaseBackendBase::performOpenAndVerify):
(WebCore::DatabaseBackendBase::incrementalVacuumIfNeeded):
* Modules/webdatabase/DatabaseContext.cpp:
(WebCore::DatabaseContext::DatabaseContext):
(WebCore::DatabaseContext::databaseThread):
(WebCore::DatabaseContext::setPaused):
* Modules/webdatabase/DatabaseContext.h:
* Modules/webdatabase/DatabaseManagerClient.h:
* Modules/webdatabase/DatabaseTask.cpp:
(WebCore::DatabaseTask::performTask):
(WebCore::Database::DatabaseTransactionTask::shouldPerformWhilePaused):
* Modules/webdatabase/DatabaseTask.h:
* Modules/webdatabase/DatabaseThread.cpp:
(WebCore::DatabaseThread::DatabaseThread):
(WebCore::DatabaseThread::requestTermination):
(WebCore::DatabaseUnpauseTask::create):
(WebCore::DatabaseUnpauseTask::shouldPerformWhilePaused):
(WebCore::DatabaseUnpauseTask::DatabaseUnpauseTask):
(WebCore::DatabaseUnpauseTask::doPerformTask):
(WebCore::DatabaseUnpauseTask::debugTaskName):
(WebCore::DatabaseThread::setPaused):
(WebCore::DatabaseThread::handlePausedQueue):
(WebCore::DatabaseThread::databaseThread):
* Modules/webdatabase/DatabaseThread.h:
* Modules/webdatabase/DatabaseTracker.cpp:
(WebCore::DatabaseTracker::setQuota):
(WebCore::DatabaseTracker::deleteOrigin):
(WebCore::DatabaseTracker::deleteDatabase):
(WebCore::DatabaseTracker::deleteDatabaseFile):
(WebCore::DatabaseTracker::removeDeletedOpenedDatabases):
(WebCore::isZeroByteFile):
(WebCore::DatabaseTracker::deleteDatabaseFileIfEmpty):
(WebCore::DatabaseTracker::openDatabaseMutex):
(WebCore::DatabaseTracker::emptyDatabaseFilesRemovalTaskWillBeScheduled):
(WebCore::DatabaseTracker::emptyDatabaseFilesRemovalTaskDidFinish):
(WebCore::DatabaseTracker::setDatabasesPaused):
* Modules/webdatabase/DatabaseTracker.h:
* Modules/webdatabase/SQLTransactionBackend.cpp:
(WebCore::SQLTransactionBackend::shouldPerformWhilePaused):
* Modules/webdatabase/SQLTransactionBackend.h:
* Resources/DictationPhraseWithAlternativesDot.png: Added.
* Resources/DictationPhraseWithAlternativesDot@2x.png: Added.
* Resources/SpellingDot.png: Added.
* Resources/SpellingDot@2x.png: Added.
* Resources/decrementArrow.tiff: Added.
* Resources/hScrollControl_left.png: Added.
* Resources/hScrollControl_middle.png: Added.
* Resources/hScrollControl_right.png: Added.
* Resources/incrementArrow.tiff: Added.
* Resources/markedLeft.png: Added.
* Resources/markedMiddle.png: Added.
* Resources/markedRight.png: Added.
* Resources/vScrollControl_bottom.png: Added.
* Resources/vScrollControl_middle.png: Added.
* Resources/vScrollControl_top.png: Added.
* WebCore.xcodeproj/project.pbxproj:
* bindings/js/GCController.cpp:
(WebCore::GCController::garbageCollectNow):
(WebCore::GCController::releaseExecutableMemory):
* bindings/js/GCController.h:
* bindings/js/JSCallbackData.h:
(WebCore::JSCallbackData::~JSCallbackData):
* bindings/js/JSDOMWindowBase.cpp:
(WebCore::JSDOMWindowBase::supportsProfiling):
(WebCore::JSDOMWindowBase::shouldInterruptScriptBeforeTimeout):
(WebCore::JSDOMWindowBase::commonVM):
(WebCore::JSDOMWindowBase::commonVMExists):
(WebCore::JSDOMWindowBase::commonVMInternal):
* bindings/js/JSDOMWindowCustom.cpp:
(WebCore::JSDOMWindow::touch):
(WebCore::JSDOMWindow::touchList):
* bindings/js/JSDeviceOrientationEventCustom.cpp:
(WebCore::JSDeviceOrientationEvent::webkitCompassHeading):
(WebCore::JSDeviceOrientationEvent::webkitCompassAccuracy):
(WebCore::JSDeviceOrientationEvent::initDeviceOrientationEvent):
* bindings/js/JSMainThreadExecState.h:
* bindings/js/JSTouchCustom.cpp:
* bindings/js/JSTouchListCustom.cpp:
* bindings/js/PageScriptDebugServer.cpp:
(WebCore::PageScriptDebugServer::didContinue):
* bindings/js/ScriptController.cpp:
(WebCore::ScriptController::initializeThreading):
* bindings/js/ScriptDebugServer.cpp:
(WebCore::ScriptDebugServer::handlePause):
* bindings/js/ios/TouchConstructors.cpp: Added.
* bindings/objc/DOM.mm:
(WebCore::wkQuadFromFloatQuad):
(WebCore::kit):
(WebCore::min4):
(WebCore::max4):
(WebCore::emptyQuad):
(-[WKQuadObject initWithQuad:]):
(-[WKQuadObject quad]):
(-[WKQuadObject boundingBox]):
(-[DOMNode boundingBox]):
(-[DOMNode absoluteQuad]):
(-[DOMNode absoluteQuadAndInsideFixedPosition:]):
(-[DOMNode boundingBoxUsingTransforms]):
(-[DOMNode lineBoxQuads]):
(-[DOMNode _linkElement]):
(-[DOMNode hrefURL]):
(-[DOMNode hrefTarget]):
(-[DOMNode hrefFrame]):
(-[DOMNode hrefLabel]):
(-[DOMNode hrefTitle]):
(-[DOMNode boundingFrame]):
(-[DOMNode innerFrameQuad]):
(-[DOMNode computedFontSize]):
(-[DOMNode nextFocusNode]):
(-[DOMNode previousFocusNode]):
(-[DOMRange boundingBox]):
(-[DOMRange renderedImageForcingBlackText:renderedImageForcingBlackText:]):
(-[DOMElement _font]):
(-[DOMHTMLLinkElement _mediaQueryMatchesForOrientation:]):
(-[DOMHTMLLinkElement _mediaQueryMatches]):
* bindings/objc/DOMEvents.h:
* bindings/objc/DOMEvents.mm:
(kitClass):
* bindings/objc/DOMExtensions.h:
* bindings/objc/DOMHTML.mm:
(-[DOMHTMLElement scrollYOffset]):
(-[DOMHTMLElement setScrollXOffset:scrollYOffset:]):
(-[DOMHTMLElement setScrollXOffset:scrollYOffset:adjustForIOSCaret:]):
(-[DOMHTMLElement absolutePosition::::]):
(-[DOMHTMLInputElement _autocapitalizeType]):
(-[DOMHTMLTextAreaElement _autocapitalizeType]):
(-[DOMHTMLInputElement setValueWithChangeEvent:]):
(-[DOMHTMLInputElement setValueAsNumberWithChangeEvent:]):
* bindings/objc/DOMInternal.h:
* bindings/objc/DOMInternal.mm:
(wrapperCacheLock):
(getDOMWrapper):
(addDOMWrapper):
(removeDOMWrapper):
* bindings/objc/DOMPrivate.h:
* bindings/objc/DOMUIKitExtensions.h: Added.
* bindings/objc/DOMUIKitExtensions.mm: Added.
* bindings/objc/PublicDOMInterfaces.h:
* bindings/scripts/CodeGeneratorJS.pm:
(GenerateHeaderContentHeader):
(GenerateImplementationContentHeader):
(GenerateHeader):
(GenerateImplementation):
(GenerateCallbackImplementation):
* bindings/scripts/CodeGeneratorObjC.pm:
(ReadPublicInterfaces):
(GetClassName):
(IsCoreFoundationType):
(GetObjCType):
(AddIncludesForType):
(GenerateHeader):
(GenerateImplementation):
(WriteData):
* bindings/scripts/IDLAttributes.txt:
* bindings/scripts/preprocessor.pm:
(applyPreprocessor):
* bridge/objc/objc_class.mm:
(JSC::Bindings::ObjcClass::fieldNamed):
* bridge/objc/objc_instance.mm:
* config.h:
* dom/Document.cpp:
(WebCore::Document::addAutoSizingNode):
* dom/Document.h:
* dom/Document.idl:
* dom/ios/TouchEvents.cpp: Added.
* editing/ApplyStyleCommand.cpp:
(WebCore::ApplyStyleCommand::applyBlockStyle):
* editing/CompositeEditCommand.cpp:
(WebCore::EditCommandComposition::unapply):
(WebCore::CompositeEditCommand::apply):
(WebCore::CompositeEditCommand::inputText):
(WebCore::CompositeEditCommand::replaceTextInNodePreservingMarkers):
(WebCore::CompositeEditCommand::moveParagraphs):
* editing/CompositeEditCommand.h:
* editing/DeleteButton.h:
* editing/DeleteButtonController.cpp:
(WebCore::DeleteButtonController::enable):
(WebCore::DeleteButtonController::disable):
* editing/DeleteSelectionCommand.cpp:
(WebCore::DeleteSelectionCommand::doApply):
* editing/DeleteSelectionCommand.h:
* editing/EditAction.h:
* editing/EditCommand.h:
(WebCore::EditCommand::isInsertTextCommand):
* editing/EditingStyle.cpp:
* editing/Editor.cpp:
(WebCore::ClearTextCommand::ClearTextCommand):
(WebCore::ClearTextCommand::editingAction):
(WebCore::ClearTextCommand::CreateAndApply):
(WebCore::Editor::handleTextEvent):
(WebCore::Editor::clearText):
(WebCore::Editor::insertDictationPhrases):
(WebCore::Editor::setDictationPhrasesAsChildOfElement):
(WebCore::Editor::confirmMarkedText):
(WebCore::Editor::setTextAsChildOfElement):
(WebCore::Editor::notifyComponentsOnChangedSelection):
(WebCore::Editor::ensureLastEditCommandHasCurrentSelectionIfOpenForMoreTyping):
(WebCore::Editor::copy):
(WebCore::Editor::setBaseWritingDirection):
(WebCore::Editor::setComposition):
(WebCore::Editor::showSpellingGuessPanel):
(WebCore::Editor::markMisspellingsAfterTypingToWord):
(WebCore::Editor::markMisspellingsOrBadGrammar):
(WebCore::Editor::changeBackToReplacedString):
(WebCore::Editor::updateMarkersForWordsAffectedByEditing):
(WebCore::Editor::setIgnoreCompositionSelectionChange):
(WebCore::Editor::changeSelectionAfterCommand):
(WebCore::Editor::shouldChangeSelection):
(WebCore::Editor::respondToChangedSelection):
(WebCore::Editor::resolveTextCheckingTypeMask):
* editing/Editor.h:
* editing/EditorCommand.cpp:
(WebCore::executeClearText):
(WebCore::enabledCopy):
(WebCore::enabledCut):
(WebCore::enabledClearText):
(WebCore::createCommandMap):
* editing/FrameSelection.cpp:
(WebCore::FrameSelection::FrameSelection):
(WebCore::FrameSelection::setSelection):
(WebCore::FrameSelection::modifyExtendingRight):
(WebCore::FrameSelection::modifyExtendingForward):
(WebCore::FrameSelection::modifyMovingRight):
(WebCore::FrameSelection::modifyMovingForward):
(WebCore::FrameSelection::modifyExtendingLeft):
(WebCore::FrameSelection::modifyExtendingBackward):
(WebCore::FrameSelection::modifyMovingLeft):
(WebCore::FrameSelection::modifyMovingBackward):
(WebCore::FrameSelection::setSelectedRange):
(WebCore::FrameSelection::focusedOrActiveStateChanged):
(WebCore::FrameSelection::updateAppearance):
(WebCore::FrameSelection::shouldDeleteSelection):
(WebCore::FrameSelection::revealSelection):
(WebCore::FrameSelection::setSelectionFromNone):
(WebCore::FrameSelection::shouldChangeSelection):
(WebCore::FrameSelection::expandSelectionToElementContainingCaretSelection):
(WebCore::FrameSelection::elementRangeContainingCaretSelection):
(WebCore::FrameSelection::expandSelectionToWordContainingCaretSelection):
(WebCore::FrameSelection::wordRangeContainingCaretSelection):
(WebCore::FrameSelection::expandSelectionToStartOfWordContainingCaretSelection):
(WebCore::FrameSelection::characterInRelationToCaretSelection):
(WebCore::FrameSelection::characterBeforeCaretSelection):
(WebCore::FrameSelection::characterAfterCaretSelection):
(WebCore::FrameSelection::wordOffsetInRange):
(WebCore::FrameSelection::spaceFollowsWordInRange):
(WebCore::FrameSelection::selectionAtDocumentStart):
(WebCore::FrameSelection::selectionAtSentenceStart):
(WebCore::FrameSelection::selectionAtWordStart):
(WebCore::FrameSelection::rangeByMovingCurrentSelection):
(WebCore::FrameSelection::rangeByExtendingCurrentSelection):
(WebCore::FrameSelection::selectRangeOnElement):
(WebCore::FrameSelection::wordSelectionContainingCaretSelection):
(WebCore::FrameSelection::actualSelectionAtSentenceStart):
(WebCore::FrameSelection::rangeByAlteringCurrentSelection):
(WebCore::FrameSelection::clearCurrentSelection):
(WebCore::FrameSelection::setCaretBlinks):
(WebCore::FrameSelection::setCaretColor):
* editing/FrameSelection.h:
(WebCore::FrameSelection::suppressCloseTyping):
(WebCore::FrameSelection::restoreCloseTyping):
(WebCore::FrameSelection::setUpdateAppearanceEnabled):
(WebCore::FrameSelection::suppressScrolling):
(WebCore::FrameSelection::restoreScrolling):
* editing/InsertIntoTextNodeCommand.cpp:
(WebCore::InsertIntoTextNodeCommand::doReapply):
* editing/InsertIntoTextNodeCommand.h:
* editing/InsertTextCommand.h:
* editing/ReplaceSelectionCommand.cpp:
(WebCore::ReplaceSelectionCommand::doApply):
* editing/TextAffinity.h:
* editing/TextCheckingHelper.cpp:
* editing/TextGranularity.h:
* editing/TextIterator.cpp:
(WebCore::isRendererReplacedElement):
* editing/TypingCommand.cpp:
(WebCore::TypingCommand::ensureLastEditCommandHasCurrentSelectionIfOpenForMoreTyping):
(WebCore::TypingCommand::markMisspellingsAfterTyping):
(WebCore::TypingCommand::deleteKeyPressed):
(WebCore::TypingCommand::forwardDeleteKeyPressed):
(WebCore::FriendlyEditCommand::setEndingSelection):
(WebCore::TypingCommand::setEndingSelectionOnLastInsertCommand):
* editing/TypingCommand.h:
* editing/VisiblePosition.h:
(WebCore::operator<):
(WebCore::operator>):
(WebCore::operator<=):
(WebCore::operator>=):
* editing/VisibleSelection.cpp:
(WebCore::VisibleSelection::setStartAndEndFromBaseAndExtentRespectingGranularity):
(WebCore::VisibleSelection::adjustSelectionToAvoidCrossingEditingBoundaries):
* editing/VisibleUnits.cpp:
(WebCore::previousBoundary):
(WebCore::nextBoundary):
(WebCore::startOfDocument):
(WebCore::endOfDocument):
(WebCore::directionIsDownstream):
(WebCore::atBoundaryOfGranularity):
(WebCore::withinTextUnitOfGranularity):
(WebCore::nextCharacterBoundaryInDirection):
(WebCore::nextWordBoundaryInDirection):
(WebCore::nextSentenceBoundaryInDirection):
(WebCore::nextLineBoundaryInDirection):
(WebCore::nextParagraphBoundaryInDirection):
(WebCore::nextDocumentBoundaryInDirection):
(WebCore::positionOfNextBoundaryOfGranularity):
(WebCore::enclosingTextUnitOfGranularity):
(WebCore::distanceBetweenPositions):
(WebCore::wordRangeFromPosition):
(WebCore::closestWordBoundaryForPosition):
* editing/VisibleUnits.h:
* editing/ios/DictationCommandIOS.cpp: Added.
* editing/ios/DictationCommandIOS.h: Added.
(WebCore::DictationCommandIOS::create):
(WebCore::DictationCommandIOS::editingAction):
* editing/mac/FrameSelectionMac.mm:
(WebCore::FrameSelection::notifyAccessibilityForSelectionChange):
* fileapi/AsyncFileStream.cpp:
* generate-export-file: Added.
* inspector/InspectorCounters.h:
* inspector/InspectorFrontendHost.h:
* make-export-file-generator:
* plugins/PluginPackage.h:
* plugins/PluginViewBase.h:
(WebCore::PluginViewBase::willProvidePluginLayer):
(WebCore::PluginViewBase::attachPluginLayer):
(WebCore::PluginViewBase::detachPluginLayer):
* style/StyleResolveForDocument.cpp:
(WebCore::Style::resolveForDocument):
* style/StyleResolveTree.cpp:
(WebCore::Style::elementImplicitVisibility):
* testing/Internals.cpp:
(WebCore::Internals::getCurrentCursorInfo):
(WebCore::Internals::isSelectPopupVisible):
* workers/WorkerThread.cpp:
(WebCore::WorkerThread::workerThread):
Source/WebKit:
* WebKit.xcodeproj/project.pbxproj:
Source/WebKit/mac:
* MigrateHeaders.make:
Tools:
* Scripts/check-for-inappropriate-objc-class-names:
* Scripts/check-for-webkit-framework-include-consistency:</pre>
<h3>Modified Paths</h3>
<ul>
<li><a href="#trunkSourceWebCoreChangeLog">trunk/Source/WebCore/ChangeLog</a></li>
<li><a href="#trunkSourceWebCoreConfigurationsBasexcconfig">trunk/Source/WebCore/Configurations/Base.xcconfig</a></li>
<li><a href="#trunkSourceWebCoreConfigurationsWebCorexcconfig">trunk/Source/WebCore/Configurations/WebCore.xcconfig</a></li>
<li><a href="#trunkSourceWebCoreConfigurationsWebCoreTestSupportxcconfig">trunk/Source/WebCore/Configurations/WebCoreTestSupport.xcconfig</a></li>
<li><a href="#trunkSourceWebCoreDerivedSourcesmake">trunk/Source/WebCore/DerivedSources.make</a></li>
<li><a href="#trunkSourceWebCoreEnglishlprojLocalizablestrings">trunk/Source/WebCore/English.lproj/Localizable.strings</a></li>
<li><a href="#trunkSourceWebCoreModulesgeolocationGeolocationcpp">trunk/Source/WebCore/Modules/geolocation/Geolocation.cpp</a></li>
<li><a href="#trunkSourceWebCoreModulesgeolocationGeolocationh">trunk/Source/WebCore/Modules/geolocation/Geolocation.h</a></li>
<li><a href="#trunkSourceWebCoreModulesgeolocationNavigatorGeolocationcpp">trunk/Source/WebCore/Modules/geolocation/NavigatorGeolocation.cpp</a></li>
<li><a href="#trunkSourceWebCoreModulesgeolocationNavigatorGeolocationh">trunk/Source/WebCore/Modules/geolocation/NavigatorGeolocation.h</a></li>
<li><a href="#trunkSourceWebCoreModulesspeechSpeechSynthesiscpp">trunk/Source/WebCore/Modules/speech/SpeechSynthesis.cpp</a></li>
<li><a href="#trunkSourceWebCoreModulesspeechSpeechSynthesish">trunk/Source/WebCore/Modules/speech/SpeechSynthesis.h</a></li>
<li><a href="#trunkSourceWebCoreModuleswebaudioAudioContextcpp">trunk/Source/WebCore/Modules/webaudio/AudioContext.cpp</a></li>
<li><a href="#trunkSourceWebCoreModuleswebaudioAudioContexth">trunk/Source/WebCore/Modules/webaudio/AudioContext.h</a></li>
<li><a href="#trunkSourceWebCoreModuleswebaudioAudioScheduledSourceNodecpp">trunk/Source/WebCore/Modules/webaudio/AudioScheduledSourceNode.cpp</a></li>
<li><a href="#trunkSourceWebCoreModuleswebdatabaseDatabasecpp">trunk/Source/WebCore/Modules/webdatabase/Database.cpp</a></li>
<li><a href="#trunkSourceWebCoreModuleswebdatabaseDatabaseBackendBasecpp">trunk/Source/WebCore/Modules/webdatabase/DatabaseBackendBase.cpp</a></li>
<li><a href="#trunkSourceWebCoreModuleswebdatabaseDatabaseContextcpp">trunk/Source/WebCore/Modules/webdatabase/DatabaseContext.cpp</a></li>
<li><a href="#trunkSourceWebCoreModuleswebdatabaseDatabaseContexth">trunk/Source/WebCore/Modules/webdatabase/DatabaseContext.h</a></li>
<li><a href="#trunkSourceWebCoreModuleswebdatabaseDatabaseManagerClienth">trunk/Source/WebCore/Modules/webdatabase/DatabaseManagerClient.h</a></li>
<li><a href="#trunkSourceWebCoreModuleswebdatabaseDatabaseTaskcpp">trunk/Source/WebCore/Modules/webdatabase/DatabaseTask.cpp</a></li>
<li><a href="#trunkSourceWebCoreModuleswebdatabaseDatabaseTaskh">trunk/Source/WebCore/Modules/webdatabase/DatabaseTask.h</a></li>
<li><a href="#trunkSourceWebCoreModuleswebdatabaseDatabaseThreadcpp">trunk/Source/WebCore/Modules/webdatabase/DatabaseThread.cpp</a></li>
<li><a href="#trunkSourceWebCoreModuleswebdatabaseDatabaseThreadh">trunk/Source/WebCore/Modules/webdatabase/DatabaseThread.h</a></li>
<li><a href="#trunkSourceWebCoreModuleswebdatabaseDatabaseTrackercpp">trunk/Source/WebCore/Modules/webdatabase/DatabaseTracker.cpp</a></li>
<li><a href="#trunkSourceWebCoreModuleswebdatabaseDatabaseTrackerh">trunk/Source/WebCore/Modules/webdatabase/DatabaseTracker.h</a></li>
<li><a href="#trunkSourceWebCoreModuleswebdatabaseSQLTransactionBackendcpp">trunk/Source/WebCore/Modules/webdatabase/SQLTransactionBackend.cpp</a></li>
<li><a href="#trunkSourceWebCoreModuleswebdatabaseSQLTransactionBackendh">trunk/Source/WebCore/Modules/webdatabase/SQLTransactionBackend.h</a></li>
<li><a href="#trunkSourceWebCoreWebCorexcodeprojprojectpbxproj">trunk/Source/WebCore/WebCore.xcodeproj/project.pbxproj</a></li>
<li><a href="#trunkSourceWebCorebindingsjsGCControllercpp">trunk/Source/WebCore/bindings/js/GCController.cpp</a></li>
<li><a href="#trunkSourceWebCorebindingsjsGCControllerh">trunk/Source/WebCore/bindings/js/GCController.h</a></li>
<li><a href="#trunkSourceWebCorebindingsjsJSCallbackDatah">trunk/Source/WebCore/bindings/js/JSCallbackData.h</a></li>
<li><a href="#trunkSourceWebCorebindingsjsJSDOMWindowBasecpp">trunk/Source/WebCore/bindings/js/JSDOMWindowBase.cpp</a></li>
<li><a href="#trunkSourceWebCorebindingsjsJSDOMWindowCustomcpp">trunk/Source/WebCore/bindings/js/JSDOMWindowCustom.cpp</a></li>
<li><a href="#trunkSourceWebCorebindingsjsJSDeviceOrientationEventCustomcpp">trunk/Source/WebCore/bindings/js/JSDeviceOrientationEventCustom.cpp</a></li>
<li><a href="#trunkSourceWebCorebindingsjsJSMainThreadExecStateh">trunk/Source/WebCore/bindings/js/JSMainThreadExecState.h</a></li>
<li><a href="#trunkSourceWebCorebindingsjsJSTouchCustomcpp">trunk/Source/WebCore/bindings/js/JSTouchCustom.cpp</a></li>
<li><a href="#trunkSourceWebCorebindingsjsJSTouchListCustomcpp">trunk/Source/WebCore/bindings/js/JSTouchListCustom.cpp</a></li>
<li><a href="#trunkSourceWebCorebindingsjsPageScriptDebugServercpp">trunk/Source/WebCore/bindings/js/PageScriptDebugServer.cpp</a></li>
<li><a href="#trunkSourceWebCorebindingsjsScriptControllercpp">trunk/Source/WebCore/bindings/js/ScriptController.cpp</a></li>
<li><a href="#trunkSourceWebCorebindingsjsScriptDebugServercpp">trunk/Source/WebCore/bindings/js/ScriptDebugServer.cpp</a></li>
<li><a href="#trunkSourceWebCorebindingsobjcDOMmm">trunk/Source/WebCore/bindings/objc/DOM.mm</a></li>
<li><a href="#trunkSourceWebCorebindingsobjcDOMEventsh">trunk/Source/WebCore/bindings/objc/DOMEvents.h</a></li>
<li><a href="#trunkSourceWebCorebindingsobjcDOMEventsmm">trunk/Source/WebCore/bindings/objc/DOMEvents.mm</a></li>
<li><a href="#trunkSourceWebCorebindingsobjcDOMExtensionsh">trunk/Source/WebCore/bindings/objc/DOMExtensions.h</a></li>
<li><a href="#trunkSourceWebCorebindingsobjcDOMHTMLmm">trunk/Source/WebCore/bindings/objc/DOMHTML.mm</a></li>
<li><a href="#trunkSourceWebCorebindingsobjcDOMInternalh">trunk/Source/WebCore/bindings/objc/DOMInternal.h</a></li>
<li><a href="#trunkSourceWebCorebindingsobjcDOMInternalmm">trunk/Source/WebCore/bindings/objc/DOMInternal.mm</a></li>
<li><a href="#trunkSourceWebCorebindingsobjcDOMPrivateh">trunk/Source/WebCore/bindings/objc/DOMPrivate.h</a></li>
<li><a href="#trunkSourceWebCorebindingsobjcPublicDOMInterfacesh">trunk/Source/WebCore/bindings/objc/PublicDOMInterfaces.h</a></li>
<li><a href="#trunkSourceWebCorebindingsscriptsCodeGeneratorJSpm">trunk/Source/WebCore/bindings/scripts/CodeGeneratorJS.pm</a></li>
<li><a href="#trunkSourceWebCorebindingsscriptsCodeGeneratorObjCpm">trunk/Source/WebCore/bindings/scripts/CodeGeneratorObjC.pm</a></li>
<li><a href="#trunkSourceWebCorebindingsscriptsIDLAttributestxt">trunk/Source/WebCore/bindings/scripts/IDLAttributes.txt</a></li>
<li><a href="#trunkSourceWebCorebindingsscriptspreprocessorpm">trunk/Source/WebCore/bindings/scripts/preprocessor.pm</a></li>
<li><a href="#trunkSourceWebCorebridgeobjcobjc_classmm">trunk/Source/WebCore/bridge/objc/objc_class.mm</a></li>
<li><a href="#trunkSourceWebCorebridgeobjcobjc_instancemm">trunk/Source/WebCore/bridge/objc/objc_instance.mm</a></li>
<li><a href="#trunkSourceWebCoreconfigh">trunk/Source/WebCore/config.h</a></li>
<li><a href="#trunkSourceWebCoredomDocumentcpp">trunk/Source/WebCore/dom/Document.cpp</a></li>
<li><a href="#trunkSourceWebCoredomDocumenth">trunk/Source/WebCore/dom/Document.h</a></li>
<li><a href="#trunkSourceWebCoredomDocumentidl">trunk/Source/WebCore/dom/Document.idl</a></li>
<li><a href="#trunkSourceWebCoreeditingApplyStyleCommandcpp">trunk/Source/WebCore/editing/ApplyStyleCommand.cpp</a></li>
<li><a href="#trunkSourceWebCoreeditingCompositeEditCommandcpp">trunk/Source/WebCore/editing/CompositeEditCommand.cpp</a></li>
<li><a href="#trunkSourceWebCoreeditingCompositeEditCommandh">trunk/Source/WebCore/editing/CompositeEditCommand.h</a></li>
<li><a href="#trunkSourceWebCoreeditingDeleteButtonh">trunk/Source/WebCore/editing/DeleteButton.h</a></li>
<li><a href="#trunkSourceWebCoreeditingDeleteButtonControllercpp">trunk/Source/WebCore/editing/DeleteButtonController.cpp</a></li>
<li><a href="#trunkSourceWebCoreeditingDeleteSelectionCommandcpp">trunk/Source/WebCore/editing/DeleteSelectionCommand.cpp</a></li>
<li><a href="#trunkSourceWebCoreeditingDeleteSelectionCommandh">trunk/Source/WebCore/editing/DeleteSelectionCommand.h</a></li>
<li><a href="#trunkSourceWebCoreeditingEditActionh">trunk/Source/WebCore/editing/EditAction.h</a></li>
<li><a href="#trunkSourceWebCoreeditingEditCommandh">trunk/Source/WebCore/editing/EditCommand.h</a></li>
<li><a href="#trunkSourceWebCoreeditingEditingStylecpp">trunk/Source/WebCore/editing/EditingStyle.cpp</a></li>
<li><a href="#trunkSourceWebCoreeditingEditorcpp">trunk/Source/WebCore/editing/Editor.cpp</a></li>
<li><a href="#trunkSourceWebCoreeditingEditorh">trunk/Source/WebCore/editing/Editor.h</a></li>
<li><a href="#trunkSourceWebCoreeditingEditorCommandcpp">trunk/Source/WebCore/editing/EditorCommand.cpp</a></li>
<li><a href="#trunkSourceWebCoreeditingFrameSelectioncpp">trunk/Source/WebCore/editing/FrameSelection.cpp</a></li>
<li><a href="#trunkSourceWebCoreeditingFrameSelectionh">trunk/Source/WebCore/editing/FrameSelection.h</a></li>
<li><a href="#trunkSourceWebCoreeditingInsertIntoTextNodeCommandcpp">trunk/Source/WebCore/editing/InsertIntoTextNodeCommand.cpp</a></li>
<li><a href="#trunkSourceWebCoreeditingInsertIntoTextNodeCommandh">trunk/Source/WebCore/editing/InsertIntoTextNodeCommand.h</a></li>
<li><a href="#trunkSourceWebCoreeditingInsertTextCommandh">trunk/Source/WebCore/editing/InsertTextCommand.h</a></li>
<li><a href="#trunkSourceWebCoreeditingReplaceSelectionCommandcpp">trunk/Source/WebCore/editing/ReplaceSelectionCommand.cpp</a></li>
<li><a href="#trunkSourceWebCoreeditingTextAffinityh">trunk/Source/WebCore/editing/TextAffinity.h</a></li>
<li><a href="#trunkSourceWebCoreeditingTextCheckingHelpercpp">trunk/Source/WebCore/editing/TextCheckingHelper.cpp</a></li>
<li><a href="#trunkSourceWebCoreeditingTextGranularityh">trunk/Source/WebCore/editing/TextGranularity.h</a></li>
<li><a href="#trunkSourceWebCoreeditingTextIteratorcpp">trunk/Source/WebCore/editing/TextIterator.cpp</a></li>
<li><a href="#trunkSourceWebCoreeditingTypingCommandcpp">trunk/Source/WebCore/editing/TypingCommand.cpp</a></li>
<li><a href="#trunkSourceWebCoreeditingTypingCommandh">trunk/Source/WebCore/editing/TypingCommand.h</a></li>
<li><a href="#trunkSourceWebCoreeditingVisiblePositionh">trunk/Source/WebCore/editing/VisiblePosition.h</a></li>
<li><a href="#trunkSourceWebCoreeditingVisibleSelectioncpp">trunk/Source/WebCore/editing/VisibleSelection.cpp</a></li>
<li><a href="#trunkSourceWebCoreeditingVisibleUnitscpp">trunk/Source/WebCore/editing/VisibleUnits.cpp</a></li>
<li><a href="#trunkSourceWebCoreeditingVisibleUnitsh">trunk/Source/WebCore/editing/VisibleUnits.h</a></li>
<li><a href="#trunkSourceWebCoreeditingmacFrameSelectionMacmm">trunk/Source/WebCore/editing/mac/FrameSelectionMac.mm</a></li>
<li><a href="#trunkSourceWebCorefileapiAsyncFileStreamcpp">trunk/Source/WebCore/fileapi/AsyncFileStream.cpp</a></li>
<li><a href="#trunkSourceWebCoreinspectorInspectorCountersh">trunk/Source/WebCore/inspector/InspectorCounters.h</a></li>
<li><a href="#trunkSourceWebCoreinspectorInspectorFrontendHosth">trunk/Source/WebCore/inspector/InspectorFrontendHost.h</a></li>
<li><a href="#trunkSourceWebCoremakeexportfilegenerator">trunk/Source/WebCore/make-export-file-generator</a></li>
<li><a href="#trunkSourceWebCorepluginsPluginPackageh">trunk/Source/WebCore/plugins/PluginPackage.h</a></li>
<li><a href="#trunkSourceWebCorepluginsPluginViewBaseh">trunk/Source/WebCore/plugins/PluginViewBase.h</a></li>
<li><a href="#trunkSourceWebCorestyleStyleResolveForDocumentcpp">trunk/Source/WebCore/style/StyleResolveForDocument.cpp</a></li>
<li><a href="#trunkSourceWebCorestyleStyleResolveTreecpp">trunk/Source/WebCore/style/StyleResolveTree.cpp</a></li>
<li><a href="#trunkSourceWebCoretestingInternalscpp">trunk/Source/WebCore/testing/Internals.cpp</a></li>
<li><a href="#trunkSourceWebCoreworkersWorkerThreadcpp">trunk/Source/WebCore/workers/WorkerThread.cpp</a></li>
<li><a href="#trunkSourceWebKitChangeLog">trunk/Source/WebKit/ChangeLog</a></li>
<li><a href="#trunkSourceWebKitWebKitxcodeprojprojectpbxproj">trunk/Source/WebKit/WebKit.xcodeproj/project.pbxproj</a></li>
<li><a href="#trunkSourceWebKitmacChangeLog">trunk/Source/WebKit/mac/ChangeLog</a></li>
<li><a href="#trunkSourceWebKitmacMigrateHeadersmake">trunk/Source/WebKit/mac/MigrateHeaders.make</a></li>
<li><a href="#trunkToolsChangeLog">trunk/Tools/ChangeLog</a></li>
<li><a href="#trunkToolsScriptscheckforinappropriateobjcclassnames">trunk/Tools/Scripts/check-for-inappropriate-objc-class-names</a></li>
<li><a href="#trunkToolsScriptscheckforwebkitframeworkincludeconsistency">trunk/Tools/Scripts/check-for-webkit-framework-include-consistency</a></li>
</ul>
<h3>Added Paths</h3>
<ul>
<li><a href="#trunkSourceWebCoreConfigurationsiOSxcconfig">trunk/Source/WebCore/Configurations/iOS.xcconfig</a></li>
<li>trunk/Source/WebCore/Modules/airplay/</li>
<li><a href="#trunkSourceWebCoreModulesairplayWebKitPlaybackTargetAvailabilityEventcpp">trunk/Source/WebCore/Modules/airplay/WebKitPlaybackTargetAvailabilityEvent.cpp</a></li>
<li><a href="#trunkSourceWebCoreModulesairplayWebKitPlaybackTargetAvailabilityEventh">trunk/Source/WebCore/Modules/airplay/WebKitPlaybackTargetAvailabilityEvent.h</a></li>
<li><a href="#trunkSourceWebCoreModulesairplayWebKitPlaybackTargetAvailabilityEventidl">trunk/Source/WebCore/Modules/airplay/WebKitPlaybackTargetAvailabilityEvent.idl</a></li>
<li><a href="#trunkSourceWebCoreResourcesDictationPhraseWithAlternativesDotpng">trunk/Source/WebCore/Resources/DictationPhraseWithAlternativesDot.png</a></li>
<li><a href="#trunkSourceWebCoreResourcesDictationPhraseWithAlternativesDot2xpng">trunk/Source/WebCore/Resources/DictationPhraseWithAlternativesDot@2x.png</a></li>
<li><a href="#trunkSourceWebCoreResourcesSpellingDotpng">trunk/Source/WebCore/Resources/SpellingDot.png</a></li>
<li><a href="#trunkSourceWebCoreResourcesSpellingDot2xpng">trunk/Source/WebCore/Resources/SpellingDot@2x.png</a></li>
<li><a href="#trunkSourceWebCoreResourcesdecrementArrowtiff">trunk/Source/WebCore/Resources/decrementArrow.tiff</a></li>
<li><a href="#trunkSourceWebCoreResourceshScrollControl_leftpng">trunk/Source/WebCore/Resources/hScrollControl_left.png</a></li>
<li><a href="#trunkSourceWebCoreResourceshScrollControl_middlepng">trunk/Source/WebCore/Resources/hScrollControl_middle.png</a></li>
<li><a href="#trunkSourceWebCoreResourceshScrollControl_rightpng">trunk/Source/WebCore/Resources/hScrollControl_right.png</a></li>
<li><a href="#trunkSourceWebCoreResourcesincrementArrowtiff">trunk/Source/WebCore/Resources/incrementArrow.tiff</a></li>
<li><a href="#trunkSourceWebCoreResourcesmarkedLeftpng">trunk/Source/WebCore/Resources/markedLeft.png</a></li>
<li><a href="#trunkSourceWebCoreResourcesmarkedMiddlepng">trunk/Source/WebCore/Resources/markedMiddle.png</a></li>
<li><a href="#trunkSourceWebCoreResourcesmarkedRightpng">trunk/Source/WebCore/Resources/markedRight.png</a></li>
<li><a href="#trunkSourceWebCoreResourcesvScrollControl_bottompng">trunk/Source/WebCore/Resources/vScrollControl_bottom.png</a></li>
<li><a href="#trunkSourceWebCoreResourcesvScrollControl_middlepng">trunk/Source/WebCore/Resources/vScrollControl_middle.png</a></li>
<li><a href="#trunkSourceWebCoreResourcesvScrollControl_toppng">trunk/Source/WebCore/Resources/vScrollControl_top.png</a></li>
<li>trunk/Source/WebCore/bindings/js/ios/</li>
<li><a href="#trunkSourceWebCorebindingsjsiosTouchConstructorscpp">trunk/Source/WebCore/bindings/js/ios/TouchConstructors.cpp</a></li>
<li><a href="#trunkSourceWebCorebindingsobjcDOMUIKitExtensionsh">trunk/Source/WebCore/bindings/objc/DOMUIKitExtensions.h</a></li>
<li><a href="#trunkSourceWebCorebindingsobjcDOMUIKitExtensionsmm">trunk/Source/WebCore/bindings/objc/DOMUIKitExtensions.mm</a></li>
<li>trunk/Source/WebCore/dom/ios/</li>
<li><a href="#trunkSourceWebCoredomiosTouchEventscpp">trunk/Source/WebCore/dom/ios/TouchEvents.cpp</a></li>
<li><a href="#trunkSourceWebCoreeditingiosDictationCommandIOScpp">trunk/Source/WebCore/editing/ios/DictationCommandIOS.cpp</a></li>
<li><a href="#trunkSourceWebCoreeditingiosDictationCommandIOSh">trunk/Source/WebCore/editing/ios/DictationCommandIOS.h</a></li>
<li><a href="#trunkSourceWebCoregenerateexportfile">trunk/Source/WebCore/generate-export-file</a></li>
</ul>
</div>
<div id="patch">
<h3>Diff</h3>
<a id="trunkSourceWebCoreChangeLog"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/ChangeLog (161637 => 161638)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/ChangeLog        2014-01-10 16:55:05 UTC (rev 161637)
+++ trunk/Source/WebCore/ChangeLog        2014-01-10 17:06:52 UTC (rev 161638)
</span><span class="lines">@@ -1,5 +1,389 @@
</span><span class="cx"> 2014-01-10 Daniel Bates <dabates@apple.com>
</span><span class="cx">
</span><ins>+ [iOS] Upstream WebCore and Tools miscellaneous changes
+ https://bugs.webkit.org/show_bug.cgi?id=126698
+
+ Reviewed by David Kilzer.
+
+ * Configurations/Base.xcconfig:
+ * Configurations/WebCore.xcconfig:
+ * Configurations/WebCoreTestSupport.xcconfig:
+ * Configurations/iOS.xcconfig: Added.
+ * DerivedSources.make:
+ * English.lproj/Localizable.strings:
+ * Modules/airplay/WebKitPlaybackTargetAvailabilityEvent.cpp: Copied from Source/WebCore/editing/TextAffinity.h.
+ (WebCore::stringForPlaybackTargetAvailability):
+ (WebCore::WebKitPlaybackTargetAvailabilityEvent::WebKitPlaybackTargetAvailabilityEvent):
+ * Modules/airplay/WebKitPlaybackTargetAvailabilityEvent.h: Added.
+ (WebCore::WebKitPlaybackTargetAvailabilityEventInit::WebKitPlaybackTargetAvailabilityEventInit):
+ (WebCore::WebKitPlaybackTargetAvailabilityEvent::~WebKitPlaybackTargetAvailabilityEvent):
+ (WebCore::WebKitPlaybackTargetAvailabilityEvent::create):
+ (WebCore::WebKitPlaybackTargetAvailabilityEvent::availability):
+ * Modules/airplay/WebKitPlaybackTargetAvailabilityEvent.idl: Copied from Source/WebCore/editing/DeleteButton.h.
+ * Modules/geolocation/Geolocation.cpp:
+ (WebCore::Geolocation::Geolocation):
+ (WebCore::Geolocation::canSuspend):
+ (WebCore::Geolocation::suspend):
+ (WebCore::Geolocation::resume):
+ (WebCore::Geolocation::resumeTimerFired):
+ (WebCore::Geolocation::resetAllGeolocationPermission):
+ (WebCore::Geolocation::stop):
+ (WebCore::Geolocation::setIsAllowed):
+ (WebCore::Geolocation::positionChanged):
+ (WebCore::Geolocation::setError):
+ * Modules/geolocation/Geolocation.h:
+ * Modules/geolocation/NavigatorGeolocation.cpp:
+ (WebCore::NavigatorGeolocation::resetAllGeolocationPermission):
+ * Modules/geolocation/NavigatorGeolocation.h:
+ * Modules/speech/SpeechSynthesis.cpp:
+ (WebCore::SpeechSynthesis::SpeechSynthesis):
+ (WebCore::SpeechSynthesis::speak):
+ * Modules/speech/SpeechSynthesis.h:
+ (WebCore::SpeechSynthesis::userGestureRequiredForSpeechStart):
+ (WebCore::SpeechSynthesis::removeBehaviorRestriction):
+ * Modules/webaudio/AudioContext.cpp:
+ * Modules/webaudio/AudioContext.h:
+ * Modules/webaudio/AudioScheduledSourceNode.cpp:
+ * Modules/webdatabase/Database.cpp:
+ * Modules/webdatabase/DatabaseBackendBase.cpp:
+ (WebCore::DatabaseBackendBase::performOpenAndVerify):
+ (WebCore::DatabaseBackendBase::incrementalVacuumIfNeeded):
+ * Modules/webdatabase/DatabaseContext.cpp:
+ (WebCore::DatabaseContext::DatabaseContext):
+ (WebCore::DatabaseContext::databaseThread):
+ (WebCore::DatabaseContext::setPaused):
+ * Modules/webdatabase/DatabaseContext.h:
+ * Modules/webdatabase/DatabaseManagerClient.h:
+ * Modules/webdatabase/DatabaseTask.cpp:
+ (WebCore::DatabaseTask::performTask):
+ (WebCore::Database::DatabaseTransactionTask::shouldPerformWhilePaused):
+ * Modules/webdatabase/DatabaseTask.h:
+ * Modules/webdatabase/DatabaseThread.cpp:
+ (WebCore::DatabaseThread::DatabaseThread):
+ (WebCore::DatabaseThread::requestTermination):
+ (WebCore::DatabaseUnpauseTask::create):
+ (WebCore::DatabaseUnpauseTask::shouldPerformWhilePaused):
+ (WebCore::DatabaseUnpauseTask::DatabaseUnpauseTask):
+ (WebCore::DatabaseUnpauseTask::doPerformTask):
+ (WebCore::DatabaseUnpauseTask::debugTaskName):
+ (WebCore::DatabaseThread::setPaused):
+ (WebCore::DatabaseThread::handlePausedQueue):
+ (WebCore::DatabaseThread::databaseThread):
+ * Modules/webdatabase/DatabaseThread.h:
+ * Modules/webdatabase/DatabaseTracker.cpp:
+ (WebCore::DatabaseTracker::setQuota):
+ (WebCore::DatabaseTracker::deleteOrigin):
+ (WebCore::DatabaseTracker::deleteDatabase):
+ (WebCore::DatabaseTracker::deleteDatabaseFile):
+ (WebCore::DatabaseTracker::removeDeletedOpenedDatabases):
+ (WebCore::isZeroByteFile):
+ (WebCore::DatabaseTracker::deleteDatabaseFileIfEmpty):
+ (WebCore::DatabaseTracker::openDatabaseMutex):
+ (WebCore::DatabaseTracker::emptyDatabaseFilesRemovalTaskWillBeScheduled):
+ (WebCore::DatabaseTracker::emptyDatabaseFilesRemovalTaskDidFinish):
+ (WebCore::DatabaseTracker::setDatabasesPaused):
+ * Modules/webdatabase/DatabaseTracker.h:
+ * Modules/webdatabase/SQLTransactionBackend.cpp:
+ (WebCore::SQLTransactionBackend::shouldPerformWhilePaused):
+ * Modules/webdatabase/SQLTransactionBackend.h:
+ * Resources/DictationPhraseWithAlternativesDot.png: Added.
+ * Resources/DictationPhraseWithAlternativesDot@2x.png: Added.
+ * Resources/SpellingDot.png: Added.
+ * Resources/SpellingDot@2x.png: Added.
+ * Resources/decrementArrow.tiff: Added.
+ * Resources/hScrollControl_left.png: Added.
+ * Resources/hScrollControl_middle.png: Added.
+ * Resources/hScrollControl_right.png: Added.
+ * Resources/incrementArrow.tiff: Added.
+ * Resources/markedLeft.png: Added.
+ * Resources/markedMiddle.png: Added.
+ * Resources/markedRight.png: Added.
+ * Resources/vScrollControl_bottom.png: Added.
+ * Resources/vScrollControl_middle.png: Added.
+ * Resources/vScrollControl_top.png: Added.
+ * WebCore.xcodeproj/project.pbxproj:
+ * bindings/js/GCController.cpp:
+ (WebCore::GCController::garbageCollectNow):
+ (WebCore::GCController::releaseExecutableMemory):
+ * bindings/js/GCController.h:
+ * bindings/js/JSCallbackData.h:
+ (WebCore::JSCallbackData::~JSCallbackData):
+ * bindings/js/JSDOMWindowBase.cpp:
+ (WebCore::JSDOMWindowBase::supportsProfiling):
+ (WebCore::JSDOMWindowBase::shouldInterruptScriptBeforeTimeout):
+ (WebCore::JSDOMWindowBase::commonVM):
+ (WebCore::JSDOMWindowBase::commonVMExists):
+ (WebCore::JSDOMWindowBase::commonVMInternal):
+ * bindings/js/JSDOMWindowCustom.cpp:
+ (WebCore::JSDOMWindow::touch):
+ (WebCore::JSDOMWindow::touchList):
+ * bindings/js/JSDeviceOrientationEventCustom.cpp:
+ (WebCore::JSDeviceOrientationEvent::webkitCompassHeading):
+ (WebCore::JSDeviceOrientationEvent::webkitCompassAccuracy):
+ (WebCore::JSDeviceOrientationEvent::initDeviceOrientationEvent):
+ * bindings/js/JSMainThreadExecState.h:
+ * bindings/js/JSTouchCustom.cpp:
+ * bindings/js/JSTouchListCustom.cpp:
+ * bindings/js/PageScriptDebugServer.cpp:
+ (WebCore::PageScriptDebugServer::didContinue):
+ * bindings/js/ScriptController.cpp:
+ (WebCore::ScriptController::initializeThreading):
+ * bindings/js/ScriptDebugServer.cpp:
+ (WebCore::ScriptDebugServer::handlePause):
+ * bindings/js/ios/TouchConstructors.cpp: Added.
+ * bindings/objc/DOM.mm:
+ (WebCore::wkQuadFromFloatQuad):
+ (WebCore::kit):
+ (WebCore::min4):
+ (WebCore::max4):
+ (WebCore::emptyQuad):
+ (-[WKQuadObject initWithQuad:]):
+ (-[WKQuadObject quad]):
+ (-[WKQuadObject boundingBox]):
+ (-[DOMNode boundingBox]):
+ (-[DOMNode absoluteQuad]):
+ (-[DOMNode absoluteQuadAndInsideFixedPosition:]):
+ (-[DOMNode boundingBoxUsingTransforms]):
+ (-[DOMNode lineBoxQuads]):
+ (-[DOMNode _linkElement]):
+ (-[DOMNode hrefURL]):
+ (-[DOMNode hrefTarget]):
+ (-[DOMNode hrefFrame]):
+ (-[DOMNode hrefLabel]):
+ (-[DOMNode hrefTitle]):
+ (-[DOMNode boundingFrame]):
+ (-[DOMNode innerFrameQuad]):
+ (-[DOMNode computedFontSize]):
+ (-[DOMNode nextFocusNode]):
+ (-[DOMNode previousFocusNode]):
+ (-[DOMRange boundingBox]):
+ (-[DOMRange renderedImageForcingBlackText:renderedImageForcingBlackText:]):
+ (-[DOMElement _font]):
+ (-[DOMHTMLLinkElement _mediaQueryMatchesForOrientation:]):
+ (-[DOMHTMLLinkElement _mediaQueryMatches]):
+ * bindings/objc/DOMEvents.h:
+ * bindings/objc/DOMEvents.mm:
+ (kitClass):
+ * bindings/objc/DOMExtensions.h:
+ * bindings/objc/DOMHTML.mm:
+ (-[DOMHTMLElement scrollYOffset]):
+ (-[DOMHTMLElement setScrollXOffset:scrollYOffset:]):
+ (-[DOMHTMLElement setScrollXOffset:scrollYOffset:adjustForIOSCaret:]):
+ (-[DOMHTMLElement absolutePosition::::]):
+ (-[DOMHTMLInputElement _autocapitalizeType]):
+ (-[DOMHTMLTextAreaElement _autocapitalizeType]):
+ (-[DOMHTMLInputElement setValueWithChangeEvent:]):
+ (-[DOMHTMLInputElement setValueAsNumberWithChangeEvent:]):
+ * bindings/objc/DOMInternal.h:
+ * bindings/objc/DOMInternal.mm:
+ (wrapperCacheLock):
+ (getDOMWrapper):
+ (addDOMWrapper):
+ (removeDOMWrapper):
+ * bindings/objc/DOMPrivate.h:
+ * bindings/objc/DOMUIKitExtensions.h: Added.
+ * bindings/objc/DOMUIKitExtensions.mm: Added.
+ * bindings/objc/PublicDOMInterfaces.h:
+ * bindings/scripts/CodeGeneratorJS.pm:
+ (GenerateHeaderContentHeader):
+ (GenerateImplementationContentHeader):
+ (GenerateHeader):
+ (GenerateImplementation):
+ (GenerateCallbackImplementation):
+ * bindings/scripts/CodeGeneratorObjC.pm:
+ (ReadPublicInterfaces):
+ (GetClassName):
+ (IsCoreFoundationType):
+ (GetObjCType):
+ (AddIncludesForType):
+ (GenerateHeader):
+ (GenerateImplementation):
+ (WriteData):
+ * bindings/scripts/IDLAttributes.txt:
+ * bindings/scripts/preprocessor.pm:
+ (applyPreprocessor):
+ * bridge/objc/objc_class.mm:
+ (JSC::Bindings::ObjcClass::fieldNamed):
+ * bridge/objc/objc_instance.mm:
+ * config.h:
+ * dom/Document.cpp:
+ (WebCore::Document::addAutoSizingNode):
+ * dom/Document.h:
+ * dom/Document.idl:
+ * dom/ios/TouchEvents.cpp: Added.
+ * editing/ApplyStyleCommand.cpp:
+ (WebCore::ApplyStyleCommand::applyBlockStyle):
+ * editing/CompositeEditCommand.cpp:
+ (WebCore::EditCommandComposition::unapply):
+ (WebCore::CompositeEditCommand::apply):
+ (WebCore::CompositeEditCommand::inputText):
+ (WebCore::CompositeEditCommand::replaceTextInNodePreservingMarkers):
+ (WebCore::CompositeEditCommand::moveParagraphs):
+ * editing/CompositeEditCommand.h:
+ * editing/DeleteButton.h:
+ * editing/DeleteButtonController.cpp:
+ (WebCore::DeleteButtonController::enable):
+ (WebCore::DeleteButtonController::disable):
+ * editing/DeleteSelectionCommand.cpp:
+ (WebCore::DeleteSelectionCommand::doApply):
+ * editing/DeleteSelectionCommand.h:
+ * editing/EditAction.h:
+ * editing/EditCommand.h:
+ (WebCore::EditCommand::isInsertTextCommand):
+ * editing/EditingStyle.cpp:
+ * editing/Editor.cpp:
+ (WebCore::ClearTextCommand::ClearTextCommand):
+ (WebCore::ClearTextCommand::editingAction):
+ (WebCore::ClearTextCommand::CreateAndApply):
+ (WebCore::Editor::handleTextEvent):
+ (WebCore::Editor::clearText):
+ (WebCore::Editor::insertDictationPhrases):
+ (WebCore::Editor::setDictationPhrasesAsChildOfElement):
+ (WebCore::Editor::confirmMarkedText):
+ (WebCore::Editor::setTextAsChildOfElement):
+ (WebCore::Editor::notifyComponentsOnChangedSelection):
+ (WebCore::Editor::ensureLastEditCommandHasCurrentSelectionIfOpenForMoreTyping):
+ (WebCore::Editor::copy):
+ (WebCore::Editor::setBaseWritingDirection):
+ (WebCore::Editor::setComposition):
+ (WebCore::Editor::showSpellingGuessPanel):
+ (WebCore::Editor::markMisspellingsAfterTypingToWord):
+ (WebCore::Editor::markMisspellingsOrBadGrammar):
+ (WebCore::Editor::changeBackToReplacedString):
+ (WebCore::Editor::updateMarkersForWordsAffectedByEditing):
+ (WebCore::Editor::setIgnoreCompositionSelectionChange):
+ (WebCore::Editor::changeSelectionAfterCommand):
+ (WebCore::Editor::shouldChangeSelection):
+ (WebCore::Editor::respondToChangedSelection):
+ (WebCore::Editor::resolveTextCheckingTypeMask):
+ * editing/Editor.h:
+ * editing/EditorCommand.cpp:
+ (WebCore::executeClearText):
+ (WebCore::enabledCopy):
+ (WebCore::enabledCut):
+ (WebCore::enabledClearText):
+ (WebCore::createCommandMap):
+ * editing/FrameSelection.cpp:
+ (WebCore::FrameSelection::FrameSelection):
+ (WebCore::FrameSelection::setSelection):
+ (WebCore::FrameSelection::modifyExtendingRight):
+ (WebCore::FrameSelection::modifyExtendingForward):
+ (WebCore::FrameSelection::modifyMovingRight):
+ (WebCore::FrameSelection::modifyMovingForward):
+ (WebCore::FrameSelection::modifyExtendingLeft):
+ (WebCore::FrameSelection::modifyExtendingBackward):
+ (WebCore::FrameSelection::modifyMovingLeft):
+ (WebCore::FrameSelection::modifyMovingBackward):
+ (WebCore::FrameSelection::setSelectedRange):
+ (WebCore::FrameSelection::focusedOrActiveStateChanged):
+ (WebCore::FrameSelection::updateAppearance):
+ (WebCore::FrameSelection::shouldDeleteSelection):
+ (WebCore::FrameSelection::revealSelection):
+ (WebCore::FrameSelection::setSelectionFromNone):
+ (WebCore::FrameSelection::shouldChangeSelection):
+ (WebCore::FrameSelection::expandSelectionToElementContainingCaretSelection):
+ (WebCore::FrameSelection::elementRangeContainingCaretSelection):
+ (WebCore::FrameSelection::expandSelectionToWordContainingCaretSelection):
+ (WebCore::FrameSelection::wordRangeContainingCaretSelection):
+ (WebCore::FrameSelection::expandSelectionToStartOfWordContainingCaretSelection):
+ (WebCore::FrameSelection::characterInRelationToCaretSelection):
+ (WebCore::FrameSelection::characterBeforeCaretSelection):
+ (WebCore::FrameSelection::characterAfterCaretSelection):
+ (WebCore::FrameSelection::wordOffsetInRange):
+ (WebCore::FrameSelection::spaceFollowsWordInRange):
+ (WebCore::FrameSelection::selectionAtDocumentStart):
+ (WebCore::FrameSelection::selectionAtSentenceStart):
+ (WebCore::FrameSelection::selectionAtWordStart):
+ (WebCore::FrameSelection::rangeByMovingCurrentSelection):
+ (WebCore::FrameSelection::rangeByExtendingCurrentSelection):
+ (WebCore::FrameSelection::selectRangeOnElement):
+ (WebCore::FrameSelection::wordSelectionContainingCaretSelection):
+ (WebCore::FrameSelection::actualSelectionAtSentenceStart):
+ (WebCore::FrameSelection::rangeByAlteringCurrentSelection):
+ (WebCore::FrameSelection::clearCurrentSelection):
+ (WebCore::FrameSelection::setCaretBlinks):
+ (WebCore::FrameSelection::setCaretColor):
+ * editing/FrameSelection.h:
+ (WebCore::FrameSelection::suppressCloseTyping):
+ (WebCore::FrameSelection::restoreCloseTyping):
+ (WebCore::FrameSelection::setUpdateAppearanceEnabled):
+ (WebCore::FrameSelection::suppressScrolling):
+ (WebCore::FrameSelection::restoreScrolling):
+ * editing/InsertIntoTextNodeCommand.cpp:
+ (WebCore::InsertIntoTextNodeCommand::doReapply):
+ * editing/InsertIntoTextNodeCommand.h:
+ * editing/InsertTextCommand.h:
+ * editing/ReplaceSelectionCommand.cpp:
+ (WebCore::ReplaceSelectionCommand::doApply):
+ * editing/TextAffinity.h:
+ * editing/TextCheckingHelper.cpp:
+ * editing/TextGranularity.h:
+ * editing/TextIterator.cpp:
+ (WebCore::isRendererReplacedElement):
+ * editing/TypingCommand.cpp:
+ (WebCore::TypingCommand::ensureLastEditCommandHasCurrentSelectionIfOpenForMoreTyping):
+ (WebCore::TypingCommand::markMisspellingsAfterTyping):
+ (WebCore::TypingCommand::deleteKeyPressed):
+ (WebCore::TypingCommand::forwardDeleteKeyPressed):
+ (WebCore::FriendlyEditCommand::setEndingSelection):
+ (WebCore::TypingCommand::setEndingSelectionOnLastInsertCommand):
+ * editing/TypingCommand.h:
+ * editing/VisiblePosition.h:
+ (WebCore::operator<):
+ (WebCore::operator>):
+ (WebCore::operator<=):
+ (WebCore::operator>=):
+ * editing/VisibleSelection.cpp:
+ (WebCore::VisibleSelection::setStartAndEndFromBaseAndExtentRespectingGranularity):
+ (WebCore::VisibleSelection::adjustSelectionToAvoidCrossingEditingBoundaries):
+ * editing/VisibleUnits.cpp:
+ (WebCore::previousBoundary):
+ (WebCore::nextBoundary):
+ (WebCore::startOfDocument):
+ (WebCore::endOfDocument):
+ (WebCore::directionIsDownstream):
+ (WebCore::atBoundaryOfGranularity):
+ (WebCore::withinTextUnitOfGranularity):
+ (WebCore::nextCharacterBoundaryInDirection):
+ (WebCore::nextWordBoundaryInDirection):
+ (WebCore::nextSentenceBoundaryInDirection):
+ (WebCore::nextLineBoundaryInDirection):
+ (WebCore::nextParagraphBoundaryInDirection):
+ (WebCore::nextDocumentBoundaryInDirection):
+ (WebCore::positionOfNextBoundaryOfGranularity):
+ (WebCore::enclosingTextUnitOfGranularity):
+ (WebCore::distanceBetweenPositions):
+ (WebCore::wordRangeFromPosition):
+ (WebCore::closestWordBoundaryForPosition):
+ * editing/VisibleUnits.h:
+ * editing/ios/DictationCommandIOS.cpp: Added.
+ * editing/ios/DictationCommandIOS.h: Added.
+ (WebCore::DictationCommandIOS::create):
+ (WebCore::DictationCommandIOS::editingAction):
+ * editing/mac/FrameSelectionMac.mm:
+ (WebCore::FrameSelection::notifyAccessibilityForSelectionChange):
+ * fileapi/AsyncFileStream.cpp:
+ * generate-export-file: Added.
+ * inspector/InspectorCounters.h:
+ * inspector/InspectorFrontendHost.h:
+ * make-export-file-generator:
+ * plugins/PluginPackage.h:
+ * plugins/PluginViewBase.h:
+ (WebCore::PluginViewBase::willProvidePluginLayer):
+ (WebCore::PluginViewBase::attachPluginLayer):
+ (WebCore::PluginViewBase::detachPluginLayer):
+ * style/StyleResolveForDocument.cpp:
+ (WebCore::Style::resolveForDocument):
+ * style/StyleResolveTree.cpp:
+ (WebCore::Style::elementImplicitVisibility):
+ * testing/Internals.cpp:
+ (WebCore::Internals::getCurrentCursorInfo):
+ (WebCore::Internals::isSelectPopupVisible):
+ * workers/WorkerThread.cpp:
+ (WebCore::WorkerThread::workerThread):
+
+2014-01-10 Daniel Bates <dabates@apple.com>
+
</ins><span class="cx"> Fix the iOS build after <http://trac.webkit.org/changeset/161589>
</span><span class="cx"> (https://bugs.webkit.org/show_bug.cgi?id=126654)
</span><span class="cx">
</span></span></pre></div>
<a id="trunkSourceWebCoreConfigurationsBasexcconfig"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/Configurations/Base.xcconfig (161637 => 161638)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/Configurations/Base.xcconfig        2014-01-10 16:55:05 UTC (rev 161637)
+++ trunk/Source/WebCore/Configurations/Base.xcconfig        2014-01-10 17:06:52 UTC (rev 161638)
</span><span class="lines">@@ -21,6 +21,8 @@
</span><span class="cx"> // (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
</span><span class="cx"> // OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
</span><span class="cx">
</span><ins>+#include "iOS.xcconfig"
+
</ins><span class="cx"> CLANG_CXX_LANGUAGE_STANDARD = gnu++0x;
</span><span class="cx"> CLANG_CXX_LIBRARY = libc++;
</span><span class="cx"> CLANG_WARN_BOOL_CONVERSION = YES;
</span><span class="lines">@@ -56,6 +58,7 @@
</span><span class="cx"> GCC_WARN_64_TO_32_BIT_CONVERSION_ = YES;
</span><span class="cx"> GCC_WARN_64_TO_32_BIT_CONVERSION_armv7 = YES;
</span><span class="cx"> GCC_WARN_64_TO_32_BIT_CONVERSION_armv7s = YES;
</span><ins>+GCC_WARN_64_TO_32_BIT_CONVERSION_arm64 = NO;
</ins><span class="cx"> GCC_WARN_64_TO_32_BIT_CONVERSION_i386 = YES;
</span><span class="cx"> GCC_WARN_64_TO_32_BIT_CONVERSION_x86_64 = NO;
</span><span class="cx"> GCC_WARN_ABOUT_DEPRECATED_FUNCTIONS = NO;
</span><span class="lines">@@ -82,7 +85,10 @@
</span><span class="cx"> DEBUG_DEFINES = $(DEBUG_DEFINES_$(CURRENT_VARIANT));
</span><span class="cx">
</span><span class="cx"> GCC_OPTIMIZATION_LEVEL = $(GCC_OPTIMIZATION_LEVEL_$(CURRENT_VARIANT));
</span><del>-GCC_OPTIMIZATION_LEVEL_normal = 2;
</del><ins>+GCC_OPTIMIZATION_LEVEL_normal = $(GCC_OPTIMIZATION_LEVEL_normal_$(PLATFORM_NAME));
+GCC_OPTIMIZATION_LEVEL_normal_iphoneos = 3;
+GCC_OPTIMIZATION_LEVEL_normal_iphonesimulator = 3;
+GCC_OPTIMIZATION_LEVEL_normal_macosx = 2;
</ins><span class="cx"> GCC_OPTIMIZATION_LEVEL_debug = 0;
</span><span class="cx">
</span><span class="cx"> STRIP_INSTALLED_PRODUCT = $(STRIP_INSTALLED_PRODUCT_$(CURRENT_VARIANT));
</span><span class="lines">@@ -93,7 +99,9 @@
</span><span class="cx"> DEAD_CODE_STRIPPING_normal = YES;
</span><span class="cx"> DEAD_CODE_STRIPPING = $(DEAD_CODE_STRIPPING_$(CURRENT_VARIANT));
</span><span class="cx">
</span><del>-SECTORDER_FLAGS = -Wl,-order_file,WebCore.order;
</del><ins>+SECTORDER_FLAGS = $(SECTORDER_FLAGS_$(PLATFORM_NAME));
+SECTORDER_FLAGS_iphoneos = -Wl,-order_file,$(SDKROOT)/AppleInternal/OrderFiles/WebCore.order;
+SECTORDER_FLAGS_macosx = -Wl,-order_file,WebCore.order;
</ins><span class="cx">
</span><span class="cx"> WEBCORE_SQLITE3_HEADER_SEARCH_PATHS = $(NEXT_ROOT)/usr/local/include/WebCoreSQLite3;
</span><span class="cx"> SQLITE3_HEADER_SEARCH_PATHS = $(SQLITE3_HEADER_SEARCH_PATHS_$(PLATFORM_NAME));
</span></span></pre></div>
<a id="trunkSourceWebCoreConfigurationsWebCorexcconfig"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/Configurations/WebCore.xcconfig (161637 => 161638)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/Configurations/WebCore.xcconfig        2014-01-10 16:55:05 UTC (rev 161637)
+++ trunk/Source/WebCore/Configurations/WebCore.xcconfig        2014-01-10 17:06:52 UTC (rev 161638)
</span><span class="lines">@@ -33,8 +33,9 @@
</span><span class="cx"> EXPORTED_SYMBOLS_FILE_i386 = $(EXPORTED_SYMBOLS_FILE_i386_$(PLATFORM_NAME));
</span><span class="cx"> EXPORTED_SYMBOLS_FILE_i386_iphonesimulator = $(BUILT_PRODUCTS_DIR)/DerivedSources/WebCore/WebCore.LP64.i386.exp;
</span><span class="cx"> EXPORTED_SYMBOLS_FILE_i386_macosx = $(BUILT_PRODUCTS_DIR)/DerivedSources/WebCore/WebCore.exp;
</span><del>-EXPORTED_SYMBOLS_FILE_ppc = $(BUILT_PRODUCTS_DIR)/DerivedSources/WebCore/WebCore.exp;
-EXPORTED_SYMBOLS_FILE_x86_64 = $(BUILT_PRODUCTS_DIR)/DerivedSources/WebCore/WebCore.LP64.exp;
</del><ins>+EXPORTED_SYMBOLS_FILE_x86_64 = $(EXPORTED_SYMBOLS_FILE_x86_64_$(PLATFORM_NAME));
+EXPORTED_SYMBOLS_FILE_x86_64_iphonesimulator = $(BUILT_PRODUCTS_DIR)/DerivedSources/WebCore/WebCore.LP64.x86_64.exp;
+EXPORTED_SYMBOLS_FILE_x86_64_macosx = $(BUILT_PRODUCTS_DIR)/DerivedSources/WebCore/WebCore.LP64.exp;
</ins><span class="cx"> GCC_PREFIX_HEADER = WebCorePrefix.h;
</span><span class="cx"> GCC_PREPROCESSOR_DEFINITIONS = $(DEBUG_DEFINES) $(FEATURE_DEFINES) WEBKIT_VERSION_MIN_REQUIRED=WEBKIT_VERSION_LATEST $(GCC_PREPROCESSOR_DEFINITIONS);
</span><span class="cx"> FRAMEWORK_SEARCH_PATHS = $(FRAMEWORK_SEARCH_PATHS_$(PLATFORM_NAME));
</span><span class="lines">@@ -51,7 +52,9 @@
</span><span class="cx"> STAGED_FRAMEWORKS_SEARCH_PATH = $(STAGED_FRAMEWORKS_SEARCH_PATH_$(USE_STAGING_INSTALL_PATH));
</span><span class="cx"> STAGED_FRAMEWORKS_SEARCH_PATH_YES = $(NEXT_ROOT)$(SYSTEM_LIBRARY_DIR)/StagedFrameworks/Safari;
</span><span class="cx">
</span><del>-HEADER_SEARCH_PATHS = ForwardingHeaders icu /usr/include/libxslt /usr/include/libxml2 "${BUILT_PRODUCTS_DIR}/DerivedSources/WebCore" "${BUILT_PRODUCTS_DIR}/usr/local/include" $(HEADER_SEARCH_PATHS);
</del><ins>+WEBKITADDITIONS_HEADER_SEARCH_PATHS = $(BUILT_PRODUCTS_DIR)/usr/local/include/WebKitAdditions $(SDKROOT)/usr/local/include/WebKitAdditions;
+
+HEADER_SEARCH_PATHS = ForwardingHeaders icu /usr/include/libxslt /usr/include/libxml2 $(SQLITE3_HEADER_SEARCH_PATHS) "${BUILT_PRODUCTS_DIR}/DerivedSources/WebCore" "$(BUILT_PRODUCTS_DIR)/usr/local/include" $(WEBKITADDITIONS_HEADER_SEARCH_PATHS) $(HEADER_SEARCH_PATHS);
</ins><span class="cx"> INFOPLIST_FILE = Info.plist;
</span><span class="cx"> INSTALL_PATH = $(INSTALL_PATH_$(PLATFORM_NAME));
</span><span class="cx"> INSTALL_PATH_iphoneos = $(SYSTEM_LIBRARY_DIR)/PrivateFrameworks;
</span><span class="lines">@@ -68,8 +71,8 @@
</span><span class="cx"> PRODUCT_NAME = WebCore;
</span><span class="cx"> OTHER_LDFLAGS_BASE = -lsqlite3 -lobjc -lANGLE -allowable_client WebCoreTestSupport;
</span><span class="cx"> OTHER_LDFLAGS = $(inherited) $(OTHER_LDFLAGS_$(PLATFORM_NAME));
</span><del>-OTHER_LDFLAGS_iphoneos = $(OTHER_LDFLAGS_BASE) -framework CFNetwork -framework CoreFoundation -framework CoreGraphics -framework CoreText -framework Foundation -framework GraphicsServices -framework ImageIO -framework QuartzCore;
-OTHER_LDFLAGS_iphonesimulator = $(OTHER_LDFLAGS_iphoneos);
</del><ins>+OTHER_LDFLAGS_iphoneos = $(OTHER_LDFLAGS_iphonesimulator) -framework IOSurface;
+OTHER_LDFLAGS_iphonesimulator = $(OTHER_LDFLAGS_BASE) -framework Accelerate -framework CFNetwork -framework CoreFoundation -framework CoreGraphics -framework CoreText -framework Foundation -framework GraphicsServices -framework ImageIO -framework OpenGLES -framework QuartzCore -lMobileGestalt;
</ins><span class="cx"> OTHER_LDFLAGS_macosx = $(OTHER_LDFLAGS_BASE) -sub_library libobjc -umbrella WebKit -allowable_client WebKit2 -framework IOSurface;
</span><span class="cx">
</span><span class="cx"> NORMAL_WEBCORE_FRAMEWORKS_DIR = $(NORMAL_WEBCORE_FRAMEWORKS_DIR_$(PLATFORM_NAME));
</span><span class="lines">@@ -102,10 +105,13 @@
</span><span class="cx"> JAVASCRIPTCORE_PRIVATE_HEADERS_DIR = $(JAVASCRIPTCORE_PRIVATE_HEADERS_DIR_$(CONFIGURATION));
</span><span class="cx"> JAVASCRIPTCORE_PRIVATE_HEADERS_DIR_Release = $(JAVASCRIPTCORE_PRIVATE_HEADERS_engineering);
</span><span class="cx"> JAVASCRIPTCORE_PRIVATE_HEADERS_DIR_Debug = $(JAVASCRIPTCORE_PRIVATE_HEADERS_engineering);
</span><del>-JAVASCRIPTCORE_PRIVATE_HEADERS_DIR_Production = $(SDKROOT)$(PRODUCTION_FRAMEWORKS_DIR)/JavaScriptCore.framework/PrivateHeaders;
</del><ins>+JAVASCRIPTCORE_PRIVATE_HEADERS_DIR_Production = $(JAVASCRIPTCORE_PRIVATE_HEADERS_Production_$(PLATFORM_NAME));
+JAVASCRIPTCORE_PRIVATE_HEADERS_DIR_Production_iphoneos = $(SDKROOT)/$(SYSTEM_LIBRARY_DIR)/Frameworks/JavaScriptCore.framework/Headers;
+JAVASCRIPTCORE_PRIVATE_HEADERS_DIR_Production_iphonesimulator = $(JAVASCRIPTCORE_PRIVATE_HEADERS_DIR_Production_iphoneos);
+JAVASCRIPTCORE_PRIVATE_HEADERS_DIR_Production_macosx = $(SDKROOT)$(PRODUCTION_FRAMEWORKS_DIR)/JavaScriptCore.framework/PrivateHeaders;
</ins><span class="cx"> JAVASCRIPTCORE_PRIVATE_HEADERS_engineering = $(BUILT_PRODUCTS_DIR)/JavaScriptCore.framework/PrivateHeaders;
</span><span class="cx">
</span><span class="cx"> EXCLUDED_SOURCE_FILE_NAMES = $(EXCLUDED_SOURCE_FILE_NAMES_$(PLATFORM_NAME));
</span><del>-EXCLUDED_SOURCE_FILE_NAMES_iphoneos = *.tiff *Cursor.png Cursor.cpp CursorMac.mm EventHandlerMac.mm HTMLConverter.mm KillRingMac.mm PlatformEventFactoryMac.mm SSLKeyGeneratorMac.cpp SearchPopupMenuMac.mm ScrollingCoordinatorMac.mm ScrollingStateScrollingNodeMac.mm ScrollingTreeScrollingNodeMac.mm SharedTimerMac.mm WebVideoFullscreenController.mm WebVideoFullscreenHUDWindowController.mm WebWindowAnimation.mm;
</del><ins>+EXCLUDED_SOURCE_FILE_NAMES_iphoneos = *.tiff *Cursor.png AccessibilityObjectMac.mm AXObjectCacheMac.mm ClipboardMac.mm ColorMac.mm Cursor.cpp CursorMac.mm EditorMac.mm EventHandlerMac.mm EventLoopMac.mm GeolocationServiceMac.mm GraphicsContext3DOpenGLES.cpp IconDatabase.cpp IconMac.mm KeyEventMac.mm KillRingMac.mm LocalCurrentGraphicsContext.mm MIMETypeRegistryMac.mm MediaPlayerPrivateQTKit.mm NSScrollerImpDetails.mm NetworkStateNotifierMac.cpp PasteboardMac.mm PlatformEventFactoryMac.mm PlatformMouseEventMac.mm PlatformPasteboardMac.mm PlatformScreenMac.mm PlatformSpeechSynthesizerMac.mm PluginMainThreadScheduler.cpp RunLoopMac.mm SSLKeyGeneratorMac.cpp ScrollingCoordinatorMac.mm ScrollingStateScrollingNodeMac.mm ScrollingTreeScrollingNodeMac.mm ScrollViewMac.mm ScrollbarThemeMac.mm SharedTimerMac.mm SoundMac.mm SystemTimeMac.cpp ThemeMac.mm ThreadCheck.mm WebAccessibilityObjectWrapperMac.mm WebCoreSystemInterface.mm WebCoreURLResponse.mm WebCoreView.m WebFontCache.mm WebVideoFullscreenController.mm WebVideoFullscreenHUDWindowController.mm WebWindowAnimation.mm WheelEventMac.mm WidgetMac.mm mac/LayerPool.mm DisplayRefreshMonitorMac.mm;
</ins><span class="cx"> EXCLUDED_SOURCE_FILE_NAMES_iphonesimulator = $(EXCLUDED_SOURCE_FILE_NAMES_iphoneos);
</span><span class="cx"> EXCLUDED_SOURCE_FILE_NAMES_macosx = *IOS.h *IOS.cpp *IOS.mm KillRingNone.cpp WAKAppKitStubs.h WAKClipView.h WAKResponder.h WAKScrollView.h WAKView.h WAKViewPrivate.h WAKWindow.h WKContentObservation.h WKGraphics.h WKTypes.h WKUtilities.h WKView.h WKViewPrivate.h WebCoreThread.h WebCoreThreadMessage.h WebCoreThreadRun.h WebCoreThreadSystemInterface.h;
</span></span></pre></div>
<a id="trunkSourceWebCoreConfigurationsWebCoreTestSupportxcconfig"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/Configurations/WebCoreTestSupport.xcconfig (161637 => 161638)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/Configurations/WebCoreTestSupport.xcconfig        2014-01-10 16:55:05 UTC (rev 161637)
+++ trunk/Source/WebCore/Configurations/WebCoreTestSupport.xcconfig        2014-01-10 17:06:52 UTC (rev 161638)
</span><span class="lines">@@ -26,10 +26,15 @@
</span><span class="cx"> PRIVATE_HEADERS_FOLDER_PATH = $(PRIVATE_HEADERS_FOLDER_PATH_$(CONFIGURATION));
</span><span class="cx"> PRIVATE_HEADERS_FOLDER_PATH_Debug = WebCoreTestSupport;
</span><span class="cx"> PRIVATE_HEADERS_FOLDER_PATH_Release = $(PRIVATE_HEADERS_FOLDER_PATH_Debug);
</span><del>-PRIVATE_HEADERS_FOLDER_PATH_Production = /usr/local/include/WebCoreTestSupport;
</del><ins>+PRIVATE_HEADERS_FOLDER_PATH_Production = $(PRIVATE_HEADERS_FOLDER_PATH_Production_$(PLATFORM_NAME));
+PRIVATE_HEADERS_FOLDER_PATH_Production_iphoneos = /usr/local/include/WebCoreTestSupport;
+PRIVATE_HEADERS_FOLDER_PATH_Production_iphonesimulator = $(INDIGO_INSTALL_PATH_PREFIX)$(PRIVATE_HEADERS_FOLDER_PATH_Production_iphoneos);
+PRIVATE_HEADERS_FOLDER_PATH_Production_macosx = /usr/local/include/WebCoreTestSupport;
</ins><span class="cx">
</span><del>-INSTALL_PATH = $(INSTALL_PATH_$(CONFIGURATION));
-INSTALL_PATH_Production = /usr/local/lib;
</del><ins>+INSTALL_PATH = $(INSTALL_PATH_$(CONFIGURATION)_$(PLATFORM_NAME));
+INSTALL_PATH_Production_iphoneos = /usr/local/lib;
+INSTALL_PATH_Production_iphonesimulator = $(INDIGO_INSTALL_PATH_PREFIX)$(INSTALL_PATH_Production_iphoneos);
+INSTALL_PATH_Production_macosx = /usr/local/lib;
</ins><span class="cx">
</span><span class="cx"> SKIP_INSTALL = $(SKIP_INSTALL_$(FORCE_TOOL_INSTALL));
</span><span class="cx"> SKIP_INSTALL_ = YES;
</span></span></pre></div>
<a id="trunkSourceWebCoreConfigurationsiOSxcconfig"></a>
<div class="addfile"><h4>Added: trunk/Source/WebCore/Configurations/iOS.xcconfig (0 => 161638)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/Configurations/iOS.xcconfig         (rev 0)
+++ trunk/Source/WebCore/Configurations/iOS.xcconfig        2014-01-10 17:06:52 UTC (rev 161638)
</span><span class="lines">@@ -0,0 +1 @@
</span><ins>+#include "<DEVELOPER_DIR>/AppleInternal/XcodeConfig/AspenFamily.xcconfig"
</ins></span></pre></div>
<a id="trunkSourceWebCoreDerivedSourcesmake"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/DerivedSources.make (161637 => 161638)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/DerivedSources.make        2014-01-10 16:55:05 UTC (rev 161637)
+++ trunk/Source/WebCore/DerivedSources.make        2014-01-10 17:06:52 UTC (rev 161638)
</span><span class="lines">@@ -28,6 +28,7 @@
</span><span class="cx">
</span><span class="cx"> VPATH = \
</span><span class="cx"> $(WebCore) \
</span><ins>+ $(WebCore)/Modules/airplay \
</ins><span class="cx"> $(WebCore)/Modules/encryptedmedia \
</span><span class="cx"> $(WebCore)/Modules/geolocation \
</span><span class="cx"> $(WebCore)/Modules/indexeddb \
</span><span class="lines">@@ -67,6 +68,7 @@
</span><span class="cx"> #
</span><span class="cx">
</span><span class="cx"> BINDING_IDLS = \
</span><ins>+ $(WebCore)/Modules/airplay/WebKitPlaybackTargetAvailabilityEvent.idl \
</ins><span class="cx"> $(WebCore)/Modules/encryptedmedia/MediaKeyMessageEvent.idl \
</span><span class="cx"> $(WebCore)/Modules/encryptedmedia/MediaKeyNeededEvent.idl \
</span><span class="cx"> $(WebCore)/Modules/encryptedmedia/MediaKeySession.idl \
</span><span class="lines">@@ -304,9 +306,6 @@
</span><span class="cx"> $(WebCore)/dom/StringCallback.idl \
</span><span class="cx"> $(WebCore)/dom/Text.idl \
</span><span class="cx"> $(WebCore)/dom/TextEvent.idl \
</span><del>- $(WebCore)/dom/Touch.idl \
- $(WebCore)/dom/TouchEvent.idl \
- $(WebCore)/dom/TouchList.idl \
</del><span class="cx"> $(WebCore)/dom/TransitionEvent.idl \
</span><span class="cx"> $(WebCore)/dom/TreeWalker.idl \
</span><span class="cx"> $(WebCore)/dom/UIEvent.idl \
</span><span class="lines">@@ -719,6 +718,12 @@
</span><span class="cx">         SDK_FLAGS=-isysroot $(SDKROOT)
</span><span class="cx"> endif
</span><span class="cx">
</span><ins>+ifeq ($(shell $(CC) -isysroot $(SDKROOT) -std=gnu++11 -x c++ -E -P -dM -F $(BUILT_PRODUCTS_DIR) $(FRAMEWORK_FLAGS) $(HEADER_FLAGS) -include "wtf/Platform.h" /dev/null | grep ' WTF_PLATFORM_IOS ' | cut -d' ' -f3), 1)
+ WTF_PLATFORM_IOS = 1
+else
+ WTF_PLATFORM_IOS = 0
+endif
+
</ins><span class="cx"> ifeq ($(shell $(CC) -std=gnu++11 -x c++ -E -P -dM $(SDK_FLAGS) $(FRAMEWORK_FLAGS) $(HEADER_FLAGS) -include "wtf/Platform.h" /dev/null | grep ENABLE_ORIENTATION_EVENTS | cut -d' ' -f3), 1)
</span><span class="cx"> ENABLE_ORIENTATION_EVENTS = 1
</span><span class="cx"> endif
</span><span class="lines">@@ -727,6 +732,32 @@
</span><span class="cx"> PLATFORM_FEATURE_DEFINES = Configurations/FeatureDefines.xcconfig
</span><span class="cx"> endif
</span><span class="cx">
</span><ins>+ifeq ($(WTF_PLATFORM_IOS), 1)
+
+ADDITIONAL_BINDING_IDLS = \
+ GestureEvent.idl \
+ Touch.idl \
+ TouchEvent.idl \
+ TouchList.idl
+
+BINDING_IDLS += $(ADDITIONAL_BINDING_IDLS)
+
+all : $(ADDITIONAL_BINDING_IDLS:%.idl=JS%.h)
+
+vpath %.idl $(BUILT_PRODUCTS_DIR)/usr/local/include $(SDKROOT)/usr/local/include
+
+$(ADDITIONAL_BINDING_IDLS) : % : WebKitAdditions/%
+ cp $< .
+
+else
+
+BINDING_IDLS += \
+ $(WebCore)/dom/Touch.idl \
+ $(WebCore)/dom/TouchEvent.idl \
+ $(WebCore)/dom/TouchList.idl
+
+endif
+
</ins><span class="cx"> endif # MACOS
</span><span class="cx">
</span><span class="cx"> ifndef ENABLE_ORIENTATION_EVENTS
</span><span class="lines">@@ -1156,15 +1187,52 @@
</span><span class="cx">
</span><span class="cx"> ifneq ($(ACTION),installhdrs)
</span><span class="cx">
</span><ins>+ifeq ($(WTF_PLATFORM_IOS),1)
+
+ifeq ($(findstring armv6,$(ARCHS)), armv6)
+ WEBCORE_EXPORT_FILES := $(WEBCORE_EXPORT_FILES) WebCore.LP64.armv6.exp
+endif
+ifeq ($(findstring armv7f,$(ARCHS)), armv7f)
+ WEBCORE_EXPORT_FILES := $(WEBCORE_EXPORT_FILES) WebCore.LP64.armv7f.exp
+endif
+ifeq ($(findstring armv7s,$(ARCHS)), armv7s)
+ WEBCORE_EXPORT_FILES := $(WEBCORE_EXPORT_FILES) WebCore.LP64.armv7s.exp
+endif
+ifeq ($(findstring armv7,$(ARCHS)), armv7)
+ WEBCORE_EXPORT_FILES := $(WEBCORE_EXPORT_FILES) WebCore.LP64.armv7.exp
+endif
+ifeq ($(findstring arm64,$(ARCHS)), arm64)
+ WEBCORE_EXPORT_FILES := $(WEBCORE_EXPORT_FILES) WebCore.LP64.arm64.exp
+endif
+ifeq ($(findstring i386,$(ARCHS)), i386)
+ WEBCORE_EXPORT_FILES := $(WEBCORE_EXPORT_FILES) WebCore.LP64.i386.exp
+endif
+ifeq ($(findstring x86_64,$(ARCHS)), x86_64)
+ WEBCORE_EXPORT_FILES := $(WEBCORE_EXPORT_FILES) WebCore.LP64.x86_64.exp
+endif
+
+all : $(WEBCORE_EXPORT_FILES)
+
+WebCore.%.exp : generate-export-file WebCore.exp.in
+ $^ $@
+
+# Switch NSRect, NSSize and NSPoint with their CG counterparts for the 64-bit exports file.
+WebCore.LP64.%.exp : WebCore.%.exp
+ cat $^ | sed -e s/7_NSRect/6CGRect/ -e s/7_NSSize/6CGSize/ -e s/8_NSPoint/7CGPoint/ > $@
+
+else
+
</ins><span class="cx"> all : WebCore.exp WebCore.LP64.exp
</span><span class="cx">
</span><span class="cx"> WebCore.exp : $(BUILT_PRODUCTS_DIR)/WebCoreExportFileGenerator
</span><del>-        $^ > $@
</del><ins>+ $^ | grep -v '^# ' | sed -e 's/^#//' > $@
</ins><span class="cx">
</span><span class="cx"> # Switch NSRect, NSSize and NSPoint with their CG counterparts for the 64-bit exports file.
</span><span class="cx"> WebCore.LP64.exp : WebCore.exp
</span><span class="cx">         cat $^ | sed -e s/7_NSRect/6CGRect/ -e s/7_NSSize/6CGSize/ -e s/8_NSPoint/7CGPoint/ > $@
</span><span class="cx">
</span><ins>+endif # WTF_PLATFORM_IOS
+
</ins><span class="cx"> endif # installhdrs
</span><span class="cx">
</span><span class="cx"> # --------
</span></span></pre></div>
<a id="trunkSourceWebCoreEnglishlprojLocalizablestrings"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/English.lproj/Localizable.strings (161637 => 161638)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/English.lproj/Localizable.strings        2014-01-10 16:55:05 UTC (rev 161637)
+++ trunk/Source/WebCore/English.lproj/Localizable.strings        2014-01-10 17:06:52 UTC (rev 161638)
</span><span class="lines">@@ -112,6 +112,12 @@
</span><span class="cx"> /* title for a multiple file chooser button used in HTML forms. This title should be as short as possible. */
</span><span class="cx"> "Choose Files" = "Choose Files";
</span><span class="cx">
</span><ins>+/* PLATFORM(IOS) title for file button used in HTML forms for media files */
+"Choose Media (Single)" = "Choose Photo";
+
+/* PLATFORM(IOS) title for file button used in HTML5 forms for multiple media files */
+"Choose Media (Multiple)" = "Choose Photos";
+
</ins><span class="cx"> /* menu item in Recent Searches menu that empties menu's contents */
</span><span class="cx"> "Clear Recent Searches" = "Clear Recent Searches";
</span><span class="cx">
</span><span class="lines">@@ -157,6 +163,12 @@
</span><span class="cx"> /* Default writing direction context menu item */
</span><span class="cx"> "Default" = "Default";
</span><span class="cx">
</span><ins>+/* PLATFORM(IOS) Undo action name */
+"Delete (Undo action name)" = "Delete";
+
+/* PLATFORM(IOS) Undo action name */
+"Dictation (Undo action name)" = "Dictation";
+
</ins><span class="cx"> /* text to display in <details> tag when it has no <summary> child */
</span><span class="cx"> "Details" = "Details";
</span><span class="cx">
</span><span class="lines">@@ -781,6 +793,12 @@
</span><span class="cx"> /* text to display in file button used in HTML forms when no files are selected and the button allows multiple files to be selected */
</span><span class="cx"> "no files selected" = "no files selected";
</span><span class="cx">
</span><ins>+/* PLATFORM(IOS) text to display in file button used in HTML forms for media files when no media file is selected */
+"no media selected (single)" = "no photo selected";
+
+/* PLATFORM(IOS) text to display in file button used in HTML forms for media files when no media files are selected and the button allows multiple files to be selected */
+"no media selected (multiple)" = "no photos selected";
+
</ins><span class="cx"> /* HTTP result code string */
</span><span class="cx"> "no longer exists" = "no longer exists";
</span><span class="cx">
</span></span></pre></div>
<a id="trunkSourceWebCoreModulesairplayWebKitPlaybackTargetAvailabilityEventcppfromrev161637trunkSourceWebCoreeditingTextAffinityh"></a>
<div class="copfile"><h4>Copied: trunk/Source/WebCore/Modules/airplay/WebKitPlaybackTargetAvailabilityEvent.cpp (from rev 161637, trunk/Source/WebCore/editing/TextAffinity.h) (0 => 161638)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/Modules/airplay/WebKitPlaybackTargetAvailabilityEvent.cpp         (rev 0)
+++ trunk/Source/WebCore/Modules/airplay/WebKitPlaybackTargetAvailabilityEvent.cpp        2014-01-10 17:06:52 UTC (rev 161638)
</span><span class="lines">@@ -0,0 +1,59 @@
</span><ins>+/*
+ * Copyright (C) 2013 Apple Inc. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY APPLE COMPUTER, INC. ``AS IS'' AND ANY
+ * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE COMPUTER, INC. OR
+ * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+ * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+ * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
+ * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+ * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#include "config.h"
+#include "WebKitPlaybackTargetAvailabilityEvent.h"
+
+#if ENABLE(IOS_AIRPLAY)
+
+namespace WebCore {
+
+static const AtomicString& stringForPlaybackTargetAvailability(bool available)
+{
+ DEFINE_STATIC_LOCAL(AtomicString, availableString, ("available", AtomicString::ConstructFromLiteral));
+ DEFINE_STATIC_LOCAL(AtomicString, notAvailableString, ("not-available", AtomicString::ConstructFromLiteral));
+
+ return available ? availableString : notAvailableString;
+}
+
+WebKitPlaybackTargetAvailabilityEvent::WebKitPlaybackTargetAvailabilityEvent()
+{
+}
+
+WebKitPlaybackTargetAvailabilityEvent::WebKitPlaybackTargetAvailabilityEvent(const AtomicString& eventType, bool available)
+ : Event(eventType, false, false)
+ , m_availability(stringForPlaybackTargetAvailability(available))
+{
+}
+
+WebKitPlaybackTargetAvailabilityEvent::WebKitPlaybackTargetAvailabilityEvent(const AtomicString& eventType, const WebKitPlaybackTargetAvailabilityEventInit& initializer)
+ : Event(eventType, initializer)
+ , m_availability(initializer.availability)
+{
+}
+
+} // namespace WebCore
+
+#endif // ENABLE(IOS_AIRPLAY)
</ins></span></pre></div>
<a id="trunkSourceWebCoreModulesairplayWebKitPlaybackTargetAvailabilityEventh"></a>
<div class="addfile"><h4>Added: trunk/Source/WebCore/Modules/airplay/WebKitPlaybackTargetAvailabilityEvent.h (0 => 161638)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/Modules/airplay/WebKitPlaybackTargetAvailabilityEvent.h         (rev 0)
+++ trunk/Source/WebCore/Modules/airplay/WebKitPlaybackTargetAvailabilityEvent.h        2014-01-10 17:06:52 UTC (rev 161638)
</span><span class="lines">@@ -0,0 +1,79 @@
</span><ins>+/*
+ * Copyright (C) 2013 Apple Inc. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY APPLE COMPUTER, INC. ``AS IS'' AND ANY
+ * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE COMPUTER, INC. OR
+ * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+ * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+ * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
+ * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+ * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#ifndef WebKitPlaybackTargetAvailabilityEvent_h
+#define WebKitPlaybackTargetAvailabilityEvent_h
+
+#if ENABLE(IOS_AIRPLAY)
+
+#include "Event.h"
+#include "EventNames.h"
+
+namespace WebCore {
+
+struct WebKitPlaybackTargetAvailabilityEventInit : public EventInit {
+ WebKitPlaybackTargetAvailabilityEventInit()
+ {
+ };
+
+ String availability;
+};
+
+class WebKitPlaybackTargetAvailabilityEvent : public Event {
+public:
+ ~WebKitPlaybackTargetAvailabilityEvent() { }
+
+ static PassRefPtr<WebKitPlaybackTargetAvailabilityEvent> create()
+ {
+ return adoptRef(new WebKitPlaybackTargetAvailabilityEvent);
+ }
+
+ static PassRefPtr<WebKitPlaybackTargetAvailabilityEvent> create(const AtomicString& eventType, bool available)
+ {
+ return adoptRef(new WebKitPlaybackTargetAvailabilityEvent(eventType, available));
+ }
+
+ static PassRefPtr<WebKitPlaybackTargetAvailabilityEvent> create(const AtomicString& eventType, const WebKitPlaybackTargetAvailabilityEventInit& initializer)
+ {
+ return adoptRef(new WebKitPlaybackTargetAvailabilityEvent(eventType, initializer));
+ }
+
+ String availability() const { return m_availability; }
+
+ virtual EventInterface eventInterface() const OVERRIDE { return WebKitPlaybackTargetAvailabilityEventInterfaceType; }
+
+private:
+ WebKitPlaybackTargetAvailabilityEvent();
+ explicit WebKitPlaybackTargetAvailabilityEvent(const AtomicString& eventType, bool available);
+ WebKitPlaybackTargetAvailabilityEvent(const AtomicString& eventType, const WebKitPlaybackTargetAvailabilityEventInit&);
+
+ String m_availability;
+};
+
+} // namespace WebCore
+
+#endif // ENABLE(IOS_AIRPLAY)
+
+#endif // WebKitPlaybackTargetAvailabilityEvent_h
</ins></span></pre></div>
<a id="trunkSourceWebCoreModulesairplayWebKitPlaybackTargetAvailabilityEventidlfromrev161637trunkSourceWebCoreeditingDeleteButtonh"></a>
<div class="copfile"><h4>Copied: trunk/Source/WebCore/Modules/airplay/WebKitPlaybackTargetAvailabilityEvent.idl (from rev 161637, trunk/Source/WebCore/editing/DeleteButton.h) (0 => 161638)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/Modules/airplay/WebKitPlaybackTargetAvailabilityEvent.idl         (rev 0)
+++ trunk/Source/WebCore/Modules/airplay/WebKitPlaybackTargetAvailabilityEvent.idl        2014-01-10 17:06:52 UTC (rev 161638)
</span><span class="lines">@@ -0,0 +1,33 @@
</span><ins>+/*
+ * Copyright (C) 2013 Apple Inc. All Rights Reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY APPLE, INC. ``AS IS'' AND ANY
+ * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE COMPUTER, INC. OR
+ * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+ * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+ * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
+ * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+ * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ */
+
+[
+ Conditional=IOS_AIRPLAY,
+ ConstructorTemplate=Event
+] interface WebKitPlaybackTargetAvailabilityEvent : Event {
+ [InitializedByEventConstructor] readonly attribute DOMString availability;
+};
+
</ins></span></pre></div>
<a id="trunkSourceWebCoreModulesgeolocationGeolocationcpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/Modules/geolocation/Geolocation.cpp (161637 => 161638)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/Modules/geolocation/Geolocation.cpp        2014-01-10 16:55:05 UTC (rev 161637)
+++ trunk/Source/WebCore/Modules/geolocation/Geolocation.cpp        2014-01-10 17:06:52 UTC (rev 161638)
</span><span class="lines">@@ -235,6 +235,11 @@
</span><span class="cx"> Geolocation::Geolocation(ScriptExecutionContext* context)
</span><span class="cx"> : ActiveDOMObject(context)
</span><span class="cx"> , m_allowGeolocation(Unknown)
</span><ins>+#if PLATFORM(IOS)
+ , m_isSuspended(false)
+ , m_hasChangedPosition(false)
+ , m_resumeTimer(this, &Geolocation::resumeTimerFired)
+#endif
</ins><span class="cx"> {
</span><span class="cx"> }
</span><span class="cx">
</span><span class="lines">@@ -258,6 +263,123 @@
</span><span class="cx"> return document() ? document()->page() : 0;
</span><span class="cx"> }
</span><span class="cx">
</span><ins>+#if PLATFORM(IOS)
+bool Geolocation::canSuspend() const
+{
+ return !hasListeners();
+}
+
+void Geolocation::suspend(ReasonForSuspension reason)
+{
+ // Allow pages that no longer have listeners to enter the page cache.
+ // Have them stop updating and reset geolocation permissions when the page is resumed.
+ if (reason == ActiveDOMObject::DocumentWillBecomeInactive) {
+ ASSERT(!hasListeners());
+ stop();
+ m_resetOnResume = true;
+ }
+
+ // Suspend GeoNotifier timeout timers.
+ if (hasListeners())
+ stopTimers();
+
+ m_isSuspended = true;
+ m_resumeTimer.stop();
+ ActiveDOMObject::suspend(reason);
+}
+
+void Geolocation::resume()
+{
+ ASSERT(WebThreadIsLockedOrDisabled());
+ ActiveDOMObject::resume();
+
+ if (!m_resumeTimer.isActive())
+ m_resumeTimer.startOneShot(0);
+}
+
+void Geolocation::resumeTimerFired(Timer<Geolocation>*)
+{
+ m_isSuspended = false;
+
+ if (m_resetOnResume) {
+ resetAllGeolocationPermission();
+ m_resetOnResume = false;
+ }
+
+ // Resume GeoNotifier timeout timers.
+ if (hasListeners()) {
+ GeoNotifierSet::const_iterator end = m_oneShots.end();
+ for (GeoNotifierSet::const_iterator it = m_oneShots.begin(); it != end; ++it)
+ (*it)->startTimerIfNeeded();
+ GeoNotifierVector watcherCopy;
+ m_watchers.getNotifiersVector(watcherCopy);
+ for (size_t i = 0; i < watcherCopy.size(); ++i)
+ watcherCopy[i]->startTimerIfNeeded();
+ }
+
+ if ((isAllowed() || isDenied()) && !m_pendingForPermissionNotifiers.isEmpty()) {
+ // The pending permission was granted while the object was suspended.
+ setIsAllowed(isAllowed());
+ ASSERT(!m_hasChangedPosition);
+ ASSERT(!m_errorWaitingForResume);
+ return;
+ }
+
+ if (isDenied() && hasListeners()) {
+ // The permission was revoked while the object was suspended.
+ setIsAllowed(false);
+ return;
+ }
+
+ if (m_hasChangedPosition) {
+ positionChanged();
+ m_hasChangedPosition = false;
+ }
+
+ if (m_errorWaitingForResume) {
+ handleError(m_errorWaitingForResume.get());
+ m_errorWaitingForResume = nullptr;
+ }
+}
+
+void Geolocation::resetAllGeolocationPermission()
+{
+ if (m_isSuspended) {
+ m_resetOnResume = true;
+ return;
+ }
+
+ if (m_allowGeolocation == InProgress) {
+ Page* page = this->page();
+ if (page)
+ GeolocationController::from(page)->cancelPermissionRequest(this);
+
+ // This return is not technically correct as GeolocationController::cancelPermissionRequest() should have cleared the active request.
+ // Neither iOS nor OS X supports cancelPermissionRequest() (https://bugs.webkit.org/show_bug.cgi?id=89524), so we workaround that and let ongoing requests complete. :(
+ return;
+ }
+
+ // 1) Reset our own state.
+ stopUpdating();
+ m_allowGeolocation = Unknown;
+ m_hasChangedPosition = false;
+ m_errorWaitingForResume = nullptr;
+
+ // 2) Request new permission for the active notifiers.
+ stopTimers();
+
+ // Go over the one shot and re-request permission.
+ GeoNotifierSet::iterator end = m_oneShots.end();
+ for (GeoNotifierSet::iterator it = m_oneShots.begin(); it != end; ++it)
+ startRequest((*it).get());
+ // Go over the watchers and re-request permission.
+ GeoNotifierVector watcherCopy;
+ m_watchers.getNotifiersVector(watcherCopy);
+ for (size_t i = 0; i < watcherCopy.size(); ++i)
+ startRequest(watcherCopy[i].get());
+}
+#endif // PLATFORM(IOS)
+
</ins><span class="cx"> void Geolocation::stop()
</span><span class="cx"> {
</span><span class="cx"> Page* page = this->page();
</span><span class="lines">@@ -267,6 +389,10 @@
</span><span class="cx"> m_allowGeolocation = Unknown;
</span><span class="cx"> cancelAllRequests();
</span><span class="cx"> stopUpdating();
</span><ins>+#if PLATFORM(IOS)
+ m_hasChangedPosition = false;
+ m_errorWaitingForResume = nullptr;
+#endif // PLATFORM(IOS)
</ins><span class="cx"> m_pendingForPermissionNotifiers.clear();
</span><span class="cx"> }
</span><span class="cx">
</span><span class="lines">@@ -429,6 +555,11 @@
</span><span class="cx"> // position.
</span><span class="cx"> m_allowGeolocation = allowed ? Yes : No;
</span><span class="cx">
</span><ins>+#if PLATFORM(IOS)
+ if (m_isSuspended)
+ return;
+#endif
+
</ins><span class="cx"> // Permission request was made during the startRequest process
</span><span class="cx"> if (!m_pendingForPermissionNotifiers.isEmpty()) {
</span><span class="cx"> handlePendingPermissionNotifiers();
</span><span class="lines">@@ -441,6 +572,11 @@
</span><span class="cx"> error->setIsFatal(true);
</span><span class="cx"> handleError(error.get());
</span><span class="cx"> m_requestsAwaitingCachedPosition.clear();
</span><ins>+#if PLATFORM(IOS)
+ m_hasChangedPosition = false;
+ m_errorWaitingForResume = nullptr;
+#endif
+
</ins><span class="cx"> return;
</span><span class="cx"> }
</span><span class="cx">
</span><span class="lines">@@ -620,11 +756,24 @@
</span><span class="cx"> // Stop all currently running timers.
</span><span class="cx"> stopTimers();
</span><span class="cx">
</span><ins>+#if PLATFORM(IOS)
+ if (m_isSuspended) {
+ m_hasChangedPosition = true;
+ return;
+ }
+#endif
+
</ins><span class="cx"> makeSuccessCallbacks();
</span><span class="cx"> }
</span><span class="cx">
</span><span class="cx"> void Geolocation::setError(GeolocationError* error)
</span><span class="cx"> {
</span><ins>+#if PLATFORM(IOS)
+ if (m_isSuspended) {
+ m_errorWaitingForResume = createPositionError(error);
+ return;
+ }
+#endif
</ins><span class="cx"> RefPtr<PositionError> positionError = createPositionError(error);
</span><span class="cx"> handleError(positionError.get());
</span><span class="cx"> }
</span></span></pre></div>
<a id="trunkSourceWebCoreModulesgeolocationGeolocationh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/Modules/geolocation/Geolocation.h (161637 => 161638)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/Modules/geolocation/Geolocation.h        2014-01-10 16:55:05 UTC (rev 161637)
+++ trunk/Source/WebCore/Modules/geolocation/Geolocation.h        2014-01-10 17:06:52 UTC (rev 161638)
</span><span class="lines">@@ -54,6 +54,12 @@
</span><span class="cx"> static PassRefPtr<Geolocation> create(ScriptExecutionContext*);
</span><span class="cx"> ~Geolocation();
</span><span class="cx">
</span><ins>+#if PLATFORM(IOS)
+ virtual bool canSuspend() const OVERRIDE;
+ virtual void suspend(ReasonForSuspension) OVERRIDE;
+ virtual void resume() OVERRIDE;
+ void resetAllGeolocationPermission();
+#endif // PLATFORM(IOS)
</ins><span class="cx"> Document* document() const;
</span><span class="cx"> Frame* frame() const;
</span><span class="cx">
</span><span class="lines">@@ -174,7 +180,16 @@
</span><span class="cx"> Yes,
</span><span class="cx"> No
</span><span class="cx"> } m_allowGeolocation;
</span><ins>+#if PLATFORM(IOS)
+ bool m_isSuspended;
+ bool m_resetOnResume;
+ bool m_hasChangedPosition;
+ RefPtr<PositionError> m_errorWaitingForResume;
</ins><span class="cx">
</span><ins>+ void resumeTimerFired(Timer<Geolocation>*);
+ Timer<Geolocation> m_resumeTimer;
+#endif // PLATFORM(IOS)
+
</ins><span class="cx"> GeoNotifierSet m_requestsAwaitingCachedPosition;
</span><span class="cx"> };
</span><span class="cx">
</span></span></pre></div>
<a id="trunkSourceWebCoreModulesgeolocationNavigatorGeolocationcpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/Modules/geolocation/NavigatorGeolocation.cpp (161637 => 161638)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/Modules/geolocation/NavigatorGeolocation.cpp        2014-01-10 16:55:05 UTC (rev 161637)
+++ trunk/Source/WebCore/Modules/geolocation/NavigatorGeolocation.cpp        2014-01-10 17:06:52 UTC (rev 161638)
</span><span class="lines">@@ -57,6 +57,14 @@
</span><span class="cx"> return supplement;
</span><span class="cx"> }
</span><span class="cx">
</span><ins>+#if PLATFORM(IOS)
+void NavigatorGeolocation::resetAllGeolocationPermission()
+{
+ if (m_geolocation)
+ m_geolocation->resetAllGeolocationPermission();
+}
+#endif // PLATFORM(IOS)
+
</ins><span class="cx"> Geolocation* NavigatorGeolocation::geolocation(Navigator* navigator)
</span><span class="cx"> {
</span><span class="cx"> return NavigatorGeolocation::from(navigator)->geolocation();
</span></span></pre></div>
<a id="trunkSourceWebCoreModulesgeolocationNavigatorGeolocationh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/Modules/geolocation/NavigatorGeolocation.h (161637 => 161638)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/Modules/geolocation/NavigatorGeolocation.h        2014-01-10 16:55:05 UTC (rev 161637)
+++ trunk/Source/WebCore/Modules/geolocation/NavigatorGeolocation.h        2014-01-10 17:06:52 UTC (rev 161638)
</span><span class="lines">@@ -39,6 +39,10 @@
</span><span class="cx"> static Geolocation* geolocation(Navigator*);
</span><span class="cx"> Geolocation* geolocation() const;
</span><span class="cx">
</span><ins>+#if PLATFORM(IOS)
+ void resetAllGeolocationPermission();
+#endif // PLATFORM(IOS)
+
</ins><span class="cx"> private:
</span><span class="cx"> NavigatorGeolocation(Frame*);
</span><span class="cx"> static const char* supplementName();
</span></span></pre></div>
<a id="trunkSourceWebCoreModulesspeechSpeechSynthesiscpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/Modules/speech/SpeechSynthesis.cpp (161637 => 161638)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/Modules/speech/SpeechSynthesis.cpp        2014-01-10 16:55:05 UTC (rev 161637)
+++ trunk/Source/WebCore/Modules/speech/SpeechSynthesis.cpp        2014-01-10 17:06:52 UTC (rev 161638)
</span><span class="lines">@@ -30,6 +30,7 @@
</span><span class="cx">
</span><span class="cx"> #include "PlatformSpeechSynthesisVoice.h"
</span><span class="cx"> #include "PlatformSpeechSynthesizer.h"
</span><ins>+#include "ScriptController.h"
</ins><span class="cx"> #include "SpeechSynthesisEvent.h"
</span><span class="cx"> #include "SpeechSynthesisUtterance.h"
</span><span class="cx"> #include <wtf/CurrentTime.h>
</span><span class="lines">@@ -44,6 +45,9 @@
</span><span class="cx"> SpeechSynthesis::SpeechSynthesis()
</span><span class="cx"> : m_currentSpeechUtterance(0)
</span><span class="cx"> , m_isPaused(false)
</span><ins>+#if PLATFORM(IOS)
+ , m_restrictions(RequireUserGestureForSpeechStartRestriction)
+#endif
</ins><span class="cx"> {
</span><span class="cx"> }
</span><span class="cx">
</span><span class="lines">@@ -112,6 +116,14 @@
</span><span class="cx"> {
</span><span class="cx"> if (!utterance)
</span><span class="cx"> return;
</span><ins>+
+ // Like Audio, we should require that the user interact to start a speech synthesis session.
+#if PLATFORM(IOS)
+ if (ScriptController::processingUserGesture())
+ removeBehaviorRestriction(RequireUserGestureForSpeechStartRestriction);
+ else if (userGestureRequiredForSpeechStart())
+ return;
+#endif
</ins><span class="cx">
</span><span class="cx"> m_utteranceQueue.append(utterance);
</span><span class="cx">
</span></span></pre></div>
<a id="trunkSourceWebCoreModulesspeechSpeechSynthesish"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/Modules/speech/SpeechSynthesis.h (161637 => 161638)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/Modules/speech/SpeechSynthesis.h        2014-01-10 16:55:05 UTC (rev 161637)
+++ trunk/Source/WebCore/Modules/speech/SpeechSynthesis.h        2014-01-10 17:06:52 UTC (rev 161638)
</span><span class="lines">@@ -76,11 +76,26 @@
</span><span class="cx"> void handleSpeakingCompleted(SpeechSynthesisUtterance*, bool errorOccurred);
</span><span class="cx"> void fireEvent(const AtomicString& type, SpeechSynthesisUtterance*, unsigned long charIndex, const String& name);
</span><span class="cx">
</span><ins>+#if PLATFORM(IOS)
+ // Restrictions to change default behaviors.
+ enum BehaviorRestrictionFlags {
+ NoRestrictions = 0,
+ RequireUserGestureForSpeechStartRestriction = 1 << 0,
+ };
+ typedef unsigned BehaviorRestrictions;
+
+ bool userGestureRequiredForSpeechStart() const { return m_restrictions & RequireUserGestureForSpeechStartRestriction; }
+ void removeBehaviorRestriction(BehaviorRestrictions restriction) { m_restrictions &= ~restriction; }
+#endif
+
</ins><span class="cx"> OwnPtr<PlatformSpeechSynthesizer> m_platformSpeechSynthesizer;
</span><span class="cx"> Vector<RefPtr<SpeechSynthesisVoice>> m_voiceList;
</span><span class="cx"> SpeechSynthesisUtterance* m_currentSpeechUtterance;
</span><span class="cx"> Deque<RefPtr<SpeechSynthesisUtterance>> m_utteranceQueue;
</span><span class="cx"> bool m_isPaused;
</span><ins>+#if PLATFORM(IOS)
+ BehaviorRestrictions m_restrictions;
+#endif
</ins><span class="cx"> };
</span><span class="cx">
</span><span class="cx"> } // namespace WebCore
</span></span></pre></div>
<a id="trunkSourceWebCoreModuleswebaudioAudioContextcpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/Modules/webaudio/AudioContext.cpp (161637 => 161638)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/Modules/webaudio/AudioContext.cpp        2014-01-10 16:55:05 UTC (rev 161637)
+++ trunk/Source/WebCore/Modules/webaudio/AudioContext.cpp        2014-01-10 17:06:52 UTC (rev 161638)
</span><span class="lines">@@ -80,6 +80,11 @@
</span><span class="cx"> #include "GStreamerUtilities.h"
</span><span class="cx"> #endif
</span><span class="cx">
</span><ins>+#if PLATFORM(IOS)
+#include "ScriptController.h"
+#include "Settings.h"
+#endif
+
</ins><span class="cx"> #include <runtime/ArrayBuffer.h>
</span><span class="cx"> #include <wtf/Atomics.h>
</span><span class="cx"> #include <wtf/MainThread.h>
</span></span></pre></div>
<a id="trunkSourceWebCoreModuleswebaudioAudioContexth"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/Modules/webaudio/AudioContext.h (161637 => 161638)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/Modules/webaudio/AudioContext.h        2014-01-10 16:55:05 UTC (rev 161637)
+++ trunk/Source/WebCore/Modules/webaudio/AudioContext.h        2014-01-10 17:06:52 UTC (rev 161638)
</span><span class="lines">@@ -96,7 +96,6 @@
</span><span class="cx"> virtual void stop() OVERRIDE;
</span><span class="cx">
</span><span class="cx"> Document* document() const; // ASSERTs if document no longer exists.
</span><del>- bool hasDocument();
</del><span class="cx">
</span><span class="cx"> AudioDestinationNode* destination() { return m_destinationNode.get(); }
</span><span class="cx"> size_t currentSampleFrame() const { return m_destinationNode->currentSampleFrame(); }
</span></span></pre></div>
<a id="trunkSourceWebCoreModuleswebaudioAudioScheduledSourceNodecpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/Modules/webaudio/AudioScheduledSourceNode.cpp (161637 => 161638)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/Modules/webaudio/AudioScheduledSourceNode.cpp        2014-01-10 16:55:05 UTC (rev 161637)
+++ trunk/Source/WebCore/Modules/webaudio/AudioScheduledSourceNode.cpp        2014-01-10 17:06:52 UTC (rev 161638)
</span><span class="lines">@@ -35,6 +35,10 @@
</span><span class="cx"> #include <algorithm>
</span><span class="cx"> #include <wtf/MathExtras.h>
</span><span class="cx">
</span><ins>+#if PLATFORM(IOS)
+#include "ScriptController.h"
+#endif
+
</ins><span class="cx"> namespace WebCore {
</span><span class="cx">
</span><span class="cx"> const double AudioScheduledSourceNode::UnknownTime = -1;
</span></span></pre></div>
<a id="trunkSourceWebCoreModuleswebdatabaseDatabasecpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/Modules/webdatabase/Database.cpp (161637 => 161638)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/Modules/webdatabase/Database.cpp        2014-01-10 16:55:05 UTC (rev 161637)
+++ trunk/Source/WebCore/Modules/webdatabase/Database.cpp        2014-01-10 17:06:52 UTC (rev 161638)
</span><span class="lines">@@ -60,6 +60,10 @@
</span><span class="cx"> #include <wtf/StdLibExtras.h>
</span><span class="cx"> #include <wtf/text/CString.h>
</span><span class="cx">
</span><ins>+#if PLATFORM(IOS)
+#include "SQLiteDatabaseTracker.h"
+#endif
+
</ins><span class="cx"> namespace WebCore {
</span><span class="cx">
</span><span class="cx"> PassRefPtr<Database> Database::create(ScriptExecutionContext*, PassRefPtr<DatabaseBackendBase> backend)
</span></span></pre></div>
<a id="trunkSourceWebCoreModuleswebdatabaseDatabaseBackendBasecpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/Modules/webdatabase/DatabaseBackendBase.cpp (161637 => 161638)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/Modules/webdatabase/DatabaseBackendBase.cpp        2014-01-10 16:55:05 UTC (rev 161637)
+++ trunk/Source/WebCore/Modules/webdatabase/DatabaseBackendBase.cpp        2014-01-10 17:06:52 UTC (rev 161638)
</span><span class="lines">@@ -52,6 +52,10 @@
</span><span class="cx"> #include <wtf/text/CString.h>
</span><span class="cx"> #include <wtf/text/StringHash.h>
</span><span class="cx">
</span><ins>+#if PLATFORM(IOS)
+#include "SQLiteDatabaseTracker.h"
+#endif
+
</ins><span class="cx"> // Registering "opened" databases with the DatabaseTracker
</span><span class="cx"> // =======================================================
</span><span class="cx"> // The DatabaseTracker maintains a list of databases that have been
</span><span class="lines">@@ -314,6 +318,14 @@
</span><span class="cx">
</span><span class="cx"> const int maxSqliteBusyWaitTime = 30000;
</span><span class="cx">
</span><ins>+#if PLATFORM(IOS)
+ {
+ // Make sure we wait till the background removal of the empty database files finished before trying to open any database.
+ MutexLocker locker(DatabaseTracker::openDatabaseMutex());
+ }
+ SQLiteTransactionInProgressAutoCounter transactionCounter;
+#endif
+
</ins><span class="cx"> if (!m_sqliteDatabase.open(m_filename, true)) {
</span><span class="cx"> errorMessage = formatErrorMessage("unable to open database", m_sqliteDatabase.lastError(), m_sqliteDatabase.lastErrorMsg());
</span><span class="cx"> return false;
</span><span class="lines">@@ -564,6 +576,9 @@
</span><span class="cx">
</span><span class="cx"> void DatabaseBackendBase::incrementalVacuumIfNeeded()
</span><span class="cx"> {
</span><ins>+#if PLATFORM(IOS)
+ SQLiteTransactionInProgressAutoCounter transactionCounter;
+#endif
</ins><span class="cx"> int64_t freeSpaceSize = m_sqliteDatabase.freeSpaceSize();
</span><span class="cx"> int64_t totalSize = m_sqliteDatabase.totalSize();
</span><span class="cx"> if (totalSize <= 10 * freeSpaceSize) {
</span></span></pre></div>
<a id="trunkSourceWebCoreModuleswebdatabaseDatabaseContextcpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/Modules/webdatabase/DatabaseContext.cpp (161637 => 161638)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/Modules/webdatabase/DatabaseContext.cpp        2014-01-10 16:55:05 UTC (rev 161637)
+++ trunk/Source/WebCore/Modules/webdatabase/DatabaseContext.cpp        2014-01-10 17:06:52 UTC (rev 161638)
</span><span class="lines">@@ -102,6 +102,9 @@
</span><span class="cx"> , m_hasOpenDatabases(false)
</span><span class="cx"> , m_isRegistered(true) // will register on construction below.
</span><span class="cx"> , m_hasRequestedTermination(false)
</span><ins>+#if PLATFORM(IOS)
+ , m_paused(false)
+#endif //PLATFORM(IOS)
</ins><span class="cx"> {
</span><span class="cx"> // ActiveDOMObject expects this to be called to set internal flags.
</span><span class="cx"> suspendIfNeeded();
</span><span class="lines">@@ -161,6 +164,9 @@
</span><span class="cx"> DatabaseThread* DatabaseContext::databaseThread()
</span><span class="cx"> {
</span><span class="cx"> if (!m_databaseThread && !m_hasOpenDatabases) {
</span><ins>+#if PLATFORM(IOS)
+ MutexLocker lock(m_databaseThreadMutex);
+#endif //PLATFORM(IOS)
</ins><span class="cx"> // It's OK to ask for the m_databaseThread after we've requested
</span><span class="cx"> // termination because we're still using it to execute the closing
</span><span class="cx"> // of the database. However, it is NOT OK to create a new thread
</span><span class="lines">@@ -172,11 +178,26 @@
</span><span class="cx"> m_databaseThread = DatabaseThread::create();
</span><span class="cx"> if (!m_databaseThread->start())
</span><span class="cx"> m_databaseThread = 0;
</span><ins>+#if PLATFORM(IOS)
+ if (m_databaseThread)
+ m_databaseThread->setPaused(m_paused);
+#endif //PLATFORM(IOS)
</ins><span class="cx"> }
</span><span class="cx">
</span><span class="cx"> return m_databaseThread.get();
</span><span class="cx"> }
</span><span class="cx">
</span><ins>+#if PLATFORM(IOS)
+void DatabaseContext::setPaused(bool paused)
+{
+ MutexLocker lock(m_databaseThreadMutex);
+
+ m_paused = paused;
+ if (m_databaseThread)
+ m_databaseThread->setPaused(m_paused);
+}
+#endif // PLATFORM(IOS)
+
</ins><span class="cx"> bool DatabaseContext::stopDatabases(DatabaseTaskSynchronizer* cleanupSync)
</span><span class="cx"> {
</span><span class="cx"> if (m_isRegistered) {
</span></span></pre></div>
<a id="trunkSourceWebCoreModuleswebdatabaseDatabaseContexth"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/Modules/webdatabase/DatabaseContext.h (161637 => 161638)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/Modules/webdatabase/DatabaseContext.h        2014-01-10 16:55:05 UTC (rev 161637)
+++ trunk/Source/WebCore/Modules/webdatabase/DatabaseContext.h        2014-01-10 17:06:52 UTC (rev 161638)
</span><span class="lines">@@ -35,6 +35,10 @@
</span><span class="cx"> #include <wtf/Assertions.h>
</span><span class="cx"> #include <wtf/ThreadSafeRefCounted.h>
</span><span class="cx">
</span><ins>+#if PLATFORM(IOS)
+#include <wtf/Threading.h>
+#endif // PLATFORM(IOS)
+
</ins><span class="cx"> namespace WebCore {
</span><span class="cx">
</span><span class="cx"> class Database;
</span><span class="lines">@@ -53,6 +57,9 @@
</span><span class="cx">
</span><span class="cx"> PassRefPtr<DatabaseBackendContext> backend();
</span><span class="cx"> DatabaseThread* databaseThread();
</span><ins>+#if PLATFORM(IOS)
+ void setPaused(bool);
+#endif // PLATFORM(IOS)
</ins><span class="cx">
</span><span class="cx"> void setHasOpenDatabases() { m_hasOpenDatabases = true; }
</span><span class="cx"> bool hasOpenDatabases() { return m_hasOpenDatabases; }
</span><span class="lines">@@ -75,6 +82,11 @@
</span><span class="cx">
</span><span class="cx"> friend class DatabaseBackendContext;
</span><span class="cx"> friend class DatabaseManager;
</span><ins>+
+#if PLATFORM(IOS)
+ Mutex m_databaseThreadMutex;
+ bool m_paused;
+#endif // PLATFORM(IOS)
</ins><span class="cx"> };
</span><span class="cx">
</span><span class="cx"> } // namespace WebCore
</span></span></pre></div>
<a id="trunkSourceWebCoreModuleswebdatabaseDatabaseManagerClienth"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/Modules/webdatabase/DatabaseManagerClient.h (161637 => 161638)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/Modules/webdatabase/DatabaseManagerClient.h        2014-01-10 16:55:05 UTC (rev 161637)
+++ trunk/Source/WebCore/Modules/webdatabase/DatabaseManagerClient.h        2014-01-10 17:06:52 UTC (rev 161638)
</span><span class="lines">@@ -38,6 +38,12 @@
</span><span class="cx"> virtual ~DatabaseManagerClient() { }
</span><span class="cx"> virtual void dispatchDidModifyOrigin(SecurityOrigin*) = 0;
</span><span class="cx"> virtual void dispatchDidModifyDatabase(SecurityOrigin*, const String& databaseName) = 0;
</span><ins>+
+#if PLATFORM(IOS)
+ virtual void dispatchDidAddNewOrigin(SecurityOrigin*) = 0;
+ virtual void dispatchDidDeleteDatabase() = 0;
+ virtual void dispatchDidDeleteDatabaseOrigin() = 0;
+#endif
</ins><span class="cx"> };
</span><span class="cx">
</span><span class="cx"> } // namespace WebCore
</span></span></pre></div>
<a id="trunkSourceWebCoreModuleswebdatabaseDatabaseTaskcpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/Modules/webdatabase/DatabaseTask.cpp (161637 => 161638)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/Modules/webdatabase/DatabaseTask.cpp        2014-01-10 16:55:05 UTC (rev 161637)
+++ trunk/Source/WebCore/Modules/webdatabase/DatabaseTask.cpp        2014-01-10 17:06:52 UTC (rev 161638)
</span><span class="lines">@@ -85,7 +85,13 @@
</span><span class="cx">
</span><span class="cx"> LOG(StorageAPI, "Performing %s %p\n", debugTaskName(), this);
</span><span class="cx">
</span><ins>+#if !PLATFORM(IOS)
</ins><span class="cx"> m_database->resetAuthorizer();
</span><ins>+#else
+ if (m_database)
+ m_database->resetAuthorizer();
+#endif
+
</ins><span class="cx"> doPerformTask();
</span><span class="cx">
</span><span class="cx"> if (m_synchronizer)
</span><span class="lines">@@ -168,6 +174,13 @@
</span><span class="cx"> m_transaction->notifyDatabaseThreadIsShuttingDown();
</span><span class="cx"> }
</span><span class="cx">
</span><ins>+#if PLATFORM(IOS)
+bool Database::DatabaseTransactionTask::shouldPerformWhilePaused() const
+{
+ return m_transaction->shouldPerformWhilePaused();
+}
+#endif
+
</ins><span class="cx"> void DatabaseBackend::DatabaseTransactionTask::doPerformTask()
</span><span class="cx"> {
</span><span class="cx"> m_transaction->performNextStep();
</span></span></pre></div>
<a id="trunkSourceWebCoreModuleswebdatabaseDatabaseTaskh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/Modules/webdatabase/DatabaseTask.h (161637 => 161638)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/Modules/webdatabase/DatabaseTask.h        2014-01-10 16:55:05 UTC (rev 161637)
+++ trunk/Source/WebCore/Modules/webdatabase/DatabaseTask.h        2014-01-10 17:06:52 UTC (rev 161638)
</span><span class="lines">@@ -75,6 +75,10 @@
</span><span class="cx"> public:
</span><span class="cx"> virtual ~DatabaseTask();
</span><span class="cx">
</span><ins>+#if PLATFORM(IOS)
+ virtual bool shouldPerformWhilePaused() const = 0;
+#endif
+
</ins><span class="cx"> void performTask();
</span><span class="cx">
</span><span class="cx"> DatabaseBackend* database() const { return m_database; }
</span><span class="lines">@@ -104,6 +108,10 @@
</span><span class="cx"> {
</span><span class="cx"> return std::unique_ptr<DatabaseOpenTask>(new DatabaseOpenTask(db, setVersionInNewDatabase, synchronizer, error, errorMessage, success));
</span><span class="cx"> }
</span><ins>+
+#if PLATFORM(IOS)
+ virtual bool shouldPerformWhilePaused() const OVERRIDE { return true; }
+#endif
</ins><span class="cx">
</span><span class="cx"> private:
</span><span class="cx"> DatabaseOpenTask(DatabaseBackend*, bool setVersionInNewDatabase, DatabaseTaskSynchronizer*, DatabaseError&, String& errorMessage, bool& success);
</span><span class="lines">@@ -126,6 +134,10 @@
</span><span class="cx"> return std::unique_ptr<DatabaseCloseTask>(new DatabaseCloseTask(db, synchronizer));
</span><span class="cx"> }
</span><span class="cx">
</span><ins>+#if PLATFORM(IOS)
+ virtual bool shouldPerformWhilePaused() const OVERRIDE { return true; }
+#endif
+
</ins><span class="cx"> private:
</span><span class="cx"> DatabaseCloseTask(DatabaseBackend*, DatabaseTaskSynchronizer*);
</span><span class="cx">
</span><span class="lines">@@ -145,6 +157,10 @@
</span><span class="cx"> return std::unique_ptr<DatabaseTransactionTask>(new DatabaseTransactionTask(transaction));
</span><span class="cx"> }
</span><span class="cx">
</span><ins>+#if PLATFORM(IOS)
+ virtual bool shouldPerformWhilePaused() const OVERRIDE;
+#endif
+
</ins><span class="cx"> SQLTransactionBackend* transaction() const { return m_transaction.get(); }
</span><span class="cx">
</span><span class="cx"> private:
</span><span class="lines">@@ -166,6 +182,10 @@
</span><span class="cx"> return std::unique_ptr<DatabaseTableNamesTask>(new DatabaseTableNamesTask(db, synchronizer, names));
</span><span class="cx"> }
</span><span class="cx">
</span><ins>+#if PLATFORM(IOS)
+ virtual bool shouldPerformWhilePaused() const OVERRIDE { return true; }
+#endif
+
</ins><span class="cx"> private:
</span><span class="cx"> DatabaseTableNamesTask(DatabaseBackend*, DatabaseTaskSynchronizer*, Vector<String>& names);
</span><span class="cx">
</span></span></pre></div>
<a id="trunkSourceWebCoreModuleswebdatabaseDatabaseThreadcpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/Modules/webdatabase/DatabaseThread.cpp (161637 => 161638)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/Modules/webdatabase/DatabaseThread.cpp        2014-01-10 16:55:05 UTC (rev 161637)
+++ trunk/Source/WebCore/Modules/webdatabase/DatabaseThread.cpp        2014-01-10 17:06:52 UTC (rev 161638)
</span><span class="lines">@@ -42,6 +42,9 @@
</span><span class="cx">
</span><span class="cx"> DatabaseThread::DatabaseThread()
</span><span class="cx"> : m_threadID(0)
</span><ins>+#if PLATFORM(IOS)
+ , m_paused(false)
+#endif
</ins><span class="cx"> , m_transactionClient(adoptPtr(new SQLTransactionClient()))
</span><span class="cx"> , m_transactionCoordinator(adoptPtr(new SQLTransactionCoordinator()))
</span><span class="cx"> , m_cleanupSync(0)
</span><span class="lines">@@ -77,6 +80,9 @@
</span><span class="cx"> {
</span><span class="cx"> m_cleanupSync = cleanupSync;
</span><span class="cx"> LOG(StorageAPI, "DatabaseThread %p was asked to terminate\n", this);
</span><ins>+#if PLATFORM(IOS)
+ m_pausedQueue.kill();
+#endif
</ins><span class="cx"> m_queue.kill();
</span><span class="cx"> }
</span><span class="cx">
</span><span class="lines">@@ -98,6 +104,80 @@
</span><span class="cx"> dbThread->databaseThread();
</span><span class="cx"> }
</span><span class="cx">
</span><ins>+#if PLATFORM(IOS)
+class DatabaseUnpauseTask : public DatabaseTask {
+public:
+ static std::unique_ptr<DatabaseUnpauseTask> create(DatabaseThread* thread)
+ {
+ return std::unique_ptr<DatabaseUnpauseTask>(new DatabaseUnpauseTask(thread));
+ }
+
+ virtual bool shouldPerformWhilePaused() const
+ {
+ // Since we're not locking the DatabaseThread::m_paused in the main database thread loop, it's possible that
+ // a DatabaseUnpauseTask might be added to the m_pausedQueue and performed from within ::handlePausedQueue.
+ // To protect against this, we allow it to be performed even if the database is paused.
+ // If the thread is paused when it is being performed, the tasks from the paused queue will simply be
+ // requeued instead of performed.
+ return true;
+ }
+
+private:
+ DatabaseUnpauseTask(DatabaseThread* thread)
+ : DatabaseTask(0, 0)
+ , m_thread(thread)
+ {}
+
+ virtual void doPerformTask()
+ {
+ m_thread->handlePausedQueue();
+ }
+#if !LOG_DISABLED
+ virtual const char* debugTaskName() const { return "DatabaseUnpauseTask"; }
+#endif
+
+ DatabaseThread* m_thread;
+};
+
+
+void DatabaseThread::setPaused(bool paused)
+{
+ if (m_paused == paused)
+ return;
+
+ MutexLocker pausedLocker(m_pausedMutex);
+ m_paused = paused;
+ if (!m_paused)
+ scheduleTask(DatabaseUnpauseTask::create(this));
+}
+
+void DatabaseThread::handlePausedQueue()
+{
+ Vector<std::unique_ptr<DatabaseTask> > pausedTasks;
+ while (auto task = m_pausedQueue.tryGetMessage())
+ pausedTasks.append(std::move(task));
+
+ for (unsigned i = 0; i < pausedTasks.size(); ++i) {
+ AutodrainedPool pool;
+
+ std::unique_ptr<DatabaseTask> task(pausedTasks[i].release());
+ {
+ MutexLocker pausedLocker(m_pausedMutex);
+ if (m_paused) {
+ m_pausedQueue.append(std::move(task));
+ continue;
+ }
+ }
+
+ if (terminationRequested())
+ break;
+
+ task->performTask();
+ }
+}
+#endif //PLATFORM(IOS)
+
+
</ins><span class="cx"> void DatabaseThread::databaseThread()
</span><span class="cx"> {
</span><span class="cx"> {
</span><span class="lines">@@ -109,7 +189,14 @@
</span><span class="cx"> while (auto task = m_queue.waitForMessage()) {
</span><span class="cx"> AutodrainedPool pool;
</span><span class="cx">
</span><ins>+#if PLATFORM(IOS)
+ if (!m_paused || task->shouldPerformWhilePaused())
+ task->performTask();
+ else
+ m_pausedQueue.append(std::move(task));
+#else
</ins><span class="cx"> task->performTask();
</span><ins>+#endif
</ins><span class="cx"> }
</span><span class="cx">
</span><span class="cx"> // Clean up the list of all pending transactions on this database thread
</span></span></pre></div>
<a id="trunkSourceWebCoreModuleswebdatabaseDatabaseThreadh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/Modules/webdatabase/DatabaseThread.h (161637 => 161638)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/Modules/webdatabase/DatabaseThread.h        2014-01-10 16:55:05 UTC (rev 161637)
+++ trunk/Source/WebCore/Modules/webdatabase/DatabaseThread.h        2014-01-10 17:06:52 UTC (rev 161638)
</span><span class="lines">@@ -69,6 +69,11 @@
</span><span class="cx"> SQLTransactionClient* transactionClient() { return m_transactionClient.get(); }
</span><span class="cx"> SQLTransactionCoordinator* transactionCoordinator() { return m_transactionCoordinator.get(); }
</span><span class="cx">
</span><ins>+#if PLATFORM(IOS)
+ void setPaused(bool);
+ void handlePausedQueue();
+#endif
+
</ins><span class="cx"> private:
</span><span class="cx"> DatabaseThread();
</span><span class="cx">
</span><span class="lines">@@ -80,6 +85,11 @@
</span><span class="cx"> RefPtr<DatabaseThread> m_selfRef;
</span><span class="cx">
</span><span class="cx"> MessageQueue<DatabaseTask> m_queue;
</span><ins>+#if PLATFORM(IOS)
+ MessageQueue<DatabaseTask> m_pausedQueue;
+ Mutex m_pausedMutex;
+ volatile bool m_paused;
+#endif
</ins><span class="cx">
</span><span class="cx"> // This set keeps track of the open databases that have been used on this thread.
</span><span class="cx"> typedef HashSet<RefPtr<DatabaseBackend>> DatabaseSet;
</span></span></pre></div>
<a id="trunkSourceWebCoreModuleswebdatabaseDatabaseTrackercpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/Modules/webdatabase/DatabaseTracker.cpp (161637 => 161638)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/Modules/webdatabase/DatabaseTracker.cpp        2014-01-10 16:55:05 UTC (rev 161637)
+++ trunk/Source/WebCore/Modules/webdatabase/DatabaseTracker.cpp        2014-01-10 17:06:52 UTC (rev 161638)
</span><span class="lines">@@ -33,6 +33,7 @@
</span><span class="cx">
</span><span class="cx"> #include "Chrome.h"
</span><span class="cx"> #include "ChromeClient.h"
</span><ins>+#include "Database.h"
</ins><span class="cx"> #include "DatabaseBackendBase.h"
</span><span class="cx"> #include "DatabaseBackendContext.h"
</span><span class="cx"> #include "DatabaseManager.h"
</span><span class="lines">@@ -50,6 +51,10 @@
</span><span class="cx"> #include <wtf/StdLibExtras.h>
</span><span class="cx"> #include <wtf/text/CString.h>
</span><span class="cx">
</span><ins>+#if PLATFORM(IOS)
+#include "WebCoreThread.h"
+#endif
+
</ins><span class="cx"> namespace WebCore {
</span><span class="cx">
</span><span class="cx"> static DatabaseTracker* staticTracker = 0;
</span><span class="lines">@@ -741,6 +746,10 @@
</span><span class="cx"> openTrackerDatabase(CreateIfDoesNotExist);
</span><span class="cx"> if (!m_database.isOpen())
</span><span class="cx"> return;
</span><ins>+
+#if PLATFORM(IOS)
+ bool insertedNewOrigin = false;
+#endif
</ins><span class="cx">
</span><span class="cx"> bool originEntryExists = hasEntryForOriginNoLock(origin);
</span><span class="cx"> if (!originEntryExists) {
</span><span class="lines">@@ -753,6 +762,10 @@
</span><span class="cx">
</span><span class="cx"> if (statement.step() != SQLResultDone)
</span><span class="cx"> LOG_ERROR("Unable to establish origin %s in the tracker", origin->databaseIdentifier().ascii().data());
</span><ins>+#if PLATFORM(IOS)
+ else
+ insertedNewOrigin = true;
+#endif
</ins><span class="cx"> }
</span><span class="cx"> } else {
</span><span class="cx"> SQLiteStatement statement(m_database, "UPDATE Origins SET quota=? WHERE origin=?");
</span><span class="lines">@@ -769,7 +782,15 @@
</span><span class="cx"> }
</span><span class="cx">
</span><span class="cx"> if (m_client)
</span><ins>+#if PLATFORM(IOS)
+ {
+ if (insertedNewOrigin)
+ m_client->dispatchDidAddNewOrigin(origin);
+#endif
</ins><span class="cx"> m_client->dispatchDidModifyOrigin(origin);
</span><ins>+#if PLATFORM(IOS)
+ }
+#endif
</ins><span class="cx"> }
</span><span class="cx">
</span><span class="cx"> bool DatabaseTracker::addDatabase(SecurityOrigin* origin, const String& name, const String& path)
</span><span class="lines">@@ -897,6 +918,9 @@
</span><span class="cx">
</span><span class="cx"> if (m_client) {
</span><span class="cx"> m_client->dispatchDidModifyOrigin(origin);
</span><ins>+#if PLATFORM(IOS)
+ m_client->dispatchDidDeleteDatabaseOrigin();
+#endif
</ins><span class="cx"> for (unsigned i = 0; i < databaseNames.size(); ++i)
</span><span class="cx"> m_client->dispatchDidModifyDatabase(origin, databaseNames[i]);
</span><span class="cx"> }
</span><span class="lines">@@ -1062,6 +1086,9 @@
</span><span class="cx"> if (m_client) {
</span><span class="cx"> m_client->dispatchDidModifyOrigin(origin);
</span><span class="cx"> m_client->dispatchDidModifyDatabase(origin, name);
</span><ins>+#if PLATFORM(IOS)
+ m_client->dispatchDidDeleteDatabase();
+#endif
</ins><span class="cx"> }
</span><span class="cx"> doneDeletingDatabase(origin, name);
</span><span class="cx">
</span><span class="lines">@@ -1110,9 +1137,203 @@
</span><span class="cx"> for (unsigned i = 0; i < deletedDatabases.size(); ++i)
</span><span class="cx"> deletedDatabases[i]->markAsDeletedAndClose();
</span><span class="cx">
</span><ins>+#if !PLATFORM(IOS)
</ins><span class="cx"> return SQLiteFileSystem::deleteDatabaseFile(fullPath);
</span><ins>+#else
+ // On the phone, other background processes may still be accessing this database. Deleting the database directly
+ // would nuke the POSIX file locks, potentially causing Safari/WebApp to corrupt the new db if it's running in the background.
+ // We'll instead truncate the database file to 0 bytes. If another process is operating on this same database file after
+ // the truncation, it should get an error since the database file is no longer valid. When Safari is launched
+ // next time, it'll go through the database files and clean up any zero-bytes ones.
+ SQLiteDatabase database;
+ if (database.open(fullPath))
+ return SQLiteFileSystem::truncateDatabaseFile(database.sqlite3Handle());
+ return false;
+#endif
</ins><span class="cx"> }
</span><ins>+
+#if PLATFORM(IOS)
+void DatabaseTracker::removeDeletedOpenedDatabases()
+{
+ // This is called when another app has deleted a database. Go through all opened databases in this
+ // tracker and close any that's no longer being tracked in the database.
+
+ {
+ // Acquire the lock before calling openTrackerDatabase.
+ MutexLocker lockDatabase(m_databaseGuard);
+ openTrackerDatabase(DontCreateIfDoesNotExist);
+ }
</ins><span class="cx">
</span><ins>+ if (!m_database.isOpen())
+ return;
+
+ // Keep track of which opened databases have been deleted.
+ Vector<RefPtr<Database> > deletedDatabases;
+ typedef HashMap<RefPtr<SecurityOrigin>, Vector<String> > DeletedDatabaseMap;
+ DeletedDatabaseMap deletedDatabaseMap;
+
+ // Make sure not to hold the m_openDatabaseMapGuard mutex when calling
+ // Database::markAsDeletedAndClose(), since that can cause a deadlock
+ // during the synchronous DatabaseThread call it triggers.
+ {
+ MutexLocker openDatabaseMapLock(m_openDatabaseMapGuard);
+ if (m_openDatabaseMap) {
+ DatabaseOriginMap::const_iterator originMapEnd = m_openDatabaseMap->end();
+ for (DatabaseOriginMap::const_iterator originMapIt = m_openDatabaseMap->begin(); originMapIt != originMapEnd; ++originMapIt) {
+ RefPtr<SecurityOrigin> origin = originMapIt->key;
+ DatabaseNameMap* databaseNameMap = originMapIt->value;
+ Vector<String> deletedDatabaseNamesForThisOrigin;
+
+ // Loop through all opened databases in this origin. Get the current database file path of each database and see if
+ // it still matches the path stored in the opened database object.
+ DatabaseNameMap::const_iterator dbNameMapEnd = databaseNameMap->end();
+ for (DatabaseNameMap::const_iterator dbNameMapIt = databaseNameMap->begin(); dbNameMapIt != dbNameMapEnd; ++dbNameMapIt) {
+ String databaseName = dbNameMapIt->key;
+ String databaseFileName;
+ SQLiteStatement statement(m_database, "SELECT path FROM Databases WHERE origin=? AND name=?;");
+ if (statement.prepare() == SQLResultOk) {
+ statement.bindText(1, origin->databaseIdentifier());
+ statement.bindText(2, databaseName);
+ if (statement.step() == SQLResultRow)
+ databaseFileName = statement.getColumnText(0);
+ statement.finalize();
+ }
+
+ bool foundDeletedDatabase = false;
+ DatabaseSet* databaseSet = dbNameMapIt->value;
+ DatabaseSet::const_iterator dbEnd = databaseSet->end();
+ for (DatabaseSet::const_iterator dbIt = databaseSet->begin(); dbIt != dbEnd; ++dbIt) {
+ Database* db = static_cast<Database*>(*dbIt);
+
+ // We are done if this database has already been marked as deleted.
+ if (db->deleted())
+ continue;
+
+ // If this database has been deleted or if its database file no longer matches the current version, this database is no longer valid and it should be marked as deleted.
+ if (databaseFileName.isNull() || databaseFileName != pathGetFileName(db->fileName())) {
+ deletedDatabases.append(db);
+ foundDeletedDatabase = true;
+ }
+ }
+
+ // If the database no longer exists, we should remember to remove it from the OriginQuotaManager later.
+ if (foundDeletedDatabase && databaseFileName.isNull())
+ deletedDatabaseNamesForThisOrigin.append(databaseName);
+ }
+
+ if (!deletedDatabaseNamesForThisOrigin.isEmpty())
+ deletedDatabaseMap.set(origin, deletedDatabaseNamesForThisOrigin);
+ }
+ }
+ }
+
+ for (unsigned i = 0; i < deletedDatabases.size(); ++i)
+ deletedDatabases[i]->markAsDeletedAndClose();
+
+ DeletedDatabaseMap::const_iterator end = deletedDatabaseMap.end();
+ for (DeletedDatabaseMap::const_iterator it = deletedDatabaseMap.begin(); it != end; ++it) {
+ SecurityOrigin* origin = it->key.get();
+ if (m_client)
+ m_client->dispatchDidModifyOrigin(origin);
+
+ const Vector<String>& databaseNames = it->value;
+ for (unsigned i = 0; i < databaseNames.size(); ++i) {
+ if (m_client)
+ m_client->dispatchDidModifyDatabase(origin, databaseNames[i]);
+ }
+ }
+}
+
+static bool isZeroByteFile(const String& path)
+{
+ long long size = 0;
+ return getFileSize(path, size) && !size;
+}
+
+bool DatabaseTracker::deleteDatabaseFileIfEmpty(const String& path)
+{
+ if (!isZeroByteFile(path))
+ return false;
+
+ SQLiteDatabase database;
+ if (!database.open(path))
+ return false;
+
+ // Specify that we want the exclusive locking mode, so after the next read,
+ // we'll be holding the lock to this database file.
+ SQLiteStatement lockStatement(database, "PRAGMA locking_mode=EXCLUSIVE;");
+ if (lockStatement.prepare() != SQLResultOk)
+ return false;
+ int result = lockStatement.step();
+ if (result != SQLResultRow && result != SQLResultDone)
+ return false;
+ lockStatement.finalize();
+
+ // Every sqlite database has a sqlite_master table that contains the schema for the database.
+ // http://www.sqlite.org/faq.html#q7
+ SQLiteStatement readStatement(database, "SELECT * FROM sqlite_master LIMIT 1;");
+ if (readStatement.prepare() != SQLResultOk)
+ return false;
+ // We shouldn't expect any result.
+ if (readStatement.step() != SQLResultDone)
+ return false;
+ readStatement.finalize();
+
+ // At this point, we hold the exclusive lock to this file. Double-check again to make sure
+ // it's still zero bytes.
+ if (!isZeroByteFile(path))
+ return false;
+
+ return SQLiteFileSystem::deleteDatabaseFile(path);
+}
+
+Mutex& DatabaseTracker::openDatabaseMutex()
+{
+ DEFINE_STATIC_LOCAL(Mutex, mutex, ());
+ return mutex;
+}
+
+void DatabaseTracker::emptyDatabaseFilesRemovalTaskWillBeScheduled()
+{
+ // Lock the database from opening any database until we are done with scanning the file system for
+ // zero byte database files to remove.
+ openDatabaseMutex().lock();
+}
+
+void DatabaseTracker::emptyDatabaseFilesRemovalTaskDidFinish()
+{
+ openDatabaseMutex().unlock();
+}
+
+void DatabaseTracker::setDatabasesPaused(bool paused)
+{
+ MutexLocker openDatabaseMapLock(m_openDatabaseMapGuard);
+ if (!m_openDatabaseMap)
+ return;
+
+ // This walking is - sadly - the only reliable way to get at each open database thread.
+ // This will be cleaner once <rdar://problem/5680441> or some other DB thread consolidation takes place.
+ DatabaseOriginMap::iterator i = m_openDatabaseMap.get()->begin();
+ DatabaseOriginMap::iterator end = m_openDatabaseMap.get()->end();
+
+ for (; i != end; ++i) {
+ DatabaseNameMap* databaseNameMap = i->value;
+ DatabaseNameMap::iterator j = databaseNameMap->begin();
+ DatabaseNameMap::iterator dbNameMapEnd = databaseNameMap->end();
+ for (; j != dbNameMapEnd; ++j) {
+ DatabaseSet* databaseSet = j->value;
+ DatabaseSet::iterator k = databaseSet->begin();
+ DatabaseSet::iterator dbSetEnd = databaseSet->end();
+ for (; k != dbSetEnd; ++k) {
+ DatabaseContext* context = (*k)->databaseContext();
+ context->setPaused(paused);
+ }
+ }
+ }
+}
+
+#endif
+
</ins><span class="cx"> void DatabaseTracker::setClient(DatabaseManagerClient* client)
</span><span class="cx"> {
</span><span class="cx"> m_client = client;
</span></span></pre></div>
<a id="trunkSourceWebCoreModuleswebdatabaseDatabaseTrackerh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/Modules/webdatabase/DatabaseTracker.h (161637 => 161638)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/Modules/webdatabase/DatabaseTracker.h        2014-01-10 16:55:05 UTC (rev 161637)
+++ trunk/Source/WebCore/Modules/webdatabase/DatabaseTracker.h        2014-01-10 17:06:52 UTC (rev 161638)
</span><span class="lines">@@ -100,6 +100,21 @@
</span><span class="cx"> bool deleteOrigin(SecurityOrigin*);
</span><span class="cx"> bool deleteDatabase(SecurityOrigin*, const String& name);
</span><span class="cx">
</span><ins>+#if PLATFORM(IOS)
+ void removeDeletedOpenedDatabases();
+ static bool deleteDatabaseFileIfEmpty(const String&);
+
+ // MobileSafari will grab this mutex on the main thread before dispatching the task to
+ // clean up zero byte database files. Any operations to open new database will have to
+ // wait for that task to finish by waiting on this mutex.
+ static Mutex& openDatabaseMutex();
+
+ static void emptyDatabaseFilesRemovalTaskWillBeScheduled();
+ static void emptyDatabaseFilesRemovalTaskDidFinish();
+
+ void setDatabasesPaused(bool);
+#endif
+
</ins><span class="cx"> void setClient(DatabaseManagerClient*);
</span><span class="cx">
</span><span class="cx"> // From a secondary thread, must be thread safe with its data
</span></span></pre></div>
<a id="trunkSourceWebCoreModuleswebdatabaseSQLTransactionBackendcpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/Modules/webdatabase/SQLTransactionBackend.cpp (161637 => 161638)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/Modules/webdatabase/SQLTransactionBackend.cpp        2014-01-10 16:55:05 UTC (rev 161637)
+++ trunk/Source/WebCore/Modules/webdatabase/SQLTransactionBackend.cpp        2014-01-10 17:06:52 UTC (rev 161638)
</span><span class="lines">@@ -518,6 +518,14 @@
</span><span class="cx"> runStateMachine();
</span><span class="cx"> }
</span><span class="cx">
</span><ins>+#if PLATFORM(IOS)
+bool SQLTransactionBackend::shouldPerformWhilePaused() const
+{
+ // SQLTransactions should only run-while-paused if they have progressed passed the first transaction step.
+ return m_nextState != SQLTransactionState::AcquireLock;
+}
+#endif
+
</ins><span class="cx"> void SQLTransactionBackend::executeSQL(PassOwnPtr<AbstractSQLStatement> statement,
</span><span class="cx"> const String& sqlStatement, const Vector<SQLValue>& arguments, int permissions)
</span><span class="cx"> {
</span></span></pre></div>
<a id="trunkSourceWebCoreModuleswebdatabaseSQLTransactionBackendh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/Modules/webdatabase/SQLTransactionBackend.h (161637 => 161638)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/Modules/webdatabase/SQLTransactionBackend.h        2014-01-10 16:55:05 UTC (rev 161637)
+++ trunk/Source/WebCore/Modules/webdatabase/SQLTransactionBackend.h        2014-01-10 17:06:52 UTC (rev 161638)
</span><span class="lines">@@ -68,6 +68,10 @@
</span><span class="cx"> void lockAcquired();
</span><span class="cx"> void performNextStep();
</span><span class="cx">
</span><ins>+#if PLATFORM(IOS)
+ bool shouldPerformWhilePaused() const;
+#endif
+
</ins><span class="cx"> DatabaseBackend* database() { return m_database.get(); }
</span><span class="cx"> bool isReadOnly() { return m_readOnly; }
</span><span class="cx"> void notifyDatabaseThreadIsShuttingDown();
</span></span></pre></div>
<a id="trunkSourceWebCoreResourcesDictationPhraseWithAlternativesDotpng"></a>
<div class="binary"><h4>Added: trunk/Source/WebCore/Resources/DictationPhraseWithAlternativesDot.png</h4>
<pre class="diff"><span>
<span class="cx">(Binary files differ)
</span></span></pre></div>
<span class="cx">Property changes on: trunk/Source/WebCore/Resources/DictationPhraseWithAlternativesDot.png
</span><span class="cx">___________________________________________________________________
</span><a id="svnmimetype"></a>
<div class="addfile"><h4>Added: svn:mime-type</h4></div>
<a id="trunkSourceWebCoreResourcesDictationPhraseWithAlternativesDot2xpng"></a>
<div class="binary"><h4>Added: trunk/Source/WebCore/Resources/DictationPhraseWithAlternativesDot@2x.png</h4>
<pre class="diff"><span>
<span class="cx">(Binary files differ)
</span></span></pre></div>
<span class="cx">Property changes on: trunk/Source/WebCore/Resources/DictationPhraseWithAlternativesDot@2x.png
</span><span class="cx">___________________________________________________________________
</span><a id="svnmimetype"></a>
<div class="addfile"><h4>Added: svn:mime-type</h4></div>
<a id="trunkSourceWebCoreResourcesSpellingDotpng"></a>
<div class="binary"><h4>Added: trunk/Source/WebCore/Resources/SpellingDot.png</h4>
<pre class="diff"><span>
<span class="cx">(Binary files differ)
</span></span></pre></div>
<span class="cx">Property changes on: trunk/Source/WebCore/Resources/SpellingDot.png
</span><span class="cx">___________________________________________________________________
</span><a id="svnmimetype"></a>
<div class="addfile"><h4>Added: svn:mime-type</h4></div>
<a id="trunkSourceWebCoreResourcesSpellingDot2xpng"></a>
<div class="binary"><h4>Added: trunk/Source/WebCore/Resources/SpellingDot@2x.png</h4>
<pre class="diff"><span>
<span class="cx">(Binary files differ)
</span></span></pre></div>
<span class="cx">Property changes on: trunk/Source/WebCore/Resources/SpellingDot@2x.png
</span><span class="cx">___________________________________________________________________
</span><a id="svnmimetype"></a>
<div class="addfile"><h4>Added: svn:mime-type</h4></div>
<a id="trunkSourceWebCoreResourcesdecrementArrowtiff"></a>
<div class="addfile"><h4>Added: trunk/Source/WebCore/Resources/decrementArrow.tiff (0 => 161638)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/Resources/decrementArrow.tiff         (rev 0)
+++ trunk/Source/WebCore/Resources/decrementArrow.tiff        2014-01-10 17:06:52 UTC (rev 161638)
</span><span class="lines">@@ -0,0 +1 @@
</span><ins>+MM * L ; x ; x \xB3 \xB3 ; w \xB3 \xB3 \xB3 \xB3 < x \xB3 \xB3 \xB3 \xB3 \xB3 \xB3 : \xB2 \xB2 \xB2 \xB2 \xB2 \xB2 \xB2 \xB2 : w \xB2 \xB3 \xB2 \xB2 \xB2 \xB2 : v \xB2 \xB3 \xB3 \xB3 : v \xB1 \xB2 : v