WebKit-https.git
3 years agoSimple line layout: Bail out from Simple Line Layout on surrogate pairs.
zalan@apple.com [Sun, 5 Feb 2017 14:41:10 +0000 (14:41 +0000)]
Simple line layout: Bail out from Simple Line Layout on surrogate pairs.
https://bugs.webkit.org/show_bug.cgi?id=167840
<rdar://problem/30364784>

Reviewed by Myles C. Maxfield.

Source/WebCore:

Surrogate pairs require special line breaking logic.

Test: fast/text/simple-line-layout-no-surrogate-pairs.html

* rendering/SimpleLineLayout.cpp:
(WebCore::SimpleLineLayout::canUseForCharacter):
(WebCore::SimpleLineLayout::canUseForText): Checking against special characters is faster than
checking against glyphs. Reverse their order.
(WebCore::SimpleLineLayout::printReason):

LayoutTests:

* fast/text/simple-line-layout-no-surrogate-pairs-expected.html: Added.
* fast/text/simple-line-layout-no-surrogate-pairs.html: Added.

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

3 years agoData interaction on an image should make it stand out when presenting the action...
wenson_hsieh@apple.com [Sun, 5 Feb 2017 07:19:53 +0000 (07:19 +0000)]
Data interaction on an image should make it stand out when presenting the action sheet
https://bugs.webkit.org/show_bug.cgi?id=167846
<rdar://problem/30363014>

Reviewed by Tim Horton.

Adds infrastructure to improve the behavior of data interaction for images. We make two changes to accomplish
this: first, add some plumbing to WebKit so the web process can tell the UI process when it is done handling a
request to start data interaction, so that the UI process is able to clean up UI-side state in the event that
the page prevented the default behavior.

Secondly, this patch tweaks the heuristic used to present action sheets as popovers. For image elements, if
there is sufficient space around the element, we will use the element rect as the target rect; otherwise, we
fall back to presenting the popover at the touch location.

* UIProcess/PageClient.h:
* UIProcess/WebPageProxy.h:
* UIProcess/WebPageProxy.messages.in:
* UIProcess/ios/PageClientImplIOS.h:
* UIProcess/ios/PageClientImplIOS.mm:
(WebKit::PageClientImpl::didHandleStartDataInteractionRequest):
* UIProcess/ios/WKActionSheet.h:
* UIProcess/ios/WKActionSheet.mm:
(-[WKActionSheet presentSheet:]):

Added a presentation style parameter, used to specify whether or not WKActionSheet should present the popover
using the element rect as the target rect, or the touch location.

(-[WKActionSheet doneWithSheet]):
(-[WKActionSheet updateSheetPosition]):
(-[WKActionSheet presentSheet]): Deleted.
* UIProcess/ios/WKActionSheetAssistant.mm:
(-[WKActionSheetAssistant presentationRectForIndicatedElement]):

Returns the (inflated) bounds of the element that is currently being indicated.

(-[WKActionSheetAssistant showImageSheet]):
(-[WKActionSheetAssistant _presentationStyleForImageAtElementRect:]):
(-[WKActionSheetAssistant showLinkSheet]):
(-[WKActionSheetAssistant showDataDetectorsSheet]):
* UIProcess/ios/WKContentViewInteraction.h:
* UIProcess/ios/WebPageProxyIOS.mm:
(WebKit::WebPageProxy::didHandleStartDataInteractionRequest):
* UIProcess/mac/PageClientImpl.h:
* UIProcess/mac/PageClientImpl.mm:

Remove unnecessary function declarations and implementations.

(WebKit::PageClientImpl::didPerformDataInteractionControllerOperation): Deleted.
(WebKit::PageClientImpl::startDataInteractionWithImage): Deleted.
* WebProcess/WebPage/ios/WebPageIOS.mm:
(WebKit::WebPage::requestStartDataInteraction):

Notify the UI process that the web process is done handling a data interaction request, specifying whether or
not the request was granted.

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

3 years agoStatic Analyzer: Value stored to 'recordedMachineThreads' during its initialization...
commit-queue@webkit.org [Sun, 5 Feb 2017 07:02:30 +0000 (07:02 +0000)]
Static Analyzer: Value stored to 'recordedMachineThreads' during its initialization is never read
https://bugs.webkit.org/show_bug.cgi?id=167845

Patch by Joseph Pecoraro <pecoraro@apple.com> on 2017-02-04
Reviewed by Saam Barati.

Source/JavaScriptCore/heap/MachineStackMarker.cpp:151:14: warning: Value stored to 'recordedMachineThreads' during its initialization is never read
        auto recordedMachineThreads = m_set.take(machineThreads);
             ^~~~~~~~~~~~~~~~~~~~~~   ~~~~~~~~~~~~~~~~~~~~~~~~~~

* heap/MachineStackMarker.cpp:
(JSC::ActiveMachineThreadsManager::remove):

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

3 years agoStatic Analyzer: WebCoreNSURLExtras.mm: Potential leak of memory pointed to by 'allBy...
commit-queue@webkit.org [Sun, 5 Feb 2017 06:23:41 +0000 (06:23 +0000)]
Static Analyzer: WebCoreNSURLExtras.mm: Potential leak of memory pointed to by 'allBytesBuffer'
https://bugs.webkit.org/show_bug.cgi?id=167849

Patch by Joseph Pecoraro <pecoraro@apple.com> on 2017-02-04
Reviewed by Sam Weinig.

Source/WebCore/platform/mac/WebCoreNSURLExtras.mm:883:20: warning: Potential leak of memory pointed to by 'allBytesBuffer'
            return nil;
                   ^~~

* platform/mac/WebCoreNSURLExtras.mm:
(WebCore::dataForURLComponentType):
Free the potentially malloc'd buffer before the early return.

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

3 years agoUnreviewed, fix mistake in comment added in r211569.
cdumez@apple.com [Sun, 5 Feb 2017 02:20:33 +0000 (02:20 +0000)]
Unreviewed, fix mistake in comment added in r211569.

* history/PageCache.cpp:
(WebCore::PageCache::removeAllItemsForPage):

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

3 years agoStatic Analyzer: Value stored to 'prev' is never read
commit-queue@webkit.org [Sun, 5 Feb 2017 01:26:25 +0000 (01:26 +0000)]
Static Analyzer: Value stored to 'prev' is never read
https://bugs.webkit.org/show_bug.cgi?id=167844

Patch by Joseph Pecoraro <pecoraro@apple.com> on 2017-02-04
Reviewed by Saam Barati.

Source/JavaScriptCore/runtime/JSMapIterator.h:60:13: warning: Value stored to 'prev' is never read
            prev = bucket;
            ^      ~~~~~~
Source/JavaScriptCore/runtime/JSSetIterator.h:60:13: warning: Value stored to 'prev' is never read
            prev = bucket;
            ^      ~~~~~~

* runtime/JSMapIterator.h:
(JSC::JSMapIterator::advanceIter):
* runtime/JSSetIterator.h:
(JSC::JSSetIterator::advanceIter):

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

3 years agoPlug some leaks in TestController and UIScriptContext.
akling@apple.com [Sat, 4 Feb 2017 21:46:21 +0000 (21:46 +0000)]
Plug some leaks in TestController and UIScriptContext.
<https://webkit.org/b/167839>

Reviewed by Alexey Proskuryakov.

Fix a couple of the leaks seen on the leaks bot.

* TestRunnerShared/UIScriptContext/UIScriptContext.cpp:
(UIScriptContext::runUIScript):
* WebKitTestRunner/TestController.cpp:
(WTR::TestController::handleCheckOfUserMediaPermissionForOrigin):
(WTR::TestController::decidePolicyForUserMediaPermissionRequestIfPossible):

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

3 years agoFix memory issues related to preload eviction.
yoav@yoav.ws [Sat, 4 Feb 2017 21:40:33 +0000 (21:40 +0000)]
Fix memory issues related to preload eviction.
https://bugs.webkit.org/show_bug.cgi?id=167838

Reviewed by Andreas Kling.

This avoids removing resources from m_preloads during the iteration
by creating a second HashSetList containing the remaining link preloads.

No new tests but this will fix crashes on the leak bots.

* loader/cache/CachedResourceLoader.cpp:
(WebCore::CachedResourceLoader::clearPreloads):

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

3 years ago[GTK] Fix huge ENABLE_RESOURCE_USAGE warning spam
mcatanzaro@igalia.com [Sat, 4 Feb 2017 19:34:14 +0000 (19:34 +0000)]
[GTK] Fix huge ENABLE_RESOURCE_USAGE warning spam

Unreviewed. We shouldn't redefine ENABLE_RESOURCE_USAGE in Platform.h as
it's already defined in cmakeconfig.h.

* wtf/Platform.h:

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

3 years agoSimple line layout: Skip 16bit specific checks on 8bit content.
zalan@apple.com [Sat, 4 Feb 2017 16:34:57 +0000 (16:34 +0000)]
Simple line layout: Skip 16bit specific checks on 8bit content.
https://bugs.webkit.org/show_bug.cgi?id=167831
<rdar://problem/30361948>

Reviewed by Antti Koivisto and Myles C. Maxfield.

Skip various checks on 8bit content.

Covered by existing tests.

* rendering/SimpleLineLayout.cpp:
(WebCore::SimpleLineLayout::canUseForCharacter):
(WebCore::SimpleLineLayout::canUseForText):
(WebCore::SimpleLineLayout::canUseForFontAndText):

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

3 years ago[JSC] Add operationToInt32SensibleSlow to optimize kraken pbkdf2 and sha256
utatane.tea@gmail.com [Sat, 4 Feb 2017 13:46:19 +0000 (13:46 +0000)]
[JSC] Add operationToInt32SensibleSlow to optimize kraken pbkdf2 and sha256
https://bugs.webkit.org/show_bug.cgi?id=167736

Reviewed by Saam Barati.

JSTests:

* stress/to-int32-sensible.js: Added.
(shouldBe):
(toInt32):
(test):

Source/JavaScriptCore:

Add a new function operationToInt32SensibleSlow. This function is only
called after x86 cvttss2si_rr is failed. This means that the
given double number never in range of int32 truncatable numbers.

As a result, exp in operationToInt32 always becomes >= 31. So
we can change the condition from `exp < 32` to `exp == 31`.
This makes missingOne constant. And it leads significantly good
code generation.

The original operationToInt32 code.

    170:   66 48 0f 7e c1          movq   %xmm0,%rcx
    175:   31 c0                   xor    %eax,%eax
    177:   66 48 0f 7e c6          movq   %xmm0,%rsi
    17c:   48 c1 f9 34             sar    $0x34,%rcx
    180:   81 e1 ff 07 00 00       and    $0x7ff,%ecx
    186:   8d 91 01 fc ff ff       lea    -0x3ff(%rcx),%edx
    18c:   83 fa 53                cmp    $0x53,%edx
    18f:   77 37                   ja     1c8 <_ZN3JSC16operationToInt32Ed+0x58>
    191:   83 fa 34                cmp    $0x34,%edx
    194:   7f 3a                   jg     1d0 <_ZN3JSC16operationToInt32Ed+0x60>
    196:   b9 34 00 00 00          mov    $0x34,%ecx
    19b:   66 48 0f 7e c7          movq   %xmm0,%rdi
    1a0:   29 d1                   sub    %edx,%ecx
    1a2:   48 d3 ff                sar    %cl,%rdi
    1a5:   83 fa 1f                cmp    $0x1f,%edx
    1a8:   89 f8                   mov    %edi,%eax
    1aa:   7f 12                   jg     1be <_ZN3JSC16operationToInt32Ed+0x4e>
    1ac:   89 d1                   mov    %edx,%ecx
    1ae:   b8 01 00 00 00          mov    $0x1,%eax
    1b3:   d3 e0                   shl    %cl,%eax
    1b5:   89 c2                   mov    %eax,%edx
    1b7:   8d 40 ff                lea    -0x1(%rax),%eax
    1ba:   21 f8                   and    %edi,%eax
    1bc:   01 d0                   add    %edx,%eax
    1be:   89 c2                   mov    %eax,%edx
    1c0:   f7 da                   neg    %edx
    1c2:   48 85 f6                test   %rsi,%rsi
    1c5:   0f 48 c2                cmovs  %edx,%eax
    1c8:   f3 c3                   repz retq
    1ca:   66 0f 1f 44 00 00       nopw   0x0(%rax,%rax,1)
    1d0:   66 48 0f 7e c0          movq   %xmm0,%rax
    1d5:   81 e9 33 04 00 00       sub    $0x433,%ecx
    1db:   48 d3 e0                shl    %cl,%rax
    1de:   eb de                   jmp    1be <_ZN3JSC16operationToInt32Ed+0x4e>

The operationToInt32SensibleSlow code.

    1e0:   66 48 0f 7e c1          movq   %xmm0,%rcx
    1e5:   66 48 0f 7e c2          movq   %xmm0,%rdx
    1ea:   48 c1 f9 34             sar    $0x34,%rcx
    1ee:   81 e1 ff 07 00 00       and    $0x7ff,%ecx
    1f4:   8d b1 01 fc ff ff       lea    -0x3ff(%rcx),%esi
    1fa:   83 fe 34                cmp    $0x34,%esi
    1fd:   7e 21                   jle    220 <_ZN3JSC28operationToInt32SensibleSlowEd+0x40>
    1ff:   66 48 0f 7e c0          movq   %xmm0,%rax
    204:   81 e9 33 04 00 00       sub    $0x433,%ecx
    20a:   48 d3 e0                shl    %cl,%rax
    20d:   89 c1                   mov    %eax,%ecx
    20f:   f7 d9                   neg    %ecx
    211:   48 85 d2                test   %rdx,%rdx
    214:   0f 48 c1                cmovs  %ecx,%eax
    217:   c3                      retq
    218:   0f 1f 84 00 00 00 00    nopl   0x0(%rax,%rax,1)
    21f:   00
    220:   66 48 0f 7e c0          movq   %xmm0,%rax
    225:   b9 34 00 00 00          mov    $0x34,%ecx
    22a:   29 f1                   sub    %esi,%ecx
    22c:   48 d3 f8                sar    %cl,%rax
    22f:   89 c1                   mov    %eax,%ecx
    231:   81 c9 00 00 00 80       or     $0x80000000,%ecx
    237:   83 fe 1f                cmp    $0x1f,%esi
    23a:   0f 44 c1                cmove  %ecx,%eax
    23d:   89 c1                   mov    %eax,%ecx
    23f:   f7 d9                   neg    %ecx
    241:   48 85 d2                test   %rdx,%rdx
    244:   0f 48 c1                cmovs  %ecx,%eax
    247:   c3                      retq
    248:   0f 1f 84 00 00 00 00    nopl   0x0(%rax,%rax,1)
    24f:   00

This improves kraken pbkdf2 by 10.8% and sha256 by 7.5%.

                                               baseline                  patched

    stanford-crypto-pbkdf2                 153.195+-2.745      ^     138.204+-2.513         ^ definitely 1.1085x faster
    stanford-crypto-sha256-iterative        49.047+-1.038      ^      45.610+-1.235         ^ definitely 1.0754x faster

    <arithmetic>                           101.121+-1.379      ^      91.907+-1.500         ^ definitely 1.1003x faster

* assembler/CPU.h:
(JSC::hasSensibleDoubleToInt):
* dfg/DFGSpeculativeJIT.cpp:
(JSC::DFG::SpeculativeJIT::compileValueToInt32):
* ftl/FTLLowerDFGToB3.cpp:
(JSC::FTL::DFG::LowerDFGToB3::doubleToInt32):
(JSC::FTL::DFG::LowerDFGToB3::sensibleDoubleToInt32):
* ftl/FTLOutput.cpp:
(JSC::FTL::Output::hasSensibleDoubleToInt): Deleted.
* ftl/FTLOutput.h:
* runtime/MathCommon.cpp:
(JSC::operationToInt32SensibleSlow):
* runtime/MathCommon.h:

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

3 years agoUnreviewed. Fix the key shortcut to enable resource usage overlay in GTK+.
carlosgc@webkit.org [Sat, 4 Feb 2017 08:25:10 +0000 (08:25 +0000)]
Unreviewed. Fix the key shortcut to enable resource usage overlay in GTK+.

The condition to check for CTRL and Shift modifiers is wrong, causing the overlay to be shown on Shit+G and
making it impossible to write a 'G'.

* UIProcess/API/gtk/WebKitWebViewBase.cpp:
(webkitWebViewBaseKeyPressEvent):

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

3 years agoSimple line layout: Remove redundant codepath check.
zalan@apple.com [Sat, 4 Feb 2017 06:03:29 +0000 (06:03 +0000)]
Simple line layout: Remove redundant codepath check.
https://bugs.webkit.org/show_bug.cgi?id=167827
<rdar://problem/30361850>

Reviewed by Myles C. Maxfield.

FontCascade::codePath() iterates through the entire text. It's rather wasteful to do twice.

No change in functionality.

* rendering/SimpleLineLayout.cpp:
(WebCore::SimpleLineLayout::canUseForFontAndText):
(WebCore::SimpleLineLayout::printReason):

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

3 years agoREGRESSION(r204858): Synthetic bold text in vertical writing mode is rotated away...
mmaxfield@apple.com [Sat, 4 Feb 2017 05:53:39 +0000 (05:53 +0000)]
REGRESSION(r204858): Synthetic bold text in vertical writing mode is rotated away from original text
https://bugs.webkit.org/show_bug.cgi?id=167826
<rdar://problem/28193222>

Reviewed by Zalan Bujtas.

Source/WebCore:

When drawing vertical text, the rotation is not reset between successive paint calls. We implement
synthetic bold by drawing text twice, which means that the second draw call was getting rotated
twice. This was an oversight in r204858.

Test: fast/text/synthetic-bold-vertical-text.html

* platform/graphics/cocoa/FontCascadeCocoa.mm:
(WebCore::showGlyphsWithAdvances):

LayoutTests:

* fast/text/synthetic-bold-vertical-text-expected.html: Added.
* fast/text/synthetic-bold-vertical-text.html: Added.

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

3 years agoUnreviewed rollout of r211486, r211629.
joepeck@webkit.org [Sat, 4 Feb 2017 05:18:18 +0000 (05:18 +0000)]
Unreviewed rollout of r211486, r211629.

Original change is not ideal and is causing issues.

Source/JavaScriptCore:

* inspector/agents/InspectorHeapAgent.cpp:
(Inspector::SendGarbageCollectionEventsTask::SendGarbageCollectionEventsTask):
* runtime/InitializeThreading.cpp:
(JSC::initializeThreading):

Source/WebKit2:

* Shared/WebKit2Initialize.cpp:
(WebKit::InitializeWebKit2):

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

3 years agoPerformance Timing: Convert WTF::MonotonicTime and WTF::Seconds
commit-queue@webkit.org [Sat, 4 Feb 2017 03:23:53 +0000 (03:23 +0000)]
Performance Timing: Convert WTF::MonotonicTime and WTF::Seconds
https://bugs.webkit.org/show_bug.cgi?id=167768

Patch by Joseph Pecoraro <pecoraro@apple.com> on 2017-02-03
Reviewed by Geoffrey Garen.

Source/WebCore:

The public APIs still return double (DOMHighResTimeStamp), which
is milliseconds since a time origin:
https://w3c.github.io/hr-time/#dom-domhighrestimestamp

* loader/LoadTiming.cpp:
(WebCore::LoadTiming::secondsSinceStartTime):
(WebCore::LoadTiming::monotonicTimeToPseudoWallTime):
(WebCore::LoadTiming::markStartTime):
(WebCore::LoadTiming::addRedirect):
(WebCore::LoadTiming::monotonicTimeToZeroBasedDocumentTime): Deleted.
* loader/LoadTiming.h:
(WebCore::LoadTiming::markUnloadEventStart):
(WebCore::LoadTiming::markUnloadEventEnd):
(WebCore::LoadTiming::markRedirectStart):
(WebCore::LoadTiming::markRedirectEnd):
(WebCore::LoadTiming::markFetchStart):
(WebCore::LoadTiming::setResponseEnd):
(WebCore::LoadTiming::markLoadEventStart):
(WebCore::LoadTiming::markLoadEventEnd):
(WebCore::LoadTiming::startTime):
(WebCore::LoadTiming::unloadEventStart):
(WebCore::LoadTiming::unloadEventEnd):
(WebCore::LoadTiming::redirectStart):
(WebCore::LoadTiming::redirectEnd):
(WebCore::LoadTiming::fetchStart):
(WebCore::LoadTiming::responseEnd):
(WebCore::LoadTiming::loadEventStart):
(WebCore::LoadTiming::loadEventEnd):
(WebCore::LoadTiming::redirectCount):
(WebCore::LoadTiming::referenceMonotonicTime):
(WebCore::LoadTiming::referenceWallTime):
Use MonotonicTime and WallTime for timestamps and references.

* dom/Document.cpp:
(WebCore::Document::setReadyState):
(WebCore::Document::finishedParsing):
(WebCore::Document::monotonicTimestamp):
* dom/DocumentTiming.h:
(WebCore::DocumentTiming::DocumentTiming): Deleted.
* dom/ScriptedAnimationController.cpp:
(WebCore::ScriptedAnimationController::serviceScriptedAnimations):
* inspector/InspectorNetworkAgent.cpp:
(WebCore::InspectorNetworkAgent::buildObjectForTiming):
(WebCore::InspectorNetworkAgent::didFinishLoading):
* loader/DocumentLoader.cpp:
(WebCore::DocumentLoader::finishedLoading):
(WebCore::DocumentLoader::dataReceived):
* loader/DocumentLoader.h:
* loader/SubresourceLoader.cpp:
(WebCore::SubresourceLoader::didFinishLoading):
* loader/cache/CachedResourceLoader.cpp:
(WebCore::CachedResourceLoader::requestResource):
* page/DOMWindow.cpp:
(WebCore::DOMWindow::performance):
Use new types instead of raw doubles.

* page/Performance.cpp:
(WebCore::Performance::Performance):
(WebCore::Performance::now):
(WebCore::Performance::reduceTimeResolution):
(WebCore::Performance::addResourceTiming):
* page/Performance.h:
Do time arithmatic with WTF::Time classes.
This clarifies that we reduce our timestamps to 100us
resolution instead of the maximum 5us allowed by the spec.

* page/PerformanceResourceTiming.cpp:
(WebCore::monotonicTimeToDOMHighResTimeStamp):
(WebCore::PerformanceResourceTiming::PerformanceResourceTiming):
(WebCore::PerformanceResourceTiming::networkLoadTimeToDOMHighResTimeStamp):
* page/PerformanceResourceTiming.h:
* page/PerformanceTiming.cpp:
(WebCore::PerformanceTiming::resourceLoadTimeRelativeToFetchStart):
(WebCore::PerformanceTiming::monotonicTimeToIntegerMilliseconds):
(WebCore::toIntegerMilliseconds): Deleted.
* page/PerformanceTiming.h:
Do time arithmatic with WTF::Time classes.

* workers/DedicatedWorkerGlobalScope.cpp:
(WebCore::DedicatedWorkerGlobalScope::create):
(WebCore::DedicatedWorkerGlobalScope::DedicatedWorkerGlobalScope):
* workers/DedicatedWorkerGlobalScope.h:
* workers/DedicatedWorkerThread.cpp:
(WebCore::DedicatedWorkerThread::DedicatedWorkerThread):
(WebCore::DedicatedWorkerThread::createWorkerGlobalScope):
* workers/DedicatedWorkerThread.h:
* workers/WorkerGlobalScope.cpp:
(WebCore::WorkerGlobalScope::WorkerGlobalScope):
* workers/WorkerGlobalScope.h:
* workers/WorkerGlobalScopeProxy.h:
* workers/WorkerMessagingProxy.cpp:
(WebCore::WorkerMessagingProxy::startWorkerGlobalScope):
* workers/WorkerMessagingProxy.h:
* workers/WorkerThread.cpp:
(WebCore::WorkerThreadStartupData::WorkerThreadStartupData):
(WebCore::WorkerThread::WorkerThread):
* workers/WorkerThread.h:
Pass time origin as MonotonicTime.

* workers/Worker.cpp:
(WebCore::Worker::create):
(WebCore::Worker::notifyFinished):
* workers/Worker.h:
Rename creation timestamp member. This matches Document's m_documentCreationTime.

Source/WTF:

* wtf/Stopwatch.h:
(WTF::Stopwatch::elapsedTimeSince):
(WTF::Stopwatch::elapsedTimeSinceMonotonicTime): Deleted.

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

3 years ago[WebRTC] Add more files to libwebrtc build
achristensen@apple.com [Sat, 4 Feb 2017 03:16:04 +0000 (03:16 +0000)]
[WebRTC] Add more files to libwebrtc build
https://bugs.webkit.org/show_bug.cgi?id=167824

Reviewed by Youenn Fablet.

* Configurations/libwebrtc.xcconfig:
* Configurations/usrsctp.xcconfig: Added.
* libwebrtc.xcodeproj/project.pbxproj:

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

3 years agoWK1 mouse events are missing movementX and movementY for pointerlock.
commit-queue@webkit.org [Sat, 4 Feb 2017 03:03:39 +0000 (03:03 +0000)]
WK1 mouse events are missing movementX and movementY for pointerlock.
https://bugs.webkit.org/show_bug.cgi?id=167775
rdar://problem/30343810

Patch by Jeremy Jones <jeremyj@apple.com> on 2017-02-03
Reviewed by Alexey Proskuryakov.

Source/WebCore:

pointer-lock/mouse-event-delivery.html

Improve mouse-event-delivery.html test to mouse move and check for valid movementX and movementY.

* platform/mac/PlatformEventFactoryMac.mm:
(WebCore::PlatformMouseEventBuilder::PlatformMouseEventBuilder): WK1 plumb throuhg movementX and movementY

Tools:

Set kCGMouseEventDeltaX and kCGMouseEventDeltaY when synthesizing mouse move events.

* DumpRenderTree/mac/EventSendingController.mm:
(-[EventSendingController mouseMoveToX:Y:]):
* WebKitTestRunner/mac/EventSenderProxy.mm:
(WTR::EventSenderProxy::mouseMoveTo):

LayoutTests:

Enable pointer-lock/mouse-event-delivery.html for mac.

* platform/mac/TestExpectations:

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

3 years agoCorrectly set the "inWindow" flag for TileControllers that aren't the page tiles...
simon.fraser@apple.com [Sat, 4 Feb 2017 01:53:38 +0000 (01:53 +0000)]
Correctly set the "inWindow" flag for TileControllers that aren't the page tiles, and clarify "usingTiledBacking" logic
https://bugs.webkit.org/show_bug.cgi?id=167774

Reviewed by Tim Horton.
Source/WebCore:

RenderLayerBacking had some very confusing "usingTiledCacheLayer" uses.

Its member variable, m_usingTiledCacheLayer, really meant "m_isMainFrameLayerWithTiledBacking" so make it so.
It had a usingTiledBacking(), which returned the same thing, which this patch replaces with isMainFrameLayerWithTiledBacking().

The fact that usingTiledBacking() was only true for the page tiled layer tripped up
RenderLayerCompositor::setIsInWindowForLayerIncludingDescendants(), which would only ever call setIsInWindow()
on the page tiled layer. These changes fix that.

Also make a way for tests to unparent the web view via UIScriptController, and dump out the "in window"
status of TileBackings when dumping tile caches.

Test: tiled-drawing/tiled-backing-in-window.html

* platform/graphics/TiledBacking.h:
* platform/graphics/ca/GraphicsLayerCA.cpp:
(WebCore::GraphicsLayerCA::dumpAdditionalProperties):
* platform/graphics/ca/TileController.h:
* rendering/RenderLayerBacking.cpp:
(WebCore::RenderLayerBacking::RenderLayerBacking):
(WebCore::computePageTiledBackingCoverage):
(WebCore::RenderLayerBacking::adjustTiledBackingCoverage):
(WebCore::RenderLayerBacking::setTiledBackingHasMargins):
(WebCore::RenderLayerBacking::createPrimaryGraphicsLayer):
(WebCore::RenderLayerBacking::shouldClipCompositedBounds):
(WebCore::RenderLayerBacking::updateDescendantClippingLayer):
(WebCore::RenderLayerBacking::updateRootLayerConfiguration):
(WebCore::RenderLayerBacking::paintsIntoWindow):
(WebCore::computeTileCoverage): Deleted.
* rendering/RenderLayerBacking.h:
* rendering/RenderLayerCompositor.cpp:
(WebCore::RenderLayerCompositor::flushPendingLayerChanges):
(WebCore::RenderLayerCompositor::rootFixedBackgroundsChanged):
(WebCore::RenderLayerCompositor::setIsInWindowForLayerIncludingDescendants):
(WebCore::RenderLayerCompositor::supportsFixedRootBackgroundCompositing):
(WebCore::RenderLayerCompositor::documentUsesTiledBacking):

Tools:

Implement UIScriptController removeViewFromWindow() and addViewToWindow(), and hook
up for Mac WK1 and WK2, and iOS WK2. It takes a callback because view state updates to the
web process are async, so the callback fires after the web process gets the new state.

* DumpRenderTree/ios/UIScriptControllerIOS.mm:
(WTR::UIScriptController::removeViewFromWindow):
(WTR::UIScriptController::addViewToWindow):
* DumpRenderTree/mac/DumpRenderTree.mm:
(createWebViewAndOffscreenWindow):
(resetWebViewToConsistentStateBeforeTesting):
* DumpRenderTree/mac/DumpRenderTreeMac.h:
* DumpRenderTree/mac/UIScriptControllerMac.mm:
(WTR::UIScriptController::removeViewFromWindow):
(WTR::UIScriptController::addViewToWindow):
* TestRunnerShared/UIScriptContext/Bindings/UIScriptController.idl:
* TestRunnerShared/UIScriptContext/UIScriptController.cpp:
(WTR::UIScriptController::removeViewFromWindow):
(WTR::UIScriptController::addViewToWindow):
* TestRunnerShared/UIScriptContext/UIScriptController.h:
* WebKitTestRunner/PlatformWebView.h:
* WebKitTestRunner/TestController.cpp:
(WTR::TestController::resetStateToConsistentValues):
* WebKitTestRunner/ios/PlatformWebViewIOS.mm:
(WTR::PlatformWebView::removeFromWindow):
(WTR::PlatformWebView::addToWindow):
* WebKitTestRunner/ios/UIScriptControllerIOS.mm:
(WTR::UIScriptController::removeViewFromWindow):
(WTR::UIScriptController::addViewToWindow):
* WebKitTestRunner/mac/PlatformWebViewMac.mm:
(WTR::PlatformWebView::removeFromWindow):
(WTR::PlatformWebView::addToWindow):
* WebKitTestRunner/mac/UIScriptControllerMac.mm:
(WTR::UIScriptController::removeViewFromWindow):
(WTR::UIScriptController::addViewToWindow):

LayoutTests:

Rebase to include the "in window" output.

tiled-drawing/background-transparency-toggle.html was sensitive to the length of the output, so give the body
a fixed size.

* compositing/tiling/offscreen-tiled-layer-expected.txt:
* compositing/tiling/transform-origin-tiled-expected.txt:
* platform/mac-wk1/compositing/tiling/offscreen-tiled-layer-expected.txt:
* platform/mac-wk1/compositing/tiling/transform-origin-tiled-expected.txt:
* platform/mac-wk2/compositing/tiling/rotated-tiled-clamped-expected.txt:
* platform/mac-wk2/compositing/tiling/rotated-tiled-preserve3d-clamped-expected.txt:
* platform/mac-wk2/compositing/tiling/tile-cache-zoomed-expected.txt:
* platform/mac-wk2/compositing/tiling/tiled-layer-resize-expected.txt:
* platform/mac/compositing/tiling/rotated-tiled-clamped-expected.txt:
* platform/mac/compositing/tiling/rotated-tiled-preserve3d-clamped-expected.txt:
* platform/mac/compositing/tiling/tiled-layer-resize-expected.txt:
* tiled-drawing/background-transparency-toggle-expected.txt:
* tiled-drawing/background-transparency-toggle.html:
* tiled-drawing/scrolling/fast-scroll-div-latched-div-expected.txt:
* tiled-drawing/scrolling/fast-scroll-div-latched-div-with-handler-expected.txt:
* tiled-drawing/scrolling/fast-scroll-div-latched-mainframe-expected.txt:
* tiled-drawing/scrolling/fast-scroll-div-latched-mainframe-with-handler-expected.txt:
* tiled-drawing/scrolling/fast-scroll-iframe-latched-iframe-expected.txt:
* tiled-drawing/scrolling/fast-scroll-iframe-latched-iframe-with-handler-expected.txt:
* tiled-drawing/scrolling/fast-scroll-iframe-latched-mainframe-expected.txt:
* tiled-drawing/scrolling/fast-scroll-iframe-latched-mainframe-with-handler-expected.txt:
* tiled-drawing/scrolling/fast-scroll-select-latched-mainframe-expected.txt:
* tiled-drawing/scrolling/fast-scroll-select-latched-mainframe-with-handler-expected.txt:
* tiled-drawing/scrolling/fast-scroll-select-latched-select-expected.txt:
* tiled-drawing/scrolling/fast-scroll-select-latched-select-with-handler-expected.txt:
* tiled-drawing/scrolling/fixed-background/fixed-background-no-image-expected.txt:
* tiled-drawing/scrolling/fixed-background/fixed-body-background-body-layer-expected.txt:
* tiled-drawing/scrolling/fixed-background/fixed-body-background-expected.txt:
* tiled-drawing/scrolling/fixed-background/fixed-body-background-opacity-expected.txt:
* tiled-drawing/scrolling/fixed-background/fixed-body-background-positioned-expected.txt:
* tiled-drawing/scrolling/fixed-background/fixed-body-background-transformed-expected.txt:
* tiled-drawing/scrolling/fixed-background/fixed-body-background-zoomed-expected.txt:
* tiled-drawing/scrolling/fixed-background/fixed-html-background-expected.txt:
* tiled-drawing/scrolling/fixed-background/fixed-non-propagated-body-background-expected.txt:
* tiled-drawing/scrolling/fixed/four-bars-zoomed-expected.txt:
* tiled-drawing/simple-document-with-margin-tiles-expected.txt:
* tiled-drawing/tile-coverage-after-scroll-expected.txt:
* tiled-drawing/tile-coverage-after-scroll-speculative-expected.txt:
* tiled-drawing/tile-coverage-scroll-to-bottom-expected.txt:
* tiled-drawing/tile-coverage-slow-scrolling-expected.txt:
* tiled-drawing/tile-coverage-speculative-expected.txt:
* tiled-drawing/tile-coverage-view-exposed-rect-expected.txt:
* tiled-drawing/tile-size-both-scrollable-expected.txt:
* tiled-drawing/tile-size-horizontally-scrollable-expected.txt:
* tiled-drawing/tile-size-slow-zoomed-expected.txt:
* tiled-drawing/tile-size-unscrollable-expected.txt:
* tiled-drawing/tile-size-vertically-scrollable-expected.txt:
* tiled-drawing/tile-size-view-exposed-rect-expected.txt:
* tiled-drawing/tiled-backing-in-window-expected.txt: Added.
* tiled-drawing/tiled-backing-in-window.html: Added.
* tiled-drawing/tiled-drawing-scroll-position-page-cache-restoration-expected.txt:
* tiled-drawing/tiled-drawing-zoom-expected.txt:
* tiled-drawing/tiled-drawing-zoom-scrolled-expected.txt:
* tiled-drawing/use-tiled-drawing-expected.txt:
* tiled-drawing/visible-rect-content-inset-expected.txt:

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

3 years agoSimple line layout: Bail out from Simple Line Layout when the primary font is insuffi...
zalan@apple.com [Sat, 4 Feb 2017 01:42:12 +0000 (01:42 +0000)]
Simple line layout: Bail out from Simple Line Layout when the primary font is insufficient.
https://bugs.webkit.org/show_bug.cgi?id=167820
Source/WebCore:

<rdar://problem/30359685>

Reviewed by Myles C. Maxfield.

Currently simple line layout requires the primary font to have all the glyps for the content.

Test: fast/text/simple-line-layout-do-not-support-unicode-range.html

* rendering/SimpleLineLayout.cpp:
(WebCore::SimpleLineLayout::canUseForText):
(WebCore::SimpleLineLayout::canUseForFontAndText):
(WebCore::SimpleLineLayout::printReason):

LayoutTests:

Reviewed by Myles C. Maxfield.

* fast/text/simple-line-layout-do-not-support-unicode-range-expected.html: Added.
* fast/text/simple-line-layout-do-not-support-unicode-range.html: Added.

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

3 years agoImport web-platform-tests/hr-time tests
commit-queue@webkit.org [Sat, 4 Feb 2017 01:39:19 +0000 (01:39 +0000)]
Import web-platform-tests/hr-time tests
https://bugs.webkit.org/show_bug.cgi?id=167819

Patch by Joseph Pecoraro <pecoraro@apple.com> on 2017-02-03
Reviewed by Youenn Fablet.

We pass all of these tests upstream.

* resources/ImportExpectations:
* web-platform-tests/hr-time/OWNERS: Added.
* web-platform-tests/hr-time/basic-expected.txt: Added.
* web-platform-tests/hr-time/basic.html: Added.
* web-platform-tests/hr-time/basic.worker-expected.txt: Added.
* web-platform-tests/hr-time/basic.worker.html: Added.
* web-platform-tests/hr-time/basic.worker.js: Added.
* web-platform-tests/hr-time/idlharness-expected.txt: Added.
* web-platform-tests/hr-time/idlharness.html: Added.
* web-platform-tests/hr-time/monotonic-clock-expected.txt: Added.
* web-platform-tests/hr-time/monotonic-clock.html: Added.
* web-platform-tests/hr-time/resources/now_frame.html: Added.
* web-platform-tests/hr-time/resources/w3c-import.log: Added.
* web-platform-tests/hr-time/test_cross_frame_start-expected.txt: Added.
* web-platform-tests/hr-time/test_cross_frame_start.html: Added.
* web-platform-tests/hr-time/w3c-import.log: Added.

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

3 years agoASSERT in HTMLMediaElement::~HTMLMediaElement
jer.noble@apple.com [Sat, 4 Feb 2017 01:20:53 +0000 (01:20 +0000)]
ASSERT in HTMLMediaElement::~HTMLMediaElement
https://bugs.webkit.org/show_bug.cgi?id=167818

Reviewed by Brent Fulgham.

Source/WebCore:

Test: media/audio-dealloc-crash.html

HTMLMediaElement's MediaElementSession can nominate the HTMLMediaElement itself
to become the playback controls session from inside the HTMLMediaElement destructor. Protect
against this by clearing out the session before calling updatePlaybackControlsManager().

* html/HTMLMediaElement.cpp:
(WebCore::HTMLMediaElement::~HTMLMediaElement):

LayoutTests:

* media/audio-dealloc-crash-expected.txt: Added.
* media/audio-dealloc-crash.html: Added.

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

3 years agoOSR entry: delay outer-loop compilation when at inner-loop
jfbastien@apple.com [Sat, 4 Feb 2017 01:17:38 +0000 (01:17 +0000)]
OSR entry: delay outer-loop compilation when at inner-loop
https://bugs.webkit.org/show_bug.cgi?id=167149

Reviewed by Filip Pizlo.

r211224 and r211461 were reverted because they caused massive
kraken/ai-astar regressions. This patch instead does the
minimally-disruptive change to fix the original bug as described
below, but omits extra tuning and refactoring which I had
before. I'll commit tuning and refactoring separately, if this
sticks. This patch is therefore very minimal, and layers carefully
on top of the complex spaghetti-logic. The only change it makes is
that it uses triggers to indicate to outer loops that they should
compile, which fixes the immediate bug and seems roughly perf
neutral (maybe a small gain on kraken sometimes, other times a
small regression as would be expected from slightly compiling
later). As opposed to r211461 this patch doesn't unconditionally
unset the trigger because it prevents further DFG executions from
entering. It therefore makes the trigger a tri-state enum class:
don't trigger, compilation done, start compilation. Only "start
compilation" gets reset to "don't trigger". "Compilation done"
does not (unless there's a problem compiling, then it gets set
back to "don't trigger").

As of https://bugs.webkit.org/show_bug.cgi?id=155217 OSR
compilation can be kicked off for an entry into an outer-loop,
while executing an inner-loop. This is desirable because often the
codegen from an inner-entry isn't as good as the codegen from an
outer-entry, but execution from an inner-loop is often pretty hot
and likely to kick off compilation. This approach provided nice
speedups on Kraken because we'd select to enter to the outer-loop
very reliably, which reduces variability (the inner-loop was
selected roughly 1/5 times from my unscientific measurements).

When compilation starts we take a snapshot of the JSValues at the
current execution state using OSR's recovery mechanism. These
values are passed to the compiler and are used as way to perform
type profiling, and could be used to observe cell types as well as
to perform predictions such as through constant propagation.

It's therefore desired to enter from the outer-loop when we can,
but we need to be executing from that location to capture the
right JSValues, otherwise we're confusing the compiler and giving
it inaccurate JSValues which can lead it to predict the wrong
things, leading to suboptimal code or recompilation due to
misprediction, or in super-corner-cases a crash.

DFG tier-up was added here:
https://bugs.webkit.org/show_bug.cgi?id=112838

* dfg/DFGJITCode.h:
* dfg/DFGJITCompiler.cpp:
(JSC::DFG::JITCompiler::JITCompiler):
* dfg/DFGOperations.cpp:
* dfg/DFGSpeculativeJIT64.cpp:
(JSC::DFG::SpeculativeJIT::compile):
* dfg/DFGToFTLForOSREntryDeferredCompilationCallback.cpp:
(JSC::DFG::ToFTLForOSREntryDeferredCompilationCallback::ToFTLForOSREntryDeferredCompilationCallback):
(JSC::DFG::Ref<ToFTLForOSREntryDeferredCompilationCallback>ToFTLForOSREntryDeferredCompilationCallback::create):
(JSC::DFG::ToFTLForOSREntryDeferredCompilationCallback::compilationDidBecomeReadyAsynchronously):
(JSC::DFG::ToFTLForOSREntryDeferredCompilationCallback::compilationDidComplete):
* dfg/DFGToFTLForOSREntryDeferredCompilationCallback.h:

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

3 years agoRemove check for SkipSafariExecutableEntitlementChecks
ap@apple.com [Sat, 4 Feb 2017 00:05:51 +0000 (00:05 +0000)]
Remove check for SkipSafariExecutableEntitlementChecks
https://bugs.webkit.org/show_bug.cgi?id=167762

Reviewed by Dan Bernstein.

Follow-up fix: don't break internal behavior.

* Scripts/webkitdirs.pm:
(safariPath):
(executableHasEntitlements): Deleted.
(safariPathFromSafariBundle): Deleted.
(installedSafariPath): Deleted.

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

3 years ago[Mac][WK2] Add SPI to override the Content Security Policy of a page
dbates@webkit.org [Fri, 3 Feb 2017 23:14:53 +0000 (23:14 +0000)]
[Mac][WK2] Add SPI to override the Content Security Policy of a page
https://bugs.webkit.org/show_bug.cgi?id=167810
<rdar://problem/30102568>

Reviewed by Anders Carlsson.

Source/WebCore:

* dom/Document.cpp:
(WebCore::Document::initSecurityContext): Apply the embedding client's override Content Security
Policy to the document if one exists.
* loader/FrameLoaderClient.h: Add function overrideContentSecurityPolicy() that a FrameLoaderClient
can override to provide a custom Content Security Policy for a document (defaults: null string - no policy).
As its name implies, the policy returned by overrideContentSecurityPolicy() will define the Content
Security Policy for the document, overriding any subsequently received Content Security Policy for
the document.
* page/csp/ContentSecurityPolicy.cpp:
(WebCore::ContentSecurityPolicy::copyStateFrom): Only copy policies from the specified ContentSecurityPolicy
object if our policy was not specified by the embedding client.
(WebCore::ContentSecurityPolicy::didReceiveHeader): Set ContentSecurityPolicy::m_hasAPIPolicy to true
when we receive an API policy from the embedding client (ContentSecurityPolicy::PolicyFrom::API). An
API policy must be defined before a policy received from a document. Do not process a received header
if we already have an API policy as the API policy overrides all other policies.
* page/csp/ContentSecurityPolicy.h:

Source/WebKit2:

Add SPI to WKWebViewConfiguration so that an embedding client can define a custom Content Security
Policy that overrides the Content Security Policy of any page loaded in the web view.

* Shared/WebPageCreationParameters.cpp:
(WebKit::WebPageCreationParameters::encode): Encode instance variable overrideContentSecurityPolicy.
(WebKit::WebPageCreationParameters::decode): Decode instance variable overrideContentSecurityPolicy.
* Shared/WebPageCreationParameters.h:
* UIProcess/API/APIPageConfiguration.cpp:
(API::PageConfiguration::copy): Copy instance variable overrideContentSecurityPolicy.
* UIProcess/API/APIPageConfiguration.h:
(API::PageConfiguration::overrideContentSecurityPolicy): Added.
(API::PageConfiguration::setOverrideContentSecurityPolicy): Added.
* UIProcess/API/Cocoa/WKWebView.mm:
(-[WKWebView _initializeWithConfiguration:]): Copy overrideContentSecurityPolicy set on the WKWebViewConfiguration
object to the API::PageConfiguration object if non-nil.
* UIProcess/API/Cocoa/WKWebViewConfiguration.mm:
(-[WKWebViewConfiguration copyWithZone:]):  Copy the instance variable overrideContentSecurityPolicy.
(-[WKWebViewConfiguration _overrideContentSecurityPolicy]): Added.
(-[WKWebViewConfiguration _setOverrideContentSecurityPolicy:]): Added.
* UIProcess/API/Cocoa/WKWebViewConfigurationPrivate.h: Define SPI property _overrideContentSecurityPolicy.
* UIProcess/WebPageProxy.cpp:
(WebKit::WebPageProxy::WebPageProxy): Initialize m_overrideContentSecurityPolicy from the passed
page configuration.
(WebKit::WebPageProxy::creationParameters): Set WebPageCreationParameters::overrideContentSecurityPolicy
so that the WebPage object (in the WebProcess) will know the overridden Content Security Policy
to apply to the document.
* UIProcess/WebPageProxy.h:
* WebProcess/WebCoreSupport/WebFrameLoaderClient.cpp:
(WebKit::WebFrameLoaderClient::overrideContentSecurityPolicy): Added. Returns the custom Content
Security Policy to apply to a new document.
* WebProcess/WebCoreSupport/WebFrameLoaderClient.h:
* WebProcess/WebPage/WebPage.cpp:
* WebProcess/WebPage/WebPage.h:
(WebKit::WebPage::overrideContentSecurityPolicy): Added.

Tools:

Add tests to ensure that we do not regress -[WKWebView _setOverrideContentSecurityPolicy:].

* TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
* TestWebKitAPI/Tests/WebKit2Cocoa/OverrideContentSecurityPolicy.mm: Added.
(TEST):
* TestWebKitAPI/Tests/WebKit2Cocoa/page-with-csp-iframe.html: Added.
* TestWebKitAPI/Tests/WebKit2Cocoa/page-with-csp.html: Added.
* TestWebKitAPI/Tests/WebKit2Cocoa/page-without-csp-iframe.html: Added.
* TestWebKitAPI/Tests/WebKit2Cocoa/page-without-csp.html: Added.

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

3 years agoRevert toString behavior to what we had in the last version we shipped
andersca@apple.com [Fri, 3 Feb 2017 23:08:17 +0000 (23:08 +0000)]
Revert toString behavior to what we had in the last version we shipped
https://bugs.webkit.org/show_bug.cgi?id=167814
rdar://problem/30344753

Reviewed by Tim Horton.

This is a speculative fix for a crash that we've seen on recent builds. It simply reverts the toString call back to
what we have in the last version of Safari we shipped.

* WebProcess/Plugins/Netscape/NPRuntimeObjectMap.cpp:
(WebKit::NPRuntimeObjectMap::convertJSValueToNPVariant):

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

3 years agoDrop Mac App Store workaround for window.getComputedStyle()
cdumez@apple.com [Fri, 3 Feb 2017 22:40:28 +0000 (22:40 +0000)]
Drop Mac App Store workaround for window.getComputedStyle()
https://bugs.webkit.org/show_bug.cgi?id=166891
<rdar://problem/28282452>

Reviewed by Sam Weinig.

Drop Mac App Store workaround for window.getComputedStyle() now that
<rdar://problem/28020681> has been fixed.

* page/DOMWindow.cpp:
* page/DOMWindow.h:
* page/DOMWindow.idl:
* platform/RuntimeApplicationChecks.h:
* platform/RuntimeApplicationChecks.mm:
(WebCore::MacApplication::isAppStore): Deleted.

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

3 years agoDismiss HTML form validation popover when pressing Escape key
cdumez@apple.com [Fri, 3 Feb 2017 22:18:19 +0000 (22:18 +0000)]
Dismiss HTML form validation popover when pressing Escape key
https://bugs.webkit.org/show_bug.cgi?id=167716
<rdar://problem/29872943>

Reviewed by Simon Fraser.

Source/WebCore:

Dismiss any visible HTML form validation popover when pressing
the Escape key.

Test: fast/forms/validation-bubble-escape-key-dismiss.html

* page/EventHandler.cpp:
(WebCore::EventHandler::keyEvent):
* page/ValidationMessageClient.h:

Source/WebKit/mac:

Override ValidationMessageClient::hideAnyValidationMessage().

* WebCoreSupport/WebValidationMessageClient.h:
* WebCoreSupport/WebValidationMessageClient.mm:
(WebValidationMessageClient::hideAnyValidationMessage):

Source/WebKit2:

Override ValidationMessageClient::hideAnyValidationMessage().

* WebProcess/WebCoreSupport/WebValidationMessageClient.cpp:
(WebKit::WebValidationMessageClient::hideAnyValidationMessage):
* WebProcess/WebCoreSupport/WebValidationMessageClient.h:

LayoutTests:

Add layout test coverage.

* fast/forms/validation-bubble-escape-key-dismiss-expected.txt: Added.
* fast/forms/validation-bubble-escape-key-dismiss.html: Added.
* platform/ios-simulator/TestExpectations:

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

3 years agoRequire keyboard focus for pointer lock.
commit-queue@webkit.org [Fri, 3 Feb 2017 22:01:19 +0000 (22:01 +0000)]
Require keyboard focus for pointer lock.
https://bugs.webkit.org/show_bug.cgi?id=167750

Patch by Jeremy Jones <jeremyj@apple.com> on 2017-02-03
Reviewed by Tim Horton.

When keyboard focus leaves the page, end pointer lock
Prevent pointer lock when the page doesn't have keyboard focus.

* UIProcess/WebPageProxy.cpp:
(WebKit::WebPageProxy::dispatchActivityStateChange):
(WebKit::WebPageProxy::requestPointerLock):

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

3 years agoInclude cstdlib before using ::malloc and posix_memalign
commit-queue@webkit.org [Fri, 3 Feb 2017 21:59:08 +0000 (21:59 +0000)]
Include cstdlib before using ::malloc and posix_memalign
https://bugs.webkit.org/show_bug.cgi?id=167800

Patch by Ting-Wei Lan <lantw44@gmail.com> on 2017-02-03
Reviewed by Geoffrey Garen.

* bmalloc/DebugHeap.cpp:

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

3 years agoPointer lock events should be delivered directly to the target element
commit-queue@webkit.org [Fri, 3 Feb 2017 21:56:43 +0000 (21:56 +0000)]
Pointer lock events should be delivered directly to the target element
https://bugs.webkit.org/show_bug.cgi?id=167134
rdar://problem/30268004

Patch by Jeremy Jones <jeremyj@apple.com> on 2017-02-03
Reviewed by Dean Jackson.

Source/WebCore:

pointer-lock/mouse-event-delivery.html: Enabled for mac, added wheel event tests.

When pointer is locked on an element, route mouse events directly to the target element, instead of
doing the normal event disptach.

* page/EventHandler.cpp:
(WebCore::EventHandler::handleMousePressEvent):
(WebCore::EventHandler::handleMouseDoubleClickEvent):
(WebCore::EventHandler::handleMouseMoveEvent):
(WebCore::EventHandler::handleMouseReleaseEvent):
(WebCore::EventHandler::handleMouseForceEvent):
(WebCore::EventHandler::handleWheelEvent):
* page/PointerLockController.cpp:
(WebCore::PointerLockController::isLocked): Added.
(WebCore::PointerLockController::dispatchLockedWheelEvent): Added.
* page/PointerLockController.h:

LayoutTests:

The pointer-lock/mouse-event-delivery.html test is modified to explicitly move the mouse pointer to a valid
location before sending mouse actions. Without this, the test infrastructure doesn't know that the pointer
is over the web view and doesn't deliver events.

The pointer-lock/mouse-event-delivery.html is also modified to explicitly wait for the delivery of the
wheel event before continuing with the test. This prevents flakeyness with the order the events are received.

Added code to test for wheel events.

* platform/mac/TestExpectations: enabled test.
* pointer-lock/mouse-event-delivery.html:
* pointer-lock/mouse-event-delivery-expected.txt:

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

3 years agoAvoid evicting link preload resources when parsing is done.
yoav@yoav.ws [Fri, 3 Feb 2017 21:52:50 +0000 (21:52 +0000)]
Avoid evicting link preload resources when parsing is done.
https://bugs.webkit.org/show_bug.cgi?id=167415

Reviewed by Ryosuke Niwa.

Source/WebCore:

Currently all preloads (speculative and link preload) are being cleared when the document has finished parsing.
When it comes to link preloads, it can result in resources being cleared before the page had a chance to use them. (e.g. resources
that are preloaded in order to be loaded through script after DOMContentLoaded)

This patch fixes that by marking link preload resources as such, so that they can be handled separately inside clearPreloads().
As this fix also exposed an issue with load cancelation with invalid hrefs (which tests were passing before due to the preloads
being cleared), said issue is also fixed by clearing previousely preloaded resources if an invalid link preload is later detected.

Test: http/tests/preload/not_evicting_preload_at_onload.html

* dom/Document.cpp:
(WebCore::Document::finishedParsing): Only clear speculative preloads when parsing is finished.
* loader/LinkLoader.cpp:
(WebCore::LinkLoader::preloadIfNeeded): Set request flag indicating link preload.
(WebCore::LinkLoader::loadLink): Clear previousely preloaded resource to cancel their load.
* loader/LinkPreloadResourceClients.h:
(WebCore::LinkPreloadResourceClient::clearResource): Call cancelLoad() when the client is cleared.
* loader/cache/CachedResource.h:
(WebCore::CachedResource::isLinkPreload):
(WebCore::CachedResource::setLinkPreload):
* loader/cache/CachedResource.cpp:
(WebCore::CachedResource::CachedResource): Initialize m_isLinkPreload with the request's value.
* loader/cache/CachedResourceLoader.cpp:
(WebCore::CachedResourceLoader::~CachedResourceLoader):
(WebCore::CachedResourceLoader::requestResource): Mirror the request link preload flag to the resource if it's fetched from cache.
(WebCore::CachedResourceLoader::clearPreloads): Add a "speculative only" mode, which doesn't clear link preloads.
* loader/cache/CachedResourceLoader.h:
* loader/cache/CachedResourceRequest.cpp:
(WebCore::CachedResourceRequest::CachedResourceRequest):
* loader/cache/CachedResourceRequest.h:
(WebCore::CachedResourceRequest::isLinkPreload):
(WebCore::CachedResourceRequest::setIsLinkPreload):

LayoutTests:

* http/tests/preload/dynamic_remove_preload_href.html: Test passed before for the wrong reasons. Cache-busting in order for it to genuinely pass.
* http/tests/preload/not_delaying_window_onload_before_discovery.html: Test passed before for the wrong reasons. Cache-busting in order for it to genuinely pass.
* http/tests/preload/not_evicting_preload_at_onload-expected.txt: Added.
* http/tests/preload/not_evicting_preload_at_onload.html: Added.
* platform/mac/TestExpectations: Skipping http/tests/preload/dynamic_removing_preload.html due to https://bugs.webkit.org/show_bug.cgi?id=167792

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

3 years agoStash away the ports - they will be nulled out before the cancel handlers are called
andersca@apple.com [Fri, 3 Feb 2017 21:48:23 +0000 (21:48 +0000)]
Stash away the ports - they will be nulled out before the cancel handlers are called
https://bugs.webkit.org/show_bug.cgi?id=167812

Reviewed by Geoffrey Garen.

* Platform/IPC/mac/ConnectionMac.mm:
(IPC::Connection::open):

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

3 years agoSimple line layout: Removing adjacent trailing whitespace runs should not crash.
zalan@apple.com [Fri, 3 Feb 2017 21:17:28 +0000 (21:17 +0000)]
Simple line layout: Removing adjacent trailing whitespace runs should not crash.
https://bugs.webkit.org/show_bug.cgi?id=167803
<rdar://problem/30337368>

Reviewed by Antti Koivisto.

Source/WebCore:

In case of adjacent collapsed whitespace fragments, the length of these fragments (TextFragmentIterator::TextFragment)
do not necessarily equal the length of the final runs (SimpleLineLayout::Run).
This patch removes the dependency on the length and switches over to using the position information instead.

Test: fast/text/simple-line-layout-multiple-trailingwhitespace-crash.html

* rendering/SimpleLineLayout.cpp:
(WebCore::SimpleLineLayout::LineState::appendFragmentAndCreateRunIfNeeded):
(WebCore::SimpleLineLayout::LineState::removeTrailingWhitespace):

LayoutTests:

* fast/text/simple-line-layout-multiple-trailingwhitespace-crash-expected.txt: Added.
* fast/text/simple-line-layout-multiple-trailingwhitespace-crash.html: Added.

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

3 years agoCorrect memory leak in MediaConstraints
bfulgham@apple.com [Fri, 3 Feb 2017 20:53:35 +0000 (20:53 +0000)]
Correct memory leak in MediaConstraints
https://bugs.webkit.org/show_bug.cgi?id=167744
<rdar://problem/30331444>

Reviewed by Anders Carlsson.

ConstraintHolder returns a reference to an object created by operator new. When the
returned value is assigned or stored in Vector or other containers we leak memory.
Instead, this value should just be returned as a regular object so that the return
value optimization can make sure memory is properly (and efficiently) used.

Tested by existing mediastream tests.

* platform/mediastream/MediaConstraints.h:
(WebCore::FlattenedConstraint::ConstraintHolder::create): Return by value.
(WebCore::FlattenedConstraint::ConstraintHolder::~ConstraintHolder): Don't attempt to
delete memory that was moved away.
(WebCore::FlattenedConstraint::ConstraintHolder::ConstraintHolder): Add Move constructor.

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

3 years agoFix bad assertion under HTMLTreeBuilder::processStartTagForInBody()
cdumez@apple.com [Fri, 3 Feb 2017 20:49:39 +0000 (20:49 +0000)]
Fix bad assertion under HTMLTreeBuilder::processStartTagForInBody()
https://bugs.webkit.org/show_bug.cgi?id=167799
<rdar://problem/30237241>

Reviewed by Brent Fulgham.

Source/WebCore:

Fix bad assertion under HTMLTreeBuilder::processStartTagForInBody() that was
expecting the root element to be an <html> element when parsing a <frameset>.
While this assertion is true in theory and as per the specification, it does
not hold in WebKit when parsing a DocumentFragment. This is because WebKit
has an optimization causing us to have a DocumentFragment as root element
when parsing a fragment. See the following constructor:
"HTMLTreeBuilder(HTMLDocumentParser&, DocumentFragment&, Element&, ParserContentPolicy, const HTMLParserOptions&)"

which has the following code:
"""
// https://html.spec.whatwg.org/multipage/syntax.html#parsing-html-fragments
// For efficiency, we skip step 5 ("Let root be a new html element with no attributes") and instead use the DocumentFragment as a root node.
m_tree.openElements().pushRootNode(HTMLStackItem::create(fragment));
"""

Update the assertion to expect a DocumentFragment as root element when parsing
a fragment, and keep expecting an <html> element otherwise.

Test: fast/parser/fragment-with-frameset-crash.html

* html/parser/HTMLTreeBuilder.cpp:
(WebCore::HTMLTreeBuilder::processStartTagForInBody):

LayoutTests:

Add layout test coverage. This test passes in all major browsers but used to hit
the bad assertion in WebKit debug builds.

* fast/parser/fragment-with-frameset-crash-expected.txt: Added.
* fast/parser/fragment-with-frameset-crash.html: Added.

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

3 years agoInline createReceiveSource in its two call sites
andersca@apple.com [Fri, 3 Feb 2017 20:28:40 +0000 (20:28 +0000)]
Inline createReceiveSource in its two call sites
https://bugs.webkit.org/show_bug.cgi?id=167809

Reviewed by Alex Christensen.

* Platform/IPC/mac/ConnectionMac.mm:
(IPC::Connection::open):
(IPC::createReceiveSource): Deleted.

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

3 years agoWKActionSheet should dismiss with animation when done with the sheet
wenson_hsieh@apple.com [Fri, 3 Feb 2017 20:07:49 +0000 (20:07 +0000)]
WKActionSheet should dismiss with animation when done with the sheet
https://bugs.webkit.org/show_bug.cgi?id=167804
<rdar://problem/30334861>

Reviewed by Tim Horton.

Currently, we do not dismiss the action menu when -doneWithSheet is invoked. While this is okay when the menu is
dismissed via tap (since it will be dismissed as default behavior by the popover controller) we need to manually
dismiss it if we are trying to programmatically dismiss the action sheet/menu.

* UIProcess/ios/WKActionSheet.mm:
(-[WKActionSheet presentSheetFromRect:]):
(-[WKActionSheet doneWithSheet]):
* UIProcess/ios/WKContentViewInteraction.mm:
(-[WKContentView setupInteraction]):
(-[WKContentView resignFirstResponder]):

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

3 years agoWhen OSR entering to the baseline JIT from the LLInt for a ProgramCodeBlock we can...
sbarati@apple.com [Fri, 3 Feb 2017 20:00:53 +0000 (20:00 +0000)]
When OSR entering to the baseline JIT from the LLInt for a ProgramCodeBlock we can skip compiling a lot of the program
https://bugs.webkit.org/show_bug.cgi?id=167725
<rdar://problem/30339082>

Reviewed by Michael Saboff.

We often want to baseline compile ProgramCode once we hit a loop in the LLInt.
However, some programs execute a non-trivial amount of code before the loop.
This code can never be executed again because ProgramCodeBlocks never run more
than once. We're wasting time and memory by compiling code that is unreachable
from the OSR entry destination. This patch fixes this by only compiling code
that is reachable from the OSR entry destination.

This is a speedup on Kraken/ai-astar for devices with limited CPUs (I've been
testing on devices with 2 CPUs). On ai-astar, we were spending 50-100ms compiling
a huge ProgramCodeBlock in the baseline JIT where the majority of the code
would never execute. If this compilation was kicked off on the main thread,
then we'd be stalled for a long time. If it were started on the baseline JITs
background compilation thread, we'd still waste 50-100ms in that thread, causing
all other baseline compilations to happen on the main thread.

* interpreter/Interpreter.cpp:
(JSC::Interpreter::executeProgram):
* interpreter/Interpreter.h:
* jit/JIT.cpp:
(JSC::JIT::JIT):
(JSC::JIT::privateCompileMainPass):
* jit/JIT.h:
(JSC::JIT::compile):
* jit/JITWorklist.cpp:
(JSC::JITWorklist::Plan::Plan):
(JSC::JITWorklist::Plan::compileNow):
(JSC::JITWorklist::compileLater):
(JSC::JITWorklist::compileNow):
* jit/JITWorklist.h:
* llint/LLIntSlowPaths.cpp:
(JSC::LLInt::jitCompileAndSetHeuristics):
(JSC::LLInt::LLINT_SLOW_PATH_DECL):
* runtime/Completion.cpp:
(JSC::evaluate):

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

3 years ago[Modern Media Controls] Skip back button is visible with a live broadcast video
commit-queue@webkit.org [Fri, 3 Feb 2017 19:53:37 +0000 (19:53 +0000)]
[Modern Media Controls] Skip back button is visible with a live broadcast video
https://bugs.webkit.org/show_bug.cgi?id=167793

Patch by Antoine Quint <graouts@apple.com> on 2017-02-03
Reviewed by Eric Carlson.

Source/WebCore:

We shouldn't be showing the skip back button when a live broadcast video is playing.
We now listen to the "durationchange" event to determine when we have an inifinite-duration
video and disable the skip button in that case.

Test: http/tests/media/modern-media-controls/skip-back-support/skip-back-support-live-broadcast.html

* Modules/modern-media-controls/media/skip-back-support.js:
(SkipBackSupport.prototype.get mediaEvents):
(SkipBackSupport.prototype.syncControl):
(SkipBackSupport):

LayoutTests:

Add a new test to check that a live broadcast video doesn't show the skip back button.

* http/tests/media/modern-media-controls/skip-back-support/skip-back-support-live-broadcast-expected.txt: Added.
* http/tests/media/modern-media-controls/skip-back-support/skip-back-support-live-broadcast.html: Added.

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

3 years agoWeb Inspector: Add stroke-linecap property values to CSS autocompletion
mattbaker@apple.com [Fri, 3 Feb 2017 19:08:07 +0000 (19:08 +0000)]
Web Inspector: Add stroke-linecap property values to CSS autocompletion
https://bugs.webkit.org/show_bug.cgi?id=167778

Reviewed by Joseph Pecoraro.

* UserInterface/Models/CSSKeywordCompletions.js:
Add autocompletion values for fill-rule and stroke-linecap.

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

3 years agoDoc generation failure in WebKitSecurityOrigin
commit-queue@webkit.org [Fri, 3 Feb 2017 18:45:27 +0000 (18:45 +0000)]
Doc generation failure in WebKitSecurityOrigin
https://bugs.webkit.org/show_bug.cgi?id=167796

Patch by Olivier Blin <olivier.blin@softathome.com> on 2017-02-03
Reviewed by Michael Catanzaro.

* UIProcess/API/gtk/WebKitSecurityOrigin.cpp:
warning: Free-form return value description in webkit_security_origin_get_protocol. Use `Returns:' to avoid ambiguities.

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

3 years agoURLParser: implement forbidden host code points for non-special URLs
achristensen@apple.com [Fri, 3 Feb 2017 17:44:30 +0000 (17:44 +0000)]
URLParser: implement forbidden host code points for non-special URLs
https://bugs.webkit.org/show_bug.cgi?id=167779

Reviewed by Chris Dumez.

LayoutTests/imported/w3c:

* web-platform-tests/url/a-element-expected.txt:
* web-platform-tests/url/a-element-xhtml-expected.txt:
* web-platform-tests/url/url-constructor-expected.txt:
* web-platform-tests/url/url-setters-expected.txt:

Source/WebCore:

Covered by newly passing web platform tests.

* platform/URLParser.cpp:
(WebCore::isC0Control):
(WebCore::isForbiddenHostCodePoint):
(WebCore::URLParser::parseHostAndPort):
In non-special URL hosts such as customprotocol://strange%host
don't accept characters that are part of the URL grammar and would be forbidden
in a special URL host, like https://not[allowed
This was recently added to the spec in https://github.com/whatwg/url/issues/214

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

3 years agoThe CSS property -webkit-text-stroke is not applied on captions.
pvollan@apple.com [Fri, 3 Feb 2017 17:39:34 +0000 (17:39 +0000)]
The CSS property -webkit-text-stroke is not applied on captions.
https://bugs.webkit.org/show_bug.cgi?id=167687

Reviewed by Brent Fulgham.

Source/WebCore:

Add style to list of valid properties for cue.

Test: media/track/track-css-stroke-cues.html

* css/StyleResolver.cpp:
(WebCore::StyleResolver::isValidCueStyleProperty):

LayoutTests:

* media/track/track-css-stroke-cues-expected.txt: Added.
* media/track/track-css-stroke-cues.html: Added.

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

3 years agoAlign URL setters with spec for URLs that cannot be a base URL
achristensen@apple.com [Fri, 3 Feb 2017 17:21:43 +0000 (17:21 +0000)]
Align URL setters with spec for URLs that cannot be a base URL
https://bugs.webkit.org/show_bug.cgi?id=167783

Reviewed by Chris Dumez.

LayoutTests/imported/w3c:

* web-platform-tests/url/url-setters-expected.txt:

Source/WebCore:

Setting things like credentials on mailto URLs doesn't make sense.
It's forbidden by the spec.

Covered by newly passing web platform tests.

* html/URLUtils.h:
(WebCore::URLUtils<T>::setUsername):
(WebCore::URLUtils<T>::setPassword):
(WebCore::URLUtils<T>::setHost):
(WebCore::URLUtils<T>::setHostname):
(WebCore::URLUtils<T>::setPort):
(WebCore::URLUtils<T>::setPathname):
* platform/URL.cpp:
(WebCore::URL::serialize):
* platform/URL.h:
(WebCore::URL::cannotBeABaseURL):

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

3 years ago[CMake] RelWithDebInfo builds are super broken at runtime
annulen@yandex.ru [Fri, 3 Feb 2017 17:21:21 +0000 (17:21 +0000)]
[CMake] RelWithDebInfo builds are super broken at runtime
https://bugs.webkit.org/show_bug.cgi?id=163897

Reviewed by Michael Catanzaro.

* Source/cmake/OptionsCommon.cmake: Apply -fno-strict-aliasing,
-fno-exceptions, and -fno-rtti flags to all configurations,
instead of only "Release".

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

3 years ago[Mac] Add classes to manage audio samples
eric.carlson@apple.com [Fri, 3 Feb 2017 17:11:16 +0000 (17:11 +0000)]
[Mac] Add classes to manage audio samples
https://bugs.webkit.org/show_bug.cgi?id=167739

Reviewed by Jer Noble.

No new tests, this code isn't used yet.

* WebCore.xcodeproj/project.pbxproj:
* platform/audio/mac/AudioSampleBufferList.cpp: Added.
(WebCore::AudioSampleBufferList::create):
(WebCore::AudioSampleBufferList::AudioSampleBufferList):
(WebCore::AudioSampleBufferList::~AudioSampleBufferList):
(WebCore::AudioSampleBufferList::setSampleCount):
(WebCore::AudioSampleBufferList::applyGain):
(WebCore::AudioSampleBufferList::mixFrom):
(WebCore::AudioSampleBufferList::copyFrom):
(WebCore::AudioSampleBufferList::copyTo):
(WebCore::AudioSampleBufferList::reset):
(WebCore::AudioSampleBufferList::zero):
(WebCore::AudioSampleBufferList::zeroABL):
(WebCore::AudioSampleBufferList::convertInput):
(WebCore::AudioSampleBufferList::audioConverterCallback):
(WebCore::AudioSampleBufferList::configureBufferListForStream):
* platform/audio/mac/AudioSampleBufferList.h: Added.
(WebCore::AudioSampleBufferList::streamDescription):
(WebCore::AudioSampleBufferList::bufferList):
(WebCore::AudioSampleBufferList::sampleCapacity):
(WebCore::AudioSampleBufferList::sampleCount):
(WebCore::AudioSampleBufferList::timestamp):
(WebCore::AudioSampleBufferList::hostTime):
(WebCore::AudioSampleBufferList::setTimes):
(WebCore::AudioSampleBufferList::audioBufferListSizeForStream):
* platform/audio/mac/AudioSampleDataSource.cpp: Added.
(WebCore::AudioSampleDataSource::create):
(WebCore::AudioSampleDataSource::AudioSampleDataSource):
(WebCore::AudioSampleDataSource::~AudioSampleDataSource):
(WebCore::AudioSampleDataSource::setPaused):
(WebCore::AudioSampleDataSource::setupConverter):
(WebCore::AudioSampleDataSource::setInputFormat):
(WebCore::AudioSampleDataSource::setOutputFormat):
(WebCore::AudioSampleDataSource::hostTime):
(WebCore::AudioSampleDataSource::pushSamplesInternal):
(WebCore::AudioSampleDataSource::pushSamples):
(WebCore::AudioSampleDataSource::pullSamplesInternal):
(WebCore::AudioSampleDataSource::pullSamples):
* platform/audio/mac/AudioSampleDataSource.h: Added.
(WebCore::AudioSampleDataSource::setVolume):
(WebCore::AudioSampleDataSource::volume):
(WebCore::AudioSampleDataSource::setMuted):
(WebCore::AudioSampleDataSource::muted):

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

3 years agoUnreviewed. Fix the buidl after r211631.
carlosgc@webkit.org [Fri, 3 Feb 2017 14:21:28 +0000 (14:21 +0000)]
Unreviewed. Fix the buidl after r211631.

I added the OS(LINUX) ifdef to the wrong file by mistake.

* page/ResourceUsageThread.h:
* page/linux/ResourceUsageThreadLinux.cpp:

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

3 years agoUnreviewed typo fix after r211630.
ossy@webkit.org [Fri, 3 Feb 2017 13:04:50 +0000 (13:04 +0000)]
Unreviewed typo fix after r211630.

* CMakeLists.txt:

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

3 years ago[GTK] Add initial implementation of resource usage overlay
carlosgc@webkit.org [Fri, 3 Feb 2017 13:03:33 +0000 (13:03 +0000)]
[GTK] Add initial implementation of resource usage overlay
https://bugs.webkit.org/show_bug.cgi?id=167731

Reviewed by Michael Catanzaro.

.:

Enable RESOURCE_USAGE.

* Source/cmake/OptionsGTK.cmake:

Source/JavaScriptCore:

Also expose nextFireTime() for GTK+ port.

* heap/GCActivityCallback.cpp:
(JSC::GCActivityCallback::scheduleTimer):
(JSC::GCActivityCallback::cancelTimer):
* heap/GCActivityCallback.h:

Source/WebCore:

Add an implementation of ResourceUsageOverlay and ResourceUsageThread for Linux systems.

* PlatformGTK.cmake: Add new new files to compilation.
* page/Page.cpp:
(WebCore::Page::setResourceUsageOverlayVisible): Do not create the page overlay if accelerated compositing is
not enabled.
* page/ResourceUsageOverlay.h:
* page/linux/ResourceUsageOverlayLinux.cpp: Added.
(WebCore::cpuUsageString):
(WebCore::formatByteNumber):
(WebCore::gcTimerString):
(WebCore::ResourceUsageOverlay::platformInitialize):
(WebCore::ResourceUsageOverlay::platformDestroy):
* page/linux/ResourceUsageThreadLinux.cpp: Added.
(WebCore::cpuPeriod):
(WebCore::cpuUsage):
(WebCore::ResourceUsageThread::platformThreadBody):

Source/WebKit2:

Toggle the resource usage overlay visibility by pressing CTRL + Shift + G. Only available when building with
developer mode enabled.

* UIProcess/API/gtk/WebKitWebViewBase.cpp:
(webkitWebViewBaseKeyPressEvent):

Source/WTF:

Enable RESOURCE_USAGE for GTK+ port too.

* wtf/Platform.h:

LayoutTests:

Unskip inpector tests depending on RESOURCE_USAGE.

* platform/gtk/TestExpectations:

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

3 years ago[cmake] Unreviewed AArch64 buildfix after r211603.
ossy@webkit.org [Fri, 3 Feb 2017 12:56:20 +0000 (12:56 +0000)]
[cmake] Unreviewed AArch64 buildfix after r211603.
https://bugs.webkit.org/show_bug.cgi?id=167714

* CMakeLists.txt:

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

3 years agoREGRESSION(r211486) [GTK] The MiniBrowser doesn't work anymore.
commit-queue@webkit.org [Fri, 3 Feb 2017 12:40:28 +0000 (12:40 +0000)]
REGRESSION(r211486) [GTK] The MiniBrowser doesn't work anymore.
https://bugs.webkit.org/show_bug.cgi?id=167776

Patch by Carlos Garcia Campos <cgarcia@igalia.com> on 2017-02-03
Reviewed by Yusuke Suzuki.

Since r211486 JSC::initializeThreading() also initializes the main run loop. It would be possible that RunLoop
need to know if it's the main one or not in its constructor, like the GLib impementation does, so we need to
ensure that WTF threading and MainThread are initialized before creating the main RunLoop. This is a quick fix
because the regression made impossible to load anything in a WebView, but I think we should review all the
initialize methods, what they do and how they are called in all the code.

* Shared/WebKit2Initialize.cpp:
(WebKit::InitializeWebKit2): Call WTF::initializeThreading() and WTF::initializeMainThread() before
JSC::initializeThreading() and do not call RunLoop::initializeMainRunLoop() because it's already called by JSC.

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

3 years ago[Mac][cmake] One more unreviewed speculative buildfix after r211403.
ossy@webkit.org [Fri, 3 Feb 2017 12:21:56 +0000 (12:21 +0000)]
[Mac][cmake] One more unreviewed speculative buildfix after r211403.
https://bugs.webkit.org/show_bug.cgi?id=165478

* UIProcess/API/Cocoa/WKWebView.mm: WebSQLiteDatabaseTrackerClient.h is an iOS specific
header in platform/ios directory which shouldn't and can't be included on non iOS build.

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

3 years ago[GStreamer] Store preloaded media in webkit's cache
eocanha@igalia.com [Fri, 3 Feb 2017 12:03:10 +0000 (12:03 +0000)]
[GStreamer] Store preloaded media in webkit's cache
https://bugs.webkit.org/show_bug.cgi?id=119477

Reviewed by Xabier Rodriguez-Calvar.

Files cached on disk by MediaPlayerPrivateGStreamer are deleted only when the player is closed. If the
WebProcess crashed, they're just left there in the cache directory. This patch changes the location
of those temporary files to a proper temporary directory (/var/tmp, as those files aren't actually
reusable, so they don't belong to a cache directory, and /tmp is a bad place because it's RAM-based on
some distros), unlinks (deletes) them right after creation and also deletes any other stalled temporary
file on the old legacy cache directory.

There's no API in GstPlaybin to control the temporary file location, so we do it manually by locating
the GstDownloadBuffer element in the pipeline as soon as it's created, reconfiguring it with the right
temporary file path and deleting the file as soon as it's created.

* platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.cpp:
(WebCore::MediaPlayerPrivateGStreamer::~MediaPlayerPrivateGStreamer): Stop listening to element-added.
(WebCore::MediaPlayerPrivateGStreamer::uriDecodeBinElementAddedCallback): Look for GstDownloadBuffer.
(WebCore::MediaPlayerPrivateGStreamer::downloadBufferFileCreatedCallback): Remove the file after creation.
(WebCore::MediaPlayerPrivateGStreamer::purgeOldDownloadFiles): Delete legacy files.
(WebCore::MediaPlayerPrivateGStreamer::sourceChanged): Listen to element-added signals on GstUriDecodeBin.
* platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.h: New reference to GstDownloadBuffer.

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

3 years ago[Mac][cmake] Unreviewed speculative buildfix after r211403.
ossy@webkit.org [Fri, 3 Feb 2017 11:53:26 +0000 (11:53 +0000)]
[Mac][cmake] Unreviewed speculative buildfix after r211403.
https://bugs.webkit.org/show_bug.cgi?id=165478

* UIProcess/API/Cocoa/WKWebView.mm: WebBackgroundTaskController.h is an iOS specific
header in platform/ios directory which shouldn't and can't be included on non iOS build.

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

3 years agoWebContent crash when pasting into input fields at com.apple.WebCore: WebCore::Resour...
antti@apple.com [Fri, 3 Feb 2017 11:12:42 +0000 (11:12 +0000)]
WebContent crash when pasting into input fields at com.apple.WebCore: WebCore::ResourceRequestBase::url const + 9
https://bugs.webkit.org/show_bug.cgi?id=167787
rdar://problem/29168795

Reviewed by Andreas Kling.

No test, don't know how to get here.

* page/animation/CSSPropertyAnimation.cpp:
(WebCore::crossfadeBlend): Null check.

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

3 years agoJSDOMWindowBase.cpp doesn't build if the JIT is disabled
berto@igalia.com [Fri, 3 Feb 2017 10:23:59 +0000 (10:23 +0000)]
JSDOMWindowBase.cpp doesn't build if the JIT is disabled
https://bugs.webkit.org/show_bug.cgi?id=167785

Reviewed by Carlos Garcia Campos.

r211403 moved GetCallerGlobalObjectFunctor from JSDOMBinding.cpp
to JSDOMWindowBase.cpp, but forgot to include bytecode/CodeBlock.h
in the latter file.

This breaks the build if the JIT is disabled because the headers
that would include ClodeBlock.h indirectly are guarded by
ENABLE(JIT).

* bindings/js/JSDOMWindowBase.cpp:

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

3 years agoLayoutTest media/modern-media-controls/tracks-panel/tracks-panel-hide-click-outside...
commit-queue@webkit.org [Fri, 3 Feb 2017 09:05:15 +0000 (09:05 +0000)]
LayoutTest media/modern-media-controls/tracks-panel/tracks-panel-hide-click-outside.html is a flaky timeout
https://bugs.webkit.org/show_bug.cgi?id=165290

Unreviewed test gardening.

Patch by Antoine Quint <graouts@apple.com> on 2017-02-03

* platform/mac/TestExpectations:

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

3 years ago[Mac] In-process memory pressure monitor for WebContent processes AKA websam
akling@apple.com [Fri, 3 Feb 2017 07:25:24 +0000 (07:25 +0000)]
[Mac] In-process memory pressure monitor for WebContent processes AKA websam
<https://webkit.org/b/167491>
<rdar://problem/30116072>

Reviewed by Antti Koivisto.

Source/JavaScriptCore:

Remove the sloppy "max live heap size" mechanism from JSC in favor of the new
WebCore-side memory footprint monitor.

* heap/Heap.cpp:
(JSC::Heap::updateAllocationLimits):
(JSC::Heap::didExceedMaxLiveSize): Deleted.
* heap/Heap.h:
(JSC::Heap::setMaxLiveSize): Deleted.

Source/WebCore:

Add a new timer-based memory pressure monitor that checks the process memory
footprint every 30 seconds and reacts to changes by setting a MemoryUsagePolicy.

There are four MemoryUsagePolicy values:

    - Unrestricted (below 1GB)
    - Conservative (above 1GB)
    - Strict (above 2GB)
    - Panic (above 4GB, or 3GB if 32-bit)

For Strict and above, the old-style "isUnderMemoryPressure()" API will return true.

Transitioning to a higher policy will cause memory pressure handlers to run:

At Strict, we run the "non-critical" memory pressure handler, then carry on.

At Panic, we run the "critical" memory pressure handler. If that fails to recover
enough memory to bring us back below 4GB, we may kill the process:

A process is eligible to get killed for using too much memory if:

    - It's not visible on screen (i.e it's a background tab.)
    - It's not playing audio.
    - It has not performed a main frame navigation in the last hour.

Before killing the process, an exit-time callback will run. This patch installs such
a callback that prints out some time-of-death statistics about C++ and JavaScript memory
usage to hopefully help understand what was soaking up all the memory.

* bindings/js/CommonVM.cpp:
(WebCore::commonVMSlow):
* loader/FrameLoader.cpp:
(WebCore::FrameLoader::setState):
* page/MainFrame.cpp:
(WebCore::MainFrame::didCompleteLoad):
* page/MainFrame.h:
* page/MemoryRelease.cpp:
(WebCore::pageCount):
(WebCore::logMemoryStatisticsAtTimeOfDeath):
(WebCore::didExceedMemoryLimitAndFailedToRecover):
(WebCore::processIsEligibleForMemoryKill):
* page/MemoryRelease.h:
* page/ResourceUsageThread.h:
* page/cocoa/ResourceUsageThreadCocoa.mm:
(WebCore::vmPageSize):
* platform/MemoryPressureHandler.cpp:
(WebCore::MemoryPressureHandler::MemoryPressureHandler):
(WebCore::MemoryPressureHandler::setShouldUsePeriodicMemoryMonitor):
(WebCore::toString):
(WebCore::thresholdForPolicy):
(WebCore::policyForFootprint):
(WebCore::MemoryPressureHandler::measurementTimerFired):
* platform/MemoryPressureHandler.h:
(WebCore::MemoryPressureHandler::setMemoryKillCallback):
(WebCore::MemoryPressureHandler::setProcessIsEligibleForMemoryKillCallback):
(WebCore::MemoryPressureHandler::isUnderMemoryPressure):

Source/WebKit2:

Enable the in-process memory monitor for WebContent processes on macOS 10.12+

* WebProcess/WebProcess.cpp:
(WebKit::WebProcess::initializeWebProcess):

Source/WTF:

Add a WTF helper function for getting the current process's memory footprint.

* WTF.xcodeproj/project.pbxproj:
* wtf/CMakeLists.txt:
* wtf/MemoryFootprint.cpp:
(WTF::memoryFootprint):
* wtf/MemoryFootprint.h:

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

3 years agoURLParser: Fix parsing invalid IPv4 addresses with non-ASCII characters
achristensen@apple.com [Fri, 3 Feb 2017 06:30:30 +0000 (06:30 +0000)]
URLParser: Fix parsing invalid IPv4 addresses with non-ASCII characters
https://bugs.webkit.org/show_bug.cgi?id=167773
<rdar://problem/30221102>

Reviewed by Ryosuke Niwa.

Source/WebCore:

If an invalid IPv4 address contains the first syntaxViolation (difference between input and canonicalized URL),
an iterator is used to calculate how far we have parsed in the input string to copy all the syntax-violation-free
characters into a Vector. If a URL contains only ASCII that doesn't contain anything percent-encoded in the host,
there is a fast path to parse ASCII hosts.  All my existing invalid IPv4 tests followed this path.
If there is a non-ASCII character, we need to use an iterator to the original string instead of an iterator
to the string after converting the input string's host to ASCII.

Covered by a new API test which used to RELEASE_ASSERT.

* platform/URLParser.cpp:
(WebCore::URLParser::parseIPv4Host):
(WebCore::URLParser::parseIPv6Host):
(WebCore::URLParser::parseHostAndPort):
* platform/URLParser.h:

Tools:

* TestWebKitAPI/Tests/WebCore/URLParser.cpp:
(TestWebKitAPI::TEST_F):

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

3 years agoUpdate URL web platform tests
achristensen@apple.com [Fri, 3 Feb 2017 06:20:56 +0000 (06:20 +0000)]
Update URL web platform tests
https://bugs.webkit.org/show_bug.cgi?id=167777

Reviewed by Ryosuke Niwa.

* web-platform-tests/url/a-element-expected.txt:
* web-platform-tests/url/a-element-origin-expected.txt:
* web-platform-tests/url/a-element-origin-xhtml-expected.txt:
* web-platform-tests/url/a-element-origin-xhtml.xhtml:
* web-platform-tests/url/a-element-origin.html:
* web-platform-tests/url/a-element-xhtml-expected.txt:
* web-platform-tests/url/a-element-xhtml.xhtml:
* web-platform-tests/url/a-element.html:
* web-platform-tests/url/setters_tests.json:
* web-platform-tests/url/url-constructor-expected.txt:
* web-platform-tests/url/url-origin-expected.txt:
* web-platform-tests/url/url-setters-expected.txt:
* web-platform-tests/url/urlencoded-parser-expected.txt: Added.
* web-platform-tests/url/urlencoded-parser.html: Added.
* web-platform-tests/url/urlsearchparams-constructor-expected.txt:
* web-platform-tests/url/urlsearchparams-constructor.html:
* web-platform-tests/url/urlsearchparams-sort-expected.txt:
* web-platform-tests/url/urlsearchparams-sort.html:
* web-platform-tests/url/urltestdata.json:

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

3 years agoMultiple HTTP tests fail with Apache 2.4.25
ap@apple.com [Fri, 3 Feb 2017 01:46:25 +0000 (01:46 +0000)]
Multiple HTTP tests fail with Apache 2.4.25
https://bugs.webkit.org/show_bug.cgi?id=167678
<rdar://problem/30060142>

Reviewed by Sam Weinig.

Newer versions of Apache have a security fix where they generate an internal server
error upon seeing an invalid HTTP header field. There is an opt-out configuration
option which didn't quite work in my testing, but regardless, we should only use
"nph-" CGIs for invalid responses. This is how Apache knows that it shouldn't
attempt to parse the response.

This also uncovered a test bug.

* http/tests/cache/disk-cache/resources/cache-test.js: (generateTestURL):
Without escaping, we were getting a broken response in attachment tests:
   Content-Disposition: attachment
    filename: "f.txt"
Note how ";" turned into a newline.

* http/tests/misc/non-utf8-header-name-expected.txt: Removed.
* http/tests/misc/non-utf8-header-name.php: Removed.
* http/tests/misc/nph-non-utf8-header-name-expected.txt: Copied from LayoutTests/http/tests/misc/non-utf8-header-name-expected.txt.
* http/tests/misc/nph-non-utf8-header-name.pl: Copied from LayoutTests/http/tests/misc/non-utf8-header-name.php.
* http/tests/preload/download_resources_from_invalid_headers.html:
* http/tests/preload/resources/invalid_resources_from_header.php: Removed.
* http/tests/preload/resources/nph-invalid_resources_from_header.pl: Copied from LayoutTests/http/tests/preload/resources/invalid_resources_from_header.php.
* http/tests/security/contentSecurityPolicy/directive-parsing-01.html:
* http/tests/security/contentSecurityPolicy/directive-parsing-02.html:
* http/tests/security/contentSecurityPolicy/directive-parsing-03.html:
* http/tests/security/contentSecurityPolicy/directive-parsing-04.html:
* http/tests/security/contentSecurityPolicy/directive-parsing-05.html:
* http/tests/security/contentSecurityPolicy/resources/echo-script-src.pl: Removed.
* http/tests/security/contentSecurityPolicy/resources/multiple-iframe-test.js:
* http/tests/security/contentSecurityPolicy/resources/nph-echo-script-src.pl: Copied from LayoutTests/http/tests/security/contentSecurityPolicy/resources/echo-script-src.pl.
* http/tests/security/contentSecurityPolicy/script-loads-with-img-src.html:
* http/tests/security/contentSecurityPolicy/script-src-none.html:
* http/tests/security/contentSecurityPolicy/script-src-self-blocked-01.html:
* http/tests/security/contentSecurityPolicy/script-src-self-blocked-02.html:
* http/tests/security/contentSecurityPolicy/script-src-self-blocked-03.html:
* http/tests/security/contentSecurityPolicy/script-src-self.html:
* http/tests/security/contentSecurityPolicy/script-src-star-cross-scheme.html:
Changed scripts that are used to generate invalid responses to "nph-" ones.

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

3 years agoCrashTracer: [USER] com.apple.WebKit.WebContent at com.apple.WebCore: WebCore::URL...
wenson_hsieh@apple.com [Fri, 3 Feb 2017 01:01:32 +0000 (01:01 +0000)]
CrashTracer: [USER] com.apple.WebKit.WebContent at com.apple.WebCore: WebCore::URL::host const + 9
https://bugs.webkit.org/show_bug.cgi?id=167766
<rdar://problem/30132707>

Reviewed by Chris Dumez.

The mainframe's document pointer may be null when tearing down a page upon navigation to a page that is in the
page cache. If this triggers a GC sweep, we will attempt to reload touch bar media controls, which (as a part of
the media controller heuristic) checks the mainframe's document URL to see if quirks should be enabled. This
assumes that the mainframe's document exists, which is not a safe assumption if page navigation is occurring. As
such, we need a null check for the mainframe's document in needsPlaybackControlsManagerQuirk().

No test, as we were unable to reproduce this crash.

* html/HTMLMediaElement.cpp:
(WebCore::needsPlaybackControlsManagerQuirk):

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

3 years agoSuspend SVG animations in hidden pages
cdumez@apple.com [Fri, 3 Feb 2017 01:00:30 +0000 (01:00 +0000)]
Suspend SVG animations in hidden pages
https://bugs.webkit.org/show_bug.cgi?id=167763
<rdar://problem/29986313>

Reviewed by Simon Fraser.

Source/WebCore:

Suspend SVG animations in hidden pages to save power, similarly to what
we already do for another types of animations.

Test: svg/animations/animations-paused-page-non-visible.html

* page/Page.cpp:
(WebCore::setSVGAnimationSuspended):
(WebCore::Page::setIsVisibleInternal):
* svg/SVGDocumentExtensions.cpp:
(WebCore::SVGDocumentExtensions::pauseAnimations):
(WebCore::SVGDocumentExtensions::unpauseAnimations):
* svg/SVGDocumentExtensions.h:
(WebCore::SVGDocumentExtensions::areAnimationsPaused):
* testing/Internals.cpp:
(WebCore::Internals::areSVGAnimationsPaused):
* testing/Internals.h:
* testing/Internals.idl:

LayoutTests:

Add layout test coverage.

* svg/animations/animations-paused-page-non-visible-expected.txt: Added.
* svg/animations/animations-paused-page-non-visible.html: Added.

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

3 years agoUnreviewed, rolling out r211596 and r211605.
ryanhaddad@apple.com [Fri, 3 Feb 2017 00:35:30 +0000 (00:35 +0000)]
Unreviewed, rolling out r211596 and r211605.
https://bugs.webkit.org/show_bug.cgi?id=167767

This change broke certain build configurations (Requested by
ryanhaddad on #webkit).

Reverted changesets:

"[Mac] Add classes to manage audio samples"
https://bugs.webkit.org/show_bug.cgi?id=167739
http://trac.webkit.org/changeset/211596

"Unreviewed speculative build fix."
http://trac.webkit.org/changeset/211605

Patch by Commit Queue <commit-queue@webkit.org> on 2017-02-02

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

3 years agoAdd a SIGILL crash analyzer to make debugging SIGILLs easier.
mark.lam@apple.com [Fri, 3 Feb 2017 00:26:00 +0000 (00:26 +0000)]
Add a SIGILL crash analyzer to make debugging SIGILLs easier.
https://bugs.webkit.org/show_bug.cgi?id=167714
<rdar://problem/30318237>

Not reviewed.

Build fix for CLOOP build.

* tools/VMInspector.cpp:

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

3 years agoWeb Inspector: can't jump from Search Tab result to see resource in other tabs (Resou...
commit-queue@webkit.org [Fri, 3 Feb 2017 00:22:49 +0000 (00:22 +0000)]
Web Inspector: can't jump from Search Tab result to see resource in other tabs (Resource, Debugger, Network)
https://bugs.webkit.org/show_bug.cgi?id=167072

Patch by Devin Rousso <dcrousso+webkit@gmail.com> on 2017-02-02
Reviewed by Timothy Hatcher.

* UserInterface/Base/Main.js:
(WebInspector.tabContentViewForRepresentedObject):
(WebInspector.showRepresentedObject):
(WebInspector.showMainFrameDOMTree):
(WebInspector.showSourceCodeForFrame):
(WebInspector.showSourceCode):
(WebInspector.showSourceCodeLocation):
(WebInspector.showOriginalUnformattedSourceCodeLocation):
(WebInspector.showOriginalOrFormattedSourceCodeLocation):
(WebInspector.showOriginalOrFormattedSourceCodeTextRange):
(WebInspector.showResourceRequest):
Rework parameters to add optional `options` dictionary that can be used to indicate
additional functionality.

* UserInterface/Views/TabBrowser.js:
(WebInspector.TabBrowser.prototype.bestTabContentViewForRepresentedObject):
Ignore instances of SearchTabContentView as it can display content views for all types of
searchable data.  Determined by a newly added optional `options` parameter.

* UserInterface/Base/Utilities.js:
(Object.shallowMerge):
Merges the keys of two objects into a new one.

* UserInterface/Views/ComputedStyleDetailsPanel.js:
(WebInspector.ComputedStyleDetailsPanel.prototype._goToRegionFlowArrowWasClicked):
(WebInspector.ComputedStyleDetailsPanel.prototype._goToContentFlowArrowWasClicked):

* UserInterface/Views/SearchSidebarPanel.js:
(WebInspector.SearchSidebarPanel.prototype.performSearch.createTreeElementForMatchObject):
(WebInspector.SearchSidebarPanel.prototype.performSearch.resourceCallback):
(WebInspector.SearchSidebarPanel.prototype.performSearch.resourcesCallback):
(WebInspector.SearchSidebarPanel.prototype.performSearch.searchScripts.scriptCallback):
(WebInspector.SearchSidebarPanel.prototype.performSearch.searchScripts):
(WebInspector.SearchSidebarPanel.prototype.performSearch.domSearchResults):
(WebInspector.SearchSidebarPanel.prototype.performSearch.domCallback):
(WebInspector.SearchSidebarPanel.prototype.performSearch):
(WebInspector.SearchSidebarPanel.prototype._treeElementDoubleClick):
* UserInterface/Views/TreeElement.js:
(WebInspector.TreeElement.treeElementDoubleClicked):
Add an event dispatch whenever a TreeElement is double clicked via the `dblclick` event.

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

3 years agoBuild fix after r211602
achristensen@apple.com [Fri, 3 Feb 2017 00:15:18 +0000 (00:15 +0000)]
Build fix after r211602
https://bugs.webkit.org/show_bug.cgi?id=167758

* Source/Makefile:
Don't build libwebrtc by default.  It's not used yet anyway.

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

3 years agoRemove check for SkipSafariExecutableEntitlementChecks
ap@apple.com [Fri, 3 Feb 2017 00:09:08 +0000 (00:09 +0000)]
Remove check for SkipSafariExecutableEntitlementChecks
https://bugs.webkit.org/show_bug.cgi?id=167762
rdar://problem/22480673

Reviewed by Dan Bernstein.

* Scripts/webkitdirs.pm:
(safariPathFromSafariBundle):
(skipSafariExecutableEntitlementChecks): Deleted.

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

3 years agoUnreviewed speculative build fix.
ryanhaddad@apple.com [Fri, 3 Feb 2017 00:05:00 +0000 (00:05 +0000)]
Unreviewed speculative build fix.

* platform/audio/mac/AudioSampleDataSource.cpp:
(WebCore::AudioSampleDataSource::setupConverter):
(WebCore::AudioSampleDataSource::pushSamples):

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

3 years agoUnreviewed, rolling out r211535, r211566, and r211568.
commit-queue@webkit.org [Thu, 2 Feb 2017 23:39:57 +0000 (23:39 +0000)]
Unreviewed, rolling out r211535, r211566, and r211568.
https://bugs.webkit.org/show_bug.cgi?id=167765

Causing timeouts? (Requested by andersca_ on #webkit).

Reverted changesets:

"IPC::Connection receive ports should be guarded"
https://bugs.webkit.org/show_bug.cgi?id=167704
http://trac.webkit.org/changeset/211535

"<rdar://problem/30323148> Webkit Nightly on 10.10 broken"
http://trac.webkit.org/changeset/211566

"<rdar://problem/30323148> Webkit Nightly on 10.10 broken"
http://trac.webkit.org/changeset/211568

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

3 years agoAdd a SIGILL crash analyzer to make debugging SIGILLs easier.
mark.lam@apple.com [Thu, 2 Feb 2017 23:32:36 +0000 (23:32 +0000)]
Add a SIGILL crash analyzer to make debugging SIGILLs easier.
https://bugs.webkit.org/show_bug.cgi?id=167714
<rdar://problem/30318237>

Reviewed by Filip Pizlo.

Source/JavaScriptCore:

The current implementation is only for X86_64 and ARM64 on OS(DARWIN).  The
analyzer is not enabled for all other ports.

* CMakeLists.txt:
* JavaScriptCore.xcodeproj/project.pbxproj:
* API/JSVirtualMachine.mm:
* assembler/ARM64Assembler.h:
(JSC::ARM64Assembler::illegalInstruction):
* assembler/MacroAssemblerARM64.h:
(JSC::MacroAssemblerARM64::illegalInstruction):
* assembler/MacroAssemblerX86Common.h:
(JSC::MacroAssemblerX86Common::illegalInstruction):
* assembler/X86Assembler.h:
(JSC::X86Assembler::illegalInstruction):
* heap/Heap.cpp:
(JSC::Heap::forEachCodeBlockIgnoringJITPlansImpl):
* heap/Heap.h:
* heap/HeapInlines.h:
(JSC::Heap::forEachCodeBlockIgnoringJITPlans):
* runtime/Options.cpp:
(JSC::Options::isAvailable):
(JSC::recomputeDependentOptions):
* runtime/Options.h:
* runtime/VM.cpp:
(JSC::VM::VM):
(JSC::VM::~VM):
* runtime/VM.h:
* tools/SigillCrashAnalyzer.cpp: Added.
(JSC::SignalContext::SignalContext):
(JSC::SignalContext::dump):
(JSC::handleCrash):
(JSC::initializeCrashHandler):
(JSC::ensureSigillCrashAnalyzer):
(JSC::SigillCrashAnalyzer::analyze):
(JSC::SigillCrashAnalyzer::dumpCodeBlock):
* tools/SigillCrashAnalyzer.h: Added.
* tools/VMInspector.cpp: Added.
(JSC::VMInspector::instance):
(JSC::VMInspector::add):
(JSC::VMInspector::remove):
(JSC::ensureIsSafeToLock):
* tools/VMInspector.h: Added.
(JSC::VMInspector::iterate):

Source/WTF:

* wtf/StdLibExtras.h:

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

3 years agoBuild libwebrtc and dependencies with Xcode
achristensen@apple.com [Thu, 2 Feb 2017 23:31:02 +0000 (23:31 +0000)]
Build libwebrtc and dependencies with Xcode
https://bugs.webkit.org/show_bug.cgi?id=167758

Reviewed by Dean Jackson.

Source/ThirdParty/libwebrtc:

* Configurations: Added.
* Configurations/Base.xcconfig: Added.
* Configurations/DebugRelease.xcconfig: Added.
* Configurations/boringssl.xcconfig: Added.
* Configurations/libwebrtc.xcconfig: Added.
* Configurations/opus.xcconfig: Added.
* libwebrtc.xcodeproj/project.pbxproj:

Source/WebCore:

* WebCore.xcodeproj/project.pbxproj:

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

3 years agoDon't attempt wide gammut on older OSes
megan_gardner@apple.com [Thu, 2 Feb 2017 23:21:34 +0000 (23:21 +0000)]
Don't attempt wide gammut on older OSes
https://bugs.webkit.org/show_bug.cgi?id=167754
<rdar://problem/29931587>

Reviewed by Tim Horton.

We need to guard our extended color checks the same way throughout the code, or we will attempt to set up
support for wide gamut partially, which causes crashes when using sharable bitmap.

* WebProcess/WebCoreSupport/mac/WebDragClientMac.mm:
(WebKit::convertImageToBitmap):
* WebProcess/WebPage/ios/WebPageIOS.mm:
(WebKit::WebPage::getPositionInformation):

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

3 years ago{}.toString.call(crossOriginWindow) should return "[object Object]"
cdumez@apple.com [Thu, 2 Feb 2017 23:18:34 +0000 (23:18 +0000)]
{}.toString.call(crossOriginWindow) should return "[object Object]"
https://bugs.webkit.org/show_bug.cgi?id=167701
<rdar://problem/30330797>

Reviewed by Keith Miller.

LayoutTests/imported/w3c:

Rebaseline W3C test now that one more check is passing.

* web-platform-tests/html/browsers/origin/cross-origin-objects/cross-origin-objects-expected.txt:

Source/JavaScriptCore:

Have JSProxy forward toStringName calls to its target so Window
can override it.

* runtime/JSProxy.cpp:
(JSC::JSProxy::toStringName):
* runtime/JSProxy.h:

Source/WebCore:

{}.toString.call() to should "[object Object] for cross origin
Window / Location objects. This new behavior is consistent with
Firefox and Chrome.

No new tests, rebaselined existing tests.

* bindings/js/JSDOMWindowCustom.cpp:
(WebCore::JSDOMWindow::toStringName):
* bindings/js/JSLocationCustom.cpp:
(WebCore::JSLocation::toStringName):
* bindings/scripts/CodeGeneratorJS.pm:
(GenerateHeader):
* bindings/scripts/IDLAttributes.txt:
* page/DOMWindow.idl:
* page/Location.idl:

LayoutTests:

Rebaselined existing test now that more checks are passing.

* http/tests/security/symbols-cross-origin-expected.txt:

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

3 years agoMark inspector/debugger/breakpoint-scope.html as flaky on macOS debug.
ryanhaddad@apple.com [Thu, 2 Feb 2017 23:15:31 +0000 (23:15 +0000)]
Mark inspector/debugger/breakpoint-scope.html as flaky on macOS debug.
https://bugs.webkit.org/show_bug.cgi?id=164293

Unreviewed test gardening.

* platform/mac/TestExpectations:

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

3 years agoWK2: cannot tap on candidate view with hardware keyboard.
enrica@apple.com [Thu, 2 Feb 2017 23:12:43 +0000 (23:12 +0000)]
WK2: cannot tap on candidate view with hardware keyboard.
https://bugs.webkit.org/show_bug.cgi?id=167761
rdar://problem/28775395

Reviewed by Tim Horton.

The candidate view is a subview of the view returned by
automaticallySelectedOverlay and it should be the unscaled view
instead of the WKContentView.

* UIProcess/ios/WKContentViewInteraction.mm:
(-[WKContentView automaticallySelectedOverlay]):

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

3 years agoDrag images should be anchored to the mouse location
wenson_hsieh@apple.com [Thu, 2 Feb 2017 23:03:38 +0000 (23:03 +0000)]
Drag images should be anchored to the mouse location
https://bugs.webkit.org/show_bug.cgi?id=167690
<rdar://problem/30295261>

Reviewed by Enrica Casucci.

Source/WebCore:

Adds logic to compute the mouse anchor point. This is a point in the unit square indicating where the drag
origin is relative to the bounds of the drag image. There is no behavior change, since this anchor point is not
used by any client yet; this patch only computes and vends this information from WebCore.

* loader/EmptyClients.cpp:
* page/DragClient.h:
* page/DragController.cpp:
(WebCore::DragController::startDrag):
(WebCore::DragController::doImageDrag):
(WebCore::DragController::doSystemDrag):
* page/DragController.h:
* platform/DragImage.h:

Source/WebKit/mac:

Adds some plumbing for the anchor point in the WK1 client layer.

* WebCoreSupport/WebDragClient.h:
* WebCoreSupport/WebDragClient.mm:
(WebDragClient::startDrag):

Source/WebKit/win:

Adds some plumbing for the anchor point in the WK1 client layer.

* WebCoreSupport/WebDragClient.cpp:
(WebDragClient::startDrag):
* WebCoreSupport/WebDragClient.h:

Source/WebKit2:

Adds some plumbing for the mouse anchor point in the UI process. Additionally, refactors some unrelated code
for handling data interaction.

* UIProcess/PageClient.h:
* UIProcess/WebPageProxy.h:
* UIProcess/WebPageProxy.messages.in:
* UIProcess/ios/PageClientImplIOS.h:
* UIProcess/ios/PageClientImplIOS.mm:
(WebKit::PageClientImpl::startDataInteractionWithImage):
* UIProcess/ios/WKContentViewInteraction.h:
* UIProcess/mac/PageClientImpl.h:
* UIProcess/mac/PageClientImpl.mm:
(WebKit::PageClientImpl::startDataInteractionWithImage):
* UIProcess/mac/WebPageProxyMac.mm:
(WebKit::WebPageProxy::setDragImage):
* WebProcess/WebCoreSupport/WebDragClient.cpp:
(WebKit::WebDragClient::startDrag):
* WebProcess/WebCoreSupport/WebDragClient.h:
* WebProcess/WebCoreSupport/mac/WebDragClientMac.mm:
(WebKit::WebDragClient::startDrag):

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

3 years ago[Mac] Add classes to manage audio samples
eric.carlson@apple.com [Thu, 2 Feb 2017 23:01:54 +0000 (23:01 +0000)]
[Mac] Add classes to manage audio samples
https://bugs.webkit.org/show_bug.cgi?id=167739

Reviewed by Jer Noble.

No new tests, this code isn't used yet.

* WebCore.xcodeproj/project.pbxproj:
* platform/audio/mac/AudioSampleBufferList.cpp: Added.
(WebCore::AudioSampleBufferList::create):
(WebCore::AudioSampleBufferList::AudioSampleBufferList):
(WebCore::AudioSampleBufferList::~AudioSampleBufferList):
(WebCore::AudioSampleBufferList::setSampleCount):
(WebCore::AudioSampleBufferList::applyGain):
(WebCore::AudioSampleBufferList::mixFrom):
(WebCore::AudioSampleBufferList::copyFrom):
(WebCore::AudioSampleBufferList::copyTo):
(WebCore::AudioSampleBufferList::reset):
(WebCore::AudioSampleBufferList::zero):
(WebCore::AudioSampleBufferList::zeroABL):
(WebCore::AudioSampleBufferList::convertInput):
(WebCore::AudioSampleBufferList::audioConverterCallback):
(WebCore::AudioSampleBufferList::configureBufferListForStream):
* platform/audio/mac/AudioSampleBufferList.h: Added.
(WebCore::AudioSampleBufferList::streamDescription):
(WebCore::AudioSampleBufferList::bufferList):
(WebCore::AudioSampleBufferList::sampleCapacity):
(WebCore::AudioSampleBufferList::sampleCount):
(WebCore::AudioSampleBufferList::timestamp):
(WebCore::AudioSampleBufferList::hostTime):
(WebCore::AudioSampleBufferList::setTimes):
(WebCore::AudioSampleBufferList::audioBufferListSizeForStream):
* platform/audio/mac/AudioSampleDataSource.cpp: Added.
(WebCore::AudioSampleDataSource::create):
(WebCore::AudioSampleDataSource::AudioSampleDataSource):
(WebCore::AudioSampleDataSource::~AudioSampleDataSource):
(WebCore::AudioSampleDataSource::setPaused):
(WebCore::AudioSampleDataSource::setupConverter):
(WebCore::AudioSampleDataSource::setInputFormat):
(WebCore::AudioSampleDataSource::setOutputFormat):
(WebCore::AudioSampleDataSource::hostTime):
(WebCore::AudioSampleDataSource::pushSamplesInternal):
(WebCore::AudioSampleDataSource::pushSamples):
(WebCore::AudioSampleDataSource::pullSamplesInternal):
(WebCore::AudioSampleDataSource::pullSamples):
* platform/audio/mac/AudioSampleDataSource.h: Added.
(WebCore::AudioSampleDataSource::setVolume):
(WebCore::AudioSampleDataSource::volume):
(WebCore::AudioSampleDataSource::setMuted):
(WebCore::AudioSampleDataSource::muted):

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

3 years agoMark workesr/bomb/html as flaky on macOS.
ryanhaddad@apple.com [Thu, 2 Feb 2017 22:45:59 +0000 (22:45 +0000)]
Mark workesr/bomb/html as flaky on macOS.
https://bugs.webkit.org/show_bug.cgi?id=167757

Unreviewed test gardening.

* platform/mac/TestExpectations:

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

3 years agoSupport Performance API (performance.now(), UserTiming) in Workers
joepeck@webkit.org [Thu, 2 Feb 2017 22:07:28 +0000 (22:07 +0000)]
Support Performance API (performance.now(), UserTiming) in Workers
https://bugs.webkit.org/show_bug.cgi?id=167717

Reviewed by Ryosuke Niwa.

Source/WebCore:

Tests: performance-api/performance-mark-name.html
       performance-api/performance-now-api.html
       performance-api/performance-now-time-origin-in-worker.html
       performance-api/user-timing-apis.html

* CMakeLists.txt:
* DerivedSources.make:
New files.

* page/DOMWindow.idl:
* page/GlobalPerformance.idl:
* workers/WorkerGlobalScope.idl:
Add partial interface for performance attribute.

* page/Performance.idl:
* page/PerformanceEntry.idl:
* page/PerformanceMark.idl:
* page/PerformanceMeasure.idl:
* page/PerformanceObserver.idl:
* page/PerformanceObserverEntryList.idl:
Expose these to Workers.

* page/Performance.cpp:
(WebCore::Performance::Performance):
(WebCore::Performance::contextDestroyed):
* page/Performance.h:
Use the EventQueue variant that works with any ScriptExectionContext.

* page/PerformanceObserver.cpp:
(WebCore::PerformanceObserver::PerformanceObserver):
Get the Performance base in a Worker context.

* page/PerformanceUserTiming.cpp:
(WebCore::UserTiming::mark):
Only reject legacy special mark names in a Window, not a Worker.

(WebCore::UserTiming::findExistingMarkStartTime):
Simple implementation returns 0 as the start time in Workers. The spec
is currently imprecise here, but it does not have the unusual
PerformanceTiming behavior in a Window which is part of User Timing 1.

* workers/Worker.cpp:
(WebCore::Worker::create):
(WebCore::Worker::notifyFinished):
* workers/Worker.h:
Record the moment of Worker creation.

* workers/WorkerGlobalScope.cpp:
(WebCore::WorkerGlobalScope::WorkerGlobalScope):
(WebCore::WorkerGlobalScope::performance):
* workers/WorkerGlobalScope.h:
Construct the Performance object with the moment of creation (timeOrigin).

* workers/DedicatedWorkerGlobalScope.cpp:
(WebCore::DedicatedWorkerGlobalScope::create):
(WebCore::DedicatedWorkerGlobalScope::DedicatedWorkerGlobalScope):
* workers/DedicatedWorkerGlobalScope.h:
* workers/DedicatedWorkerThread.cpp:
(WebCore::DedicatedWorkerThread::DedicatedWorkerThread):
(WebCore::DedicatedWorkerThread::createWorkerGlobalScope):
* workers/DedicatedWorkerThread.h:
* workers/WorkerGlobalScopeProxy.h:
* workers/WorkerMessagingProxy.cpp:
(WebCore::WorkerMessagingProxy::startWorkerGlobalScope):
* workers/WorkerMessagingProxy.h:
* workers/WorkerThread.cpp:
(WebCore::WorkerThreadStartupData::WorkerThreadStartupData):
(WebCore::WorkerThread::WorkerThread):
(WebCore::WorkerThread::workerThread):
* workers/WorkerThread.h:
Pass the moment of creation (timeOrigin) through to WorkerGlobalScope creation.

LayoutTests:

* js/dom/global-constructors-attributes-dedicated-worker-expected.txt:
Updated now that Performance classes are in Workers.

* performance-api/performance-now-api-expected.txt: Added.
* performance-api/performance-now-api.html: Added.
* performance-api/performance-now-time-origin-in-worker-expected.txt: Added.
* performance-api/performance-now-time-origin-in-worker.html: Added.
New tests to cover performance.now.

* performance-api/performance-mark-name-expected.txt: Added.
* performance-api/performance-mark-name.html: Added.
* performance-api/resources/mark-name.js: Added.
* performance-api/resources/user-timing-api.js: Added.
* performance-api/user-timing-apis-expected.txt: Added.
* performance-api/user-timing-apis.html: Added.
New tests to cover user-timing and performance.mark behavior.

* performance-api/performance-observer-api-expected.txt:
* performance-api/performance-observer-api.html:
* performance-api/performance-observer-basic-expected.txt:
* performance-api/performance-observer-basic.html:
* performance-api/performance-timeline-api-expected.txt:
* performance-api/performance-timeline-api.html:
* performance-api/resources/now-api.js: Added.
* performance-api/resources/observer-api.js: Copied from LayoutTests/performance-api/performance-observer-api.html.
* performance-api/resources/observer-basic.js: Copied from LayoutTests/performance-api/performance-observer-basic.html.
* performance-api/resources/time-origin-in-worker.js: Added.
* performance-api/resources/timeline-api.js: Copied from LayoutTests/performance-api/performance-timeline-api.html.
Update some of the existing tests to check in a Document and Worker.

* imported/w3c/web-platform-tests/user-timing/test_user_timing_mark_and_measure_exception_when_invoke_with_timing_attributes-expected.txt:
Minor progression.

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

3 years agoMark imported/w3c/web-platform-tests/shadow-dom/slotchange.html as flaky on macOS.
ryanhaddad@apple.com [Thu, 2 Feb 2017 21:36:44 +0000 (21:36 +0000)]
Mark imported/w3c/web-platform-tests/shadow-dom/slotchange.html as flaky on macOS.
https://bugs.webkit.org/show_bug.cgi?id=167652

Unreviewed test gardening.

* platform/mac/TestExpectations:

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

3 years agoUnreviewed, rolling out r211579.
commit-queue@webkit.org [Thu, 2 Feb 2017 21:31:20 +0000 (21:31 +0000)]
Unreviewed, rolling out r211579.
https://bugs.webkit.org/show_bug.cgi?id=167753

Caused mediastream crashes. (Requested by bfulgham_ on
#webkit).

Reverted changeset:

"Correct memory leak in MediaConstraints"
https://bugs.webkit.org/show_bug.cgi?id=167744
http://trac.webkit.org/changeset/211579

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

3 years agoRename Node::inDocument() to isConnected()
cdumez@apple.com [Thu, 2 Feb 2017 21:29:15 +0000 (21:29 +0000)]
Rename Node::inDocument() to isConnected()
https://bugs.webkit.org/show_bug.cgi?id=167743

Reviewed by Sam Weinig.

Rename Node::inDocument() to isConnected() to match the DOM specification more closely:
- https://dom.spec.whatwg.org/#connected
Source/WebKit/mac:

* DOM/DOMNode.mm:
(-[DOMNode isConnected]):
* WebView/WebFrame.mm:
(-[WebFrame selectNSRange:onElement:]):

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

3 years ago[Modern Media Controls] Provide a compact mode for when the controls are small
graouts@webkit.org [Thu, 2 Feb 2017 21:25:19 +0000 (21:25 +0000)]
[Modern Media Controls] Provide a compact mode for when the controls are small
https://bugs.webkit.org/show_bug.cgi?id=167746
<rdar://problem/29565842>

Reviewed by Dean Jackson.

Source/WebCore:

When the macOS inline media controls become too narrow to display both the volume and fullscreen
buttons in their right container (width < 242), we switch to a compact mode where the controls bar
is shorter and the buttons smaller.

To facilitate this, we provide a new subclass of MacOSInlineMediaControls called MacOSCompactInlineMediaControls
which changes some of the layout properties of the buttons to have shorter margins around buttons.

We also added a new "Compact" LayoutTrait and improved IconService to provide specific icons
for this mode for the buttons that can exist in compact mode.

To correctly implement the design, we needed to add a way to provide different margins around the
left and right edges of the container, so the "padding" property is now split between "leftMargin"
and "rightMargin", and to make property naming cleaner, the "margin" property which specifies the
space between each button in a container is now called "buttonMargin". We also set the default
values for those properties to be 24 (instead of 0) which are the most widely used values, requiring
less customization.

Tests: media/modern-media-controls/macos-compact-inline-media-controls/macos-compact-inline-media-controls-buttons-styles.html
       media/modern-media-controls/macos-compact-inline-media-controls/macos-compact-inline-media-controls-constructor.html
       media/modern-media-controls/macos-compact-inline-media-controls/macos-compact-inline-media-controls-controls-bar-styles.html
       media/modern-media-controls/macos-compact-inline-media-controls/macos-compact-inline-media-controls-layout.html
       media/modern-media-controls/macos-compact-inline-media-controls/macos-compact-inline-media-controls-volume-styles.html
       media/modern-media-controls/media-controller/media-controller-toggle-compact-mode.html

* Modules/modern-media-controls/controls/buttons-container.js:
(ButtonsContainer.prototype.layout): Refactor the "margin" and "padding" properties into
"leftMargin", "rightMargin" and "buttonMargin".
* Modules/modern-media-controls/controls/icon-button.js:
(IconButton.prototype._updateImage): Fix a small bug that would prevent the image source
change to occur after changing the "iconName" property should the previous and new icons
share the same metrics, which is the case for the "play" and "pause" icons in compact mode.
* Modules/modern-media-controls/controls/icon-service.js: Add support for compact variants.
(const.iconService.new.IconService.prototype._fileNameAndPlatformForIconNameAndLayoutTraits):
(const.iconService.new.IconService):
* Modules/modern-media-controls/controls/ios-inline-media-controls.js: Adopt new margin defaults.
* Modules/modern-media-controls/controls/layout-item.js: Add the new "Compact" LayoutTrait.
* Modules/modern-media-controls/controls/macos-compact-inline-media-controls.css: Added.
(.media-controls.mac.inline.compact > .controls-bar):
(.media-controls.mac.inline.compact button.play-pause):
(.media-controls.mac.inline.compact button.skip-back):
(.media-controls.mac.inline.compact .scrubber.slider):
(.media-controls.mac.inline.compact button.mute):
(.media-controls.mac.inline.compact button.fullscreen):
(.media-controls.mac.inline.compact .time-label,):
(.media-controls.mac.inline.compact .volume-slider-container):
(.media-controls.mac.inline.compact .volume.slider):
(.media-controls.mac.inline.compact .scrubber.slider > input::-webkit-slider-thumb):
* Modules/modern-media-controls/controls/macos-compact-inline-media-controls.js: Added.
(MacOSCompactInlineMediaControls):
* Modules/modern-media-controls/controls/macos-fullscreen-media-controls.js: Adopt new margin defaults.
(MacOSFullscreenMediaControls.prototype.layout):
* Modules/modern-media-controls/controls/macos-inline-media-controls.js: Adopt new margin defaults
and make the _leftContainer and _rightContainer properties public such that the MacOSCompactInlineMediaControls
subclass may customize them without accessing a private property.
(MacOSInlineMediaControls.prototype.layout):
(MacOSInlineMediaControls.prototype.showTracksPanel):
* Modules/modern-media-controls/images/macOS/enter-fullscreen-compact@1x.png: Added.
* Modules/modern-media-controls/images/macOS/enter-fullscreen-compact@2x.png: Added.
* Modules/modern-media-controls/images/macOS/interval-skip-back-compact@1x.png: Added.
* Modules/modern-media-controls/images/macOS/interval-skip-back-compact@2x.png: Added.
* Modules/modern-media-controls/images/macOS/pause-compact@1x.png: Added.
* Modules/modern-media-controls/images/macOS/pause-compact@2x.png: Added.
* Modules/modern-media-controls/images/macOS/play-compact@1x.png: Added.
* Modules/modern-media-controls/images/macOS/play-compact@2x.png: Added.
* Modules/modern-media-controls/images/macOS/volume-compact@1x.png: Added.
* Modules/modern-media-controls/images/macOS/volume-compact@2x.png: Added.
* Modules/modern-media-controls/js-files: Add the new files so they are concatenated by the build script.
* Modules/modern-media-controls/media/media-controller.js: Toggle compact mode if controls
are below the 242px width threshold.
(MediaController.prototype.get layoutTraits):
(MediaController.prototype.handleEvent):
(MediaController.prototype._updateControlsIfNeeded):
(MediaController.prototype._shouldFadeBetweenControls):
(MediaController.prototype._updateControlsSize):
(MediaController.prototype._controlsWidth):
(MediaController.prototype._controlsClass):
(MediaController):
* WebCore.xcodeproj/project.pbxproj: Add new files and perform some cleanup so that the
project accurately lists all the existing project files and remove some older ones.

LayoutTests:

Add some new tests for the compact mode and update some tests after the ButtonsContainer
"padding" and "margin" properties refactoring.

* media/modern-media-controls/buttons-container/buttons-container-buttons-property.html:
* media/modern-media-controls/buttons-container/buttons-container-constructor-expected.txt:
* media/modern-media-controls/buttons-container/buttons-container-constructor.html:
* media/modern-media-controls/buttons-container/buttons-container-layout.html:
* media/modern-media-controls/ios-inline-media-controls/ios-inline-media-controls-constructor-expected.txt:
* media/modern-media-controls/ios-inline-media-controls/ios-inline-media-controls-constructor.html:
* media/modern-media-controls/macos-compact-inline-media-controls/macos-compact-inline-media-controls-buttons-styles-expected.txt: Added.
* media/modern-media-controls/macos-compact-inline-media-controls/macos-compact-inline-media-controls-buttons-styles.html: Added.
* media/modern-media-controls/macos-compact-inline-media-controls/macos-compact-inline-media-controls-constructor-expected.txt: Added.
* media/modern-media-controls/macos-compact-inline-media-controls/macos-compact-inline-media-controls-constructor.html: Added.
* media/modern-media-controls/macos-compact-inline-media-controls/macos-compact-inline-media-controls-controls-bar-styles-expected.txt: Added.
* media/modern-media-controls/macos-compact-inline-media-controls/macos-compact-inline-media-controls-controls-bar-styles.html: Added.
* media/modern-media-controls/macos-compact-inline-media-controls/macos-compact-inline-media-controls-layout-expected.txt: Added.
* media/modern-media-controls/macos-compact-inline-media-controls/macos-compact-inline-media-controls-layout.html: Added.
* media/modern-media-controls/macos-compact-inline-media-controls/macos-compact-inline-media-controls-volume-styles-expected.txt: Added.
* media/modern-media-controls/macos-compact-inline-media-controls/macos-compact-inline-media-controls-volume-styles.html: Added.
* media/modern-media-controls/macos-fullscreen-media-controls/macos-fullscreen-media-controls-constructor-expected.txt:
* media/modern-media-controls/macos-fullscreen-media-controls/macos-fullscreen-media-controls-constructor.html:
* media/modern-media-controls/macos-fullscreen-media-controls/macos-fullscreen-media-controls-right-container-margin-expected.txt:
* media/modern-media-controls/macos-fullscreen-media-controls/macos-fullscreen-media-controls-right-container-margin.html:
* media/modern-media-controls/macos-inline-media-controls/macos-inline-media-controls-constructor-expected.txt:
* media/modern-media-controls/macos-inline-media-controls/macos-inline-media-controls-constructor.html:
* media/modern-media-controls/media-controller/media-controller-toggle-compact-mode-expected.txt: Added.
* media/modern-media-controls/media-controller/media-controller-toggle-compact-mode.html: Added.
* media/modern-media-controls/resources/media-controls-loader.js:
* platform/ios-simulator/TestExpectations:

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

3 years agoUnreviewed, rolling out r211571 and r211582.
commit-queue@webkit.org [Thu, 2 Feb 2017 21:24:11 +0000 (21:24 +0000)]
Unreviewed, rolling out r211571 and r211582.
https://bugs.webkit.org/show_bug.cgi?id=167751

This change caused API test WebKit1.MemoryPressureHandler to
fail with an assertion. (Requested by ryanhaddad on #webkit).

Reverted changesets:

"[Mac] In-process memory pressure monitor for WebContent
processes."
https://bugs.webkit.org/show_bug.cgi?id=167491
http://trac.webkit.org/changeset/211571

"Unreviewed attempt to fix the Windows build after r211571."
http://trac.webkit.org/changeset/211582

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

3 years agoThe Make Frameworks Symbolic Link build phase can end up creating a symlink inside...
mitz@apple.com [Thu, 2 Feb 2017 21:05:17 +0000 (21:05 +0000)]
The Make Frameworks Symbolic Link build phase can end up creating a symlink inside the Frameworks subdirectory
https://bugs.webkit.org/show_bug.cgi?id=167745

Reviewed by Tim Horton.

* WebKit2.xcodeproj/project.pbxproj: Pass the -h option to ln(1) so that it will replace,
  rather than follow, an existing symlink.

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

3 years agoVersioning.
jmarcell@apple.com [Thu, 2 Feb 2017 21:00:43 +0000 (21:00 +0000)]
Versioning.

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

3 years agoMark imported/w3c/web-platform-tests/html/semantics/interactive-elements/the-details...
ryanhaddad@apple.com [Thu, 2 Feb 2017 20:56:52 +0000 (20:56 +0000)]
Mark imported/w3c/web-platform-tests/html/semantics/interactive-elements/the-details-element/toggleEvent.html as flaky.
https://bugs.webkit.org/show_bug.cgi?id=164041

Unreviewed test gardening.

* TestExpectations:

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

3 years ago[Win][HiDPI] Scale factor is applied twice in accelerated compositing mode.
pvollan@apple.com [Thu, 2 Feb 2017 20:42:23 +0000 (20:42 +0000)]
[Win][HiDPI] Scale factor is applied twice in accelerated compositing mode.
https://bugs.webkit.org/show_bug.cgi?id=167732

Reviewed by Brent Fulgham.

Backing layer should not be scaled when CACFLayerSetContentsScale is used for scaling.

* WebView.cpp:
(WebView::setAcceleratedCompositing):

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

3 years agoUnreviewed ios-simulator test gardening.
ryanhaddad@apple.com [Thu, 2 Feb 2017 20:24:49 +0000 (20:24 +0000)]
Unreviewed ios-simulator test gardening.

* platform/ios-simulator-wk2/TestExpectations:
* platform/ios-simulator/TestExpectations:

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

3 years agoUnreviewed attempt to fix the Windows build after r211571.
cdumez@apple.com [Thu, 2 Feb 2017 20:22:15 +0000 (20:22 +0000)]
Unreviewed attempt to fix the Windows build after r211571.

* platform/MemoryPressureHandler.cpp:
(WebCore::thresholdForPolicy):
(WebCore::policyForFootprint):

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

3 years agoClean up css3/filters/backdrop/dynamic-with-clip-path.html
simon.fraser@apple.com [Thu, 2 Feb 2017 20:21:58 +0000 (20:21 +0000)]
Clean up css3/filters/backdrop/dynamic-with-clip-path.html

This test used a clip-path that was entirely outside the element, making it confusing.
Move the clipping circle to the center.

* css3/filters/backdrop/dynamic-with-clip-path-expected.html:
* css3/filters/backdrop/dynamic-with-clip-path.html:

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

3 years agoMake the Makefile great again after r211570, r211572
ddkilzer@apple.com [Thu, 2 Feb 2017 19:34:09 +0000 (19:34 +0000)]
Make the Makefile great again after r211570, r211572

* Makefile: Restore tabs and ending newline.

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

3 years agoCorrect memory leak in MediaConstraints
bfulgham@apple.com [Thu, 2 Feb 2017 19:33:09 +0000 (19:33 +0000)]
Correct memory leak in MediaConstraints
https://bugs.webkit.org/show_bug.cgi?id=167744
<rdar://problem/30331444>

Reviewed by Anders Carlsson.

ConstraintHolder returns a reference to an object created by operator new. When the
returned value is assigned or stored in Vector or other containers we leak memory.
Instead, this value should just be returned as a regular object so that the return
value optimization can make sure memory is properly (and efficiently) used.

* platform/mediastream/MediaConstraints.h:
(WebCore::FlattenedConstraint::ConstraintHolder::create): Return by value.

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

3 years agoMarking http/tests/inspector/worker/blob-script-with-cross-domain-imported-scripts...
ryanhaddad@apple.com [Thu, 2 Feb 2017 19:12:03 +0000 (19:12 +0000)]
Marking http/tests/inspector/worker/blob-script-with-cross-domain-imported-scripts.html as flaky.
https://bugs.webkit.org/show_bug.cgi?id=167607

Unreviewed test gardening.

* platform/mac-wk2/TestExpectations:

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

3 years agoClean up accessibility & animations tests to stop calling testRunner.waitUntilDone...
ddkilzer@apple.com [Thu, 2 Feb 2017 18:55:23 +0000 (18:55 +0000)]
Clean up accessibility & animations tests to stop calling testRunner.waitUntilDone() twice
<https://webkit.org/b/167598>

Reviewed by Alexey Proskuryakov.

* accessibility/frame-disconnect-textmarker-cache-crash.html:
* accessibility/loading-iframe-sends-notification.html:
* accessibility/mac/combobox-activedescendant-notifications.html:
* accessibility/mac/ordered-textmarker-crash.html:
* accessibility/mac/stale-textmarker-crash.html:
* accessibility/notification-listeners.html:
* accessibility/scroll-to-global-point-iframe-nested.html:
* accessibility/scroll-to-global-point-iframe.html:
* accessibility/scroll-to-make-visible-iframe.html:
* accessibility/svg-element-press.html:
- Remove call to testRunner.waitUntilDone() since
  window.jsTestIsAsync is set to true, and thus waitUntilDone()
  is called from either js-test.js or js-test-post.js.

* animations/animation-delay-changed.html:
* animations/change-keyframes-name.html:
* animations/font-variations/font-variation-settings-order.html:
* animations/font-variations/font-variation-settings-unlike.html:
* animations/font-variations/font-variation-settings.html:
* animations/longhand-timing-function.html:
* animations/transition-and-animation-3.html:
* animations/unanimated-style.html:
- Remove call to testRunner.waitUntilDone() since that's moved
  into animation-test-helpers.js.

* animations/resources/animation-test-helpers.js:
(runAnimationTest): Call testRunner.waitUntilDone() when this
script resource is included instead of when runAnimationTest()
is called since runAnimationTest() expects it to be set anyway.

* animations/animation-direction-reverse-fill-mode-hardware.html:
* animations/animation-direction-reverse-fill-mode.html:
* animations/animation-hit-test-transform.html:
* animations/animation-hit-test.html:
* animations/animation-internals-api-multiple-keyframes.html:
* animations/animation-internals-api.html:
* animations/change-transform-style-during-animation.html:
* animations/keyframes-iteration-count-non-integer.html:
- Remove call to testRunner.waitUntilDone() since that now
  happens when loading animation-test-helpers.js.  These tests
  don't currently call runAnimationTest(), but they manage their
  own state by calling testRunner.notifyDone() themselves.

* animations/crash-on-removing-animation.html:
* animations/resources/crash-on-removing-animation-window.html: Copied from LayoutTests/animations/crash-on-removing-animation.html.
- Split this test into a main resource and a window resource.
  Previously testRunner.waitUntilDone() was being called twice
  when js-test-post.js was loaded in the main window and then
  loaded a second time when the window was opened.  The new
  resource file doesn't load either js-test-pre.js or
  js-test-post.js, avoiding the duplicate call.

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

3 years agoUnreviewed build fix after r211570
jbedard@apple.com [Thu, 2 Feb 2017 18:42:02 +0000 (18:42 +0000)]
Unreviewed build fix after r211570

* Makefile: Placed back.

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

3 years agoSource/JavaScriptCore:
akling@apple.com [Thu, 2 Feb 2017 18:35:55 +0000 (18:35 +0000)]
Source/JavaScriptCore:
[Mac] In-process memory pressure monitor for WebContent processes.
<https://webkit.org/b/167491>
<rdar://problem/30116072>

Reviewed by Antti Koivisto.

Remove the sloppy "max live heap size" mechanism from JSC in favor of the new
WebCore-side memory footprint monitor.

* heap/Heap.cpp:
(JSC::Heap::updateAllocationLimits):
(JSC::Heap::didExceedMaxLiveSize): Deleted.
* heap/Heap.h:
(JSC::Heap::setMaxLiveSize): Deleted.

Source/WebCore:
[Mac] In-process memory pressure monitor for WebContent processes AKA websam
<https://webkit.org/b/167491>
<rdar://problem/30116072>

Reviewed by Antti Koivisto.

Add a new timer-based memory pressure monitor that checks the process memory
footprint every 30 seconds and reacts to changes by setting a MemoryUsagePolicy.

There are four MemoryUsagePolicy values:

    - Unrestricted (below 1GB)
    - Conservative (above 1GB)
    - Strict (above 2GB)
    - Panic (above 4GB, or 3GB if 32-bit)

For Strict and above, the old-style "isUnderMemoryPressure()" API will return true.

Transitioning to a higher policy will cause memory pressure handlers to run:

At Strict, we run the "non-critical" memory pressure handler, then carry on.

At Panic, we run the "critical" memory pressure handler. If that fails to recover
enough memory to bring us back below 4GB, we may kill the process:

A process is eligible to get killed for using too much memory if:

    - It's not visible on screen (i.e it's a background tab.)
    - It's not playing audio.
    - It has not performed a main frame navigation in the last hour.

Before killing the process, an exit-time callback will run. This patch installs such
a callback that prints out some time-of-death statistics about C++ and JavaScript memory
usage to hopefully help understand what was soaking up all the memory.

* bindings/js/CommonVM.cpp:
(WebCore::commonVMSlow):
* loader/FrameLoader.cpp:
(WebCore::FrameLoader::setState):
* page/MainFrame.cpp:
(WebCore::MainFrame::didCompleteLoad):
* page/MainFrame.h:
* page/MemoryRelease.cpp:
(WebCore::pageCount):
(WebCore::logMemoryStatisticsAtTimeOfDeath):
(WebCore::didExceedMemoryLimitAndFailedToRecover):
(WebCore::processIsEligibleForMemoryKill):
* page/MemoryRelease.h:
* page/ResourceUsageThread.h:
* page/cocoa/ResourceUsageThreadCocoa.mm:
(WebCore::vmPageSize):
* platform/MemoryPressureHandler.cpp:
(WebCore::MemoryPressureHandler::MemoryPressureHandler):
(WebCore::MemoryPressureHandler::setShouldUsePeriodicMemoryMonitor):
(WebCore::toString):
(WebCore::thresholdForPolicy):
(WebCore::policyForFootprint):
(WebCore::MemoryPressureHandler::measurementTimerFired):
* platform/MemoryPressureHandler.h:
(WebCore::MemoryPressureHandler::setMemoryKillCallback):
(WebCore::MemoryPressureHandler::setProcessIsEligibleForMemoryKillCallback):
(WebCore::MemoryPressureHandler::isUnderMemoryPressure):

Source/WebKit2:
[Mac] In-process memory pressure monitor for WebContent processes.
<https://webkit.org/b/167491>
<rdar://problem/30116072>

Reviewed by Antti Koivisto.

Enable the in-process memory monitor for WebContent processes on macOS 10.12+

* WebProcess/WebProcess.cpp:
(WebKit::WebProcess::initializeWebProcess):

Source/WTF:
[Mac] In-process memory pressure monitor for WebContent processes.
<https://webkit.org/b/167491>
<rdar://problem/30116072>

Reviewed by Antti Koivisto.

Add a WTF helper function for getting the current process's memory footprint.

* WTF.xcodeproj/project.pbxproj:
* wtf/CMakeLists.txt:
* wtf/MemoryFootprint.cpp:
(WTF::memoryFootprint):
* wtf/MemoryFootprint.h:

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

3 years agoUndefined subroutine in svn-create-patch
jbedard@apple.com [Thu, 2 Feb 2017 18:33:29 +0000 (18:33 +0000)]
Undefined subroutine in svn-create-patch
https://bugs.webkit.org/show_bug.cgi?id=167742

Unreviewed build-fix after r211543.

* Scripts/VCSUtils.pm: fixSVNPatchForAdditionWithHistory was not exported.

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