2016-04-27  Alexey Proskuryakov  <ap@apple.com>

        Don't throttle GuardMalloc on 8-core Macs
        https://bugs.webkit.org/show_bug.cgi?id=157108

        Reviewed by Alex Christensen.

        This was making them slower unnecessarily.

        * Scripts/webkitpy/port/mac.py: (MacPort.default_child_processes):

2016-04-26  Konstantin Tokarev  <annulen@yandex.ru>

        Unreviewed: add myself to the committers list.

        * Scripts/webkitpy/common/config/contributors.json:

2016-04-26  Ryosuke Niwa  <rniwa@webkit.org>

        Fix text in log files autogenerated by import-w3c-tests
        https://bugs.webkit.org/show_bug.cgi?id=157021

        Unreviewed. Fixing the second typo.

        * Scripts/webkitpy/w3c/test_importer.py:
        (TestImporter.write_import_log):

2016-04-26  Filip Pizlo  <fpizlo@apple.com>

        WebCore on Mac ignores the user's preferred region (country) while getting the language
        https://bugs.webkit.org/show_bug.cgi?id=156993

        Reviewed by Geoffrey Garen.

        Change the test expectations for this test. If the variant is not explicitly specified in
        the AppleLanguage, then we use the locale's country code, which this test assumes is US.

        * TestWebKitAPI/Tests/mac/NavigatorLanguage.mm:
        (TestWebKitAPI::languageForSystemLanguage):
        (TestWebKitAPI::TEST):

2016-04-25  Ryosuke Niwa  <rniwa@webkit.org>

        Remove the build flag for template elements
        https://bugs.webkit.org/show_bug.cgi?id=157022

        Reviewed by Daniel Bates.

        Removed the build option.

        * Scripts/webkitperl/FeatureList.pm:

2016-04-25  Ryosuke Niwa  <rniwa@webkit.org>

        Fix text in log files autogenerated by import-w3c-tests
        https://bugs.webkit.org/show_bug.cgi?id=157021

        Reviewed by Chris Dumez.

        s/Webkit/WebKit/ and end each sentence with a period.

        * Scripts/webkitpy/w3c/test_importer.py:
        (TestImporter.write_import_log):

2016-04-25  Myles C. Maxfield  <mmaxfield@apple.com>

        [Cocoa] Guarantee FontPlatformData's m_cgFont is never nullptr
        https://bugs.webkit.org/show_bug.cgi?id=156929

        Reviewed by Darin Adler.

        * TestWebKitAPI/Tests/mac/StringTruncator.mm:
        (TestWebKitAPI::TEST):

2016-04-25  Caitlin Potter  <caitp@igalia.com>

        [Tools] whitelist all-uppercase JSTokenType enum in JavaScriptCore
        https://bugs.webkit.org/show_bug.cgi?id=156976

        Reviewed by Darin Adler.

        Mitigate style-checker spam on bugs which introduce new JavaScript
        token types.

        * Scripts/webkitpy/style/checkers/cpp.py:
        (_EnumState.__init__):
        (_EnumState.process_clean_line):
        * Scripts/webkitpy/style/checkers/cpp_unittest.py:
        (NoNonVirtualDestructorsTest.test_enum_casing):

2016-04-25  Simon Fraser  <simon.fraser@apple.com>

        Fix issues with content-animation performance tests
        https://bugs.webkit.org/show_bug.cgi?id=157001

        Reviewed by Sam Weinig.

        Add patch content for svg-animation.html, and fix the paths in the patch so
        it applies correctly.

        Add the patch file to the .plan file.

        * Scripts/webkitpy/benchmark_runner/data/patches/ContentAnimation.patch:
        * Scripts/webkitpy/benchmark_runner/data/plans/content-animation.plan:

2016-04-25  Brady Eidson  <beidson@apple.com>

        Tweaking IndexedDB watchlist and adding myself to it.

        * Scripts/webkitpy/common/config/watchlist:

2016-04-25  Commit Queue  <commit-queue@webkit.org>

        Unreviewed, rolling out r199916.
        https://bugs.webkit.org/show_bug.cgi?id=156989

        Might break buildbot when master is restarted (Requested by
        Srinivasan Vijayaraghava, Guest100, on #webkit).

        Reverted changeset:

        "Add JSC test results in json format to a buildbot log"
        https://bugs.webkit.org/show_bug.cgi?id=156920
        http://trac.webkit.org/changeset/199916

2016-04-23  Chris Dumez  <cdumez@apple.com>

        [WebIDL] Drop [Default] WebKit-IDL extended attribute
        https://bugs.webkit.org/show_bug.cgi?id=156955

        Reviewed by Darin Adler.

        * WebKitTestRunner/InjectedBundle/Bindings/TestRunner.idl:

2016-04-23  Csaba Osztrogonác  <ossy@webkit.org>

        Really enable INDEXED_DATABASE on Apple Mac cmake build
        https://bugs.webkit.org/show_bug.cgi?id=156902

        Reviewed by Michael Catanzaro.

        * Scripts/webkitperl/FeatureList.pm:

2016-04-23  Andy Estes  <aestes@apple.com>

        check-webkit-style: fix false-positive warnings about @synchronized
        https://bugs.webkit.org/show_bug.cgi?id=156957

        Reviewed by Dan Bernstein.

        * Scripts/webkitpy/style/checkers/cpp.py:
        (check_spacing_for_function_call): Ignore @synchronized lines.
        (check_braces): Ditto.
        * Scripts/webkitpy/style/checkers/cpp_unittest.py:
        (CppStyleTest.test_brace_at_begin_of_line): Added a test case.

2016-04-22  Srinivasan Vijayaraghavan  <svijayaraghavan@apple.com>

        Add JSC test results in json format to a buildbot log
        https://bugs.webkit.org/show_bug.cgi?id=156920

        Reviewed by Alexey Proskuryakov.

        * BuildSlaveSupport/build.webkit.org-config/master.cfg:
        (RunJavaScriptCoreTests):
        Add runtime flag to output json into buildbot
        * Scripts/run-javascriptcore-tests:
        (runJSCStressTests):
        Change key names and remove redundant count key

2016-04-22  Ryan Haddad  <ryanhaddad@apple.com>

        Update expected result for WKPreferencesGetOfflineWebApplicationCacheEnabled after r199854

        Unreviewed test gardening.

        * TestWebKitAPI/Tests/WebKit2/WKPreferences.cpp:
        (TestWebKitAPI::TEST):

2016-04-22  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] Enable the download attribute support
        https://bugs.webkit.org/show_bug.cgi?id=99025

        Reviewed by Žan Doberšek.

        * Scripts/webkitperl/FeatureList.pm:

2016-04-21  Keith Miller  <keith_miller@apple.com>

        WebScriptObject description swizzler should work in a multi-threaded world
        https://bugs.webkit.org/show_bug.cgi?id=156808

        Add a test for our NSObject swizzling TLS implementation. The test runs on
        two threads. One in JS and another in Objective-C. We expect the JS thread
        to use our NSObject description override and the Objective-C thread to act
        as though it was using the original NSObject description method.

        Reviewed by Geoffrey Garen.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/mac/WebScriptObjectDescription.html: Added.
        * TestWebKitAPI/Tests/mac/WebScriptObjectDescription.mm: Added.
        (nsObjectDescriptionTest):
        (-[WebScriptDescriptionTest webView:didFinishLoadForFrame:]):
        (TestWebKitAPI::TEST):

2016-04-21  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] WebKitWebView should claim the contents size as its natural size
        https://bugs.webkit.org/show_bug.cgi?id=156835

        Reviewed by Žan Doberšek.

        Add test case to check the WebKitWebView preferred size.

        * TestWebKitAPI/Tests/WebKit2Gtk/TestWebKitWebView.cpp:
        (testWebViewPreferredSize):
        (beforeAll):

2016-04-20  Simon Fraser  <simon.fraser@apple.com>

        Add content animation tests to benchmark_runner, and allow the runner to collect device data as part of the results
        https://bugs.webkit.org/show_bug.cgi?id=156827
        
        Update the .plan file now that the files are present in SVN.

        * Scripts/webkitpy/benchmark_runner/data/plans/content-animation.plan:

2016-04-20  Simon Fraser  <simon.fraser@apple.com>

        Add content animation tests to benchmark_runner, and allow the runner to collect device data as part of the results
        https://bugs.webkit.org/show_bug.cgi?id=156827
        rdar://problem/24358135

        Reviewed by Stephanie Lewis.

        Enhance benchmark_runner so that a benchmark can load a set of tests sequentially,
        and collate results across them. Also add the ability for the browser_driver to supply
        additional results, allowing for tests that collect results data in native code, rather
        than generating it in the web page.

        Add a set of "content animation" tests that use this new functionality, which test
        CSS animation and requestAnimationFrame performance.

        'plan' files have two new optional keys:
            'test_files': a list of files to run as a suite
            'options': optional parameters. Currently supports one new option,
                'animation_command', which affects the way that iOS tests are run,
                and is passed to MobileSafari as a parameter on launch.

        * Scripts/webkitpy/benchmark_runner/benchmark_runner.py:
        (BenchmarkRunner.__init__): If options is not specified in the plan file, set it to an empty dictionary.
        (BenchmarkRunner._get_result): Allow the browser_driver to modify the test results.
        (BenchmarkRunner):
        (BenchmarkRunner._run_one_test): Factored out of _run_benchmark, this contains logic for
        running a single test. It starts and stops the http_server_driver.
        (BenchmarkRunner._run_benchmark): Run a test in the traditional way if the plan has an 'entry_point'
        key, otherwise look for the new 'test_files' and load each in a loop.
        (BenchmarkRunner._dump):
        * Scripts/webkitpy/benchmark_runner/browser_driver/browser_driver.py:
        (BrowserDriver.launch_url): Pass options.
        (BrowserDriver.add_additional_results): Allow a driver to supply additional results.
        (BrowserDriver):
        * Scripts/webkitpy/benchmark_runner/browser_driver/gtk_minibrowser_driver.py:
        (GTKMiniBrowserDriver.launch_url):
        * Scripts/webkitpy/benchmark_runner/browser_driver/osx_browser_driver.py:
        (OSXBrowserDriver.close_browsers):
        (OSXBrowserDriver._terminate_processes): Fix spelling mistake.
        (OSXBrowserDriver._terminiate_processes): Deleted.
        * Scripts/webkitpy/benchmark_runner/browser_driver/osx_chrome_driver.py:
        (OSXChromeDriver.launch_url):
        (OSXChromeCanaryDriver.launch_url):
        * Scripts/webkitpy/benchmark_runner/browser_driver/osx_firefox_driver.py:
        (OSXFirefoxDriver.launch_url):
        (OSXFirefoxNightlyDriver.launch_url):
        * Scripts/webkitpy/benchmark_runner/browser_driver/osx_safari_driver.py:
        (OSXSafariDriver.launch_url):
        * Scripts/webkitpy/benchmark_runner/data/patches/ContentAnimation.patch: Added.
        * Scripts/webkitpy/benchmark_runner/data/plans/content-animation.plan: Added.

2016-04-20  Dustin Falgout  <dustin@falgout.us>

        [GTK] Expose AllowUniversalAccessFromFileURLs preference now that calling localStorage.getItem() results in SecurityError: DOM Exception 18
        https://bugs.webkit.org/show_bug.cgi?id=156651

        Reviewed by Michael Catanzaro.

        * TestWebKitAPI/Tests/WebKit2Gtk/TestWebKitSettings.cpp:
        (testWebKitSettings):

2016-04-20  Brady Eidson  <beidson@apple.com>

        Modern IDB (Workers): Enable INDEXED_DATABASE_IN_WORKERS compile time flag, but disabled in RuntimeEnabledFeatures.
        https://bugs.webkit.org/show_bug.cgi?id=156782

        Reviewed by Alex Christensen.

        * TestWebKitAPI/Configurations/FeatureDefines.xcconfig:

2016-04-19  Brent Fulgham  <bfulgham@apple.com>

        Unreviewed build fix after r199752.

        * DumpRenderTree/win/FrameLoadDelegate.cpp:
        (FrameLoadDelegate::didChangeIcons): Remove call to removed function.

2016-04-19  Brent Fulgham  <bfulgham@apple.com>

        Remove remaining bits of dynamic <link> rel='icon' loading
        https://bugs.webkit.org/show_bug.cgi?id=156727

        Reviewed by Darin Adler.

        Remove unused test infrastructure. This code never existed in WebKit2
        testing since was only used on Windows.

        * DumpRenderTree/TestRunner.cpp:
        (dumpIconChangesCallback): Deleted.
        * DumpRenderTree/TestRunner.h:
        (TestRunner::dumpIconChanges): Deleted.
        (TestRunner::setDumpIconChanges): Deleted.

2016-04-19  Keith Miller  <keith_miller@apple.com>

        ObjcInstance::stringValue should not call NSObject's description method
        https://bugs.webkit.org/show_bug.cgi?id=156758

        Reviewed by Geoffrey Garen.

        Add new methods to ObjCController that expose two Types of WebScriptObjects. The first is
        an NSObject and the second is an NSArray of NSObjects. These are used to test that we don't
        call the NSObjects description method without first swizzling it.

        * DumpRenderTree/mac/ObjCController.m:
        (+[ObjCController isSelectorExcludedFromWebScript:]):
        (+[ObjCController webScriptNameForSelector:]):
        (-[ObjCController testArrayOfObjects]):
        (-[ObjCController testObject]):

2016-04-18  Dan Bernstein  <mitz@apple.com>

        Fixed building with old Xcode.

        * TestWebKitAPI/Tests/WebKit2Cocoa/Preferences.mm:
        (TEST):

2016-04-18  Dean Jackson  <dino@apple.com>

        New SPI to export a dictionary of runtime features
        https://bugs.webkit.org/show_bug.cgi?id=156645
        <rdar://problem/23621666>

        Reviewed by Darin Adler.

        Test the experimental features SPI on WKPreferences.

        * TestWebKitAPI/Tests/WebKit2Cocoa/Preferences.mm:

2016-04-18  Yusuke Suzuki  <utatane.tea@gmail.com>

        [JSCOnly] Implement RunLoop and remove glib dependency
        https://bugs.webkit.org/show_bug.cgi?id=155706

        Reviewed by Michael Catanzaro.

        Add TestWTF to JSCOnly port to test WorkQueue and RunLoop.
        Platform specific ones locate under jsconly directory since
        it is not `generic` (Since it includes the GLIB event loop case).

        * CMakeLists.txt:
        * TestWebKitAPI/PlatformJSCOnly.cmake: Added.
        * TestWebKitAPI/PlatformUtilities.h:
        * TestWebKitAPI/Tests/WTF/RunLoop.cpp:
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/config.h:
        * TestWebKitAPI/jsconly/PlatformUtilitiesJSCOnly.cpp: Renamed from Source/WTF/wtf/none/RunLoopNone.cpp.
        (TestWebKitAPI::Util::run):
        (TestWebKitAPI::Util::sleep):
        * TestWebKitAPI/jsconly/main.cpp: Renamed from Source/WTF/wtf/none/WorkQueueNone.cpp.
        (main):

2016-04-18  Jon Lee  <jonlee@apple.com>

        Update Animometer plan.
        https://bugs.webkit.org/show_bug.cgi?id=156652

        Reviewed by Darin Adler.

        * Scripts/webkitpy/benchmark_runner/data/plans/animometer.plan: Update to r199616.

2016-04-18  Dana Burkart  <dburkart@apple.com>

        svn-apply: add option for ignoring changes to ChangeLog files
        https://bugs.webkit.org/show_bug.cgi?id=156618

        Reviewed by Darin Adler.

        This change adds a new option to svn-apply, --skip-changelogs, which short-circuits out of
        patch() if the file in question is a ChangeLog.

        * Scripts/svn-apply:
        (patch):

2016-04-18  Carlos Garcia Campos  <cgarcia@igalia.com>

        Pending API Request URL is wrong after reloading
        https://bugs.webkit.org/show_bug.cgi?id=139342

        Reviewed by Darin Adler.

        Update test case to check that the active URL should remain the
        same after a reload.

        * TestWebKitAPI/Tests/WebKit2/PendingAPIRequestURL.cpp:
        (TestWebKitAPI::TEST):

2016-04-18  Carlos Garcia Campos  <cgarcia@igalia.com>

        Pending API request URL no set when loading Data, Alternate HTML or plain text
        https://bugs.webkit.org/show_bug.cgi?id=136916

        Reviewed by Darin Adler.

        Add new test to check that active URL is the requested one right
        after calling WKPage load methods.

        * TestWebKitAPI/PlatformEfl.cmake:
        * TestWebKitAPI/PlatformGTK.cmake:
        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WebKit2/PendingAPIRequestURL.cpp: Added.
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/gtk/WebKit2Gtk/WebViewTest.cpp:
        (WebViewTest::loadPlainText): Remove FIXME.
        (WebViewTest::loadBytes): Ditto.
        (WebViewTest::loadAlternateHTML): Ditto.

2016-04-18  Commit Queue  <commit-queue@webkit.org>

        Unreviewed, rolling out r199660.
        https://bugs.webkit.org/show_bug.cgi?id=156691

        It broke the iOS build (Requested by KaL on #webkit).

        Reverted changeset:

        "Pending API request URL no set when loading Data, Alternate
        HTML or plain text"
        https://bugs.webkit.org/show_bug.cgi?id=136916
        http://trac.webkit.org/changeset/199660

2016-04-18  Carlos Garcia Campos  <cgarcia@igalia.com>

        Pending API request URL no set when loading Data, Alternate HTML or plain text
        https://bugs.webkit.org/show_bug.cgi?id=136916

        Reviewed by Darin Adler.

        Add new test to check that active URL is the requested one right
        after calling WKPage load methods.

        * TestWebKitAPI/PlatformEfl.cmake:
        * TestWebKitAPI/PlatformGTK.cmake:
        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WebKit2/PendingAPIRequestURL.cpp: Added.
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/gtk/WebKit2Gtk/WebViewTest.cpp:
        (WebViewTest::loadPlainText): Remove FIXME.
        (WebViewTest::loadBytes): Ditto.
        (WebViewTest::loadAlternateHTML): Ditto.

2016-04-18  Jeremy Huddleston Sequoia  <jeremyhu@apple.com>

        Fix incorrect assumption that APPLE implies Mac.
        https://bugs.webkit.org/show_bug.cgi?id=156679

        Addresses build failure introduced in r198947

        Reviewed by Alex Christensen.

        * CMakeLists.txt:

2016-04-18  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] Test /webkit2/WebKitWebView/mouse-target fails with overlay scrollbars
        https://bugs.webkit.org/show_bug.cgi?id=156621

        Reviewed by Martin Robinson.

        This is a problem of the test itself, we are using an overflow that is not actually scrollable, but that shows
        scrollbar troughs when not using overlay scrollbars because it's marked as scrollable. It would be easier to
        simply use the main frame scrollbars to test that and it will work no matter of scrollbars are overlay or not.

        * TestWebKitAPI/Tests/WebKit2Gtk/TestUIClient.cpp:
        (testWebViewMouseTarget): Remove the div and move the mouse over the main frame scrollbar to test scrolbars hit test.

2016-04-17  Gyuyoung Kim  <gyuyoung.kim@webkit.org>

        [EFL] Bump gstreamer from 1.4.4 to 1.6.3
        https://bugs.webkit.org/show_bug.cgi?id=156655

        Reviewed by Antonio Gomes.

        To support html5 video feature, we should bump gstreamer version.

        * efl/jhbuild.modules:
        * efl/patches/gst-libav.patch: Update against newer version.
        * efl/patches/gst-plugins-bad-remove-gnustep-support.patch: Removed because this patch was merged.

2016-04-16  Sam Weinig  <sam@webkit.org>

        More build fixing.

        * MiniBrowser/mac/BrowserWindowController.m:
        (-[BrowserWindowController share:]):

2016-04-16  Sam Weinig  <sam@webkit.org>

        Another build fix.

        * MiniBrowser/mac/BrowserWindowController.m:
        (-[BrowserWindowController sharingServicePicker:sharingServicesForItems:proposedSharingServices:]):

2016-04-16  Sam Weinig  <sam@webkit.org>

        Fix 32-bit build.

        * MiniBrowser/mac/BrowserWindowController.m:
        (-[BrowserWindowController share:]):
        (-[BrowserWindowController fetch:]):
        (-[BrowserWindowController sharingService:transitionImageForShareItem:contentRect:]):

2016-04-15  Sam Weinig  <sam@webkit.org>

        Add support for NSSharingService to MiniBrowser, for no great reasons
        https://bugs.webkit.org/show_bug.cgi?id=156658

        Reviewed by Darin Adler.

        * MiniBrowser/mac/BrowserWindow.xib:
        * MiniBrowser/mac/BrowserWindowController.h:
        Add the share button.

        * MiniBrowser/mac/BrowserWindowController.m:
        (-[BrowserWindowController windowDidLoad]):
        Set the share button to fire it's actions on mouse down, as it is supposed to act like a menu.

        (-[BrowserWindowController share:]):
        Show the picker when the button is pressed.
        (-[BrowserWindowController mainContentView]):
        Add a new override to get the main content view of derived classes (either a WKWebView or the WebView).

        (-[BrowserWindowController sharingServicePicker:sharingServicesForItems:proposedSharingServices:]):
        (-[BrowserWindowController sharingServicePicker:delegateForSharingService:]):
        (-[BrowserWindowController sharingServicePicker:didChooseSharingService:]):
        (-[BrowserWindowController sharingService:sourceFrameOnScreenForShareItem:]):
        (-[BrowserWindowController sharingService:transitionImageForShareItem:contentRect:]):
        (-[BrowserWindowController sharingService:sourceWindowForShareItems:sharingContentScope:]):
        Add delegate methods.

        * MiniBrowser/mac/WK1BrowserWindowController.m:
        (-[WK1BrowserWindowController mainContentView]):
        * MiniBrowser/mac/WK2BrowserWindowController.m:
        (-[WK2BrowserWindowController mainContentView]):
        Implement to return the web view.

2016-04-16  Alexey Proskuryakov  <ap@apple.com>

        Build fix.

        Temporary workaround for rdar://problem/25754945.

        * LayoutTestRelay/LayoutTestRelay/CoreSimulatorSPI.h:

2016-04-15  Commit Queue  <commit-queue@webkit.org>

        Unreviewed, rolling out r199600.
        https://bugs.webkit.org/show_bug.cgi?id=156642

        It didn't help (Requested by ap_ on #webkit).

        Reverted changeset:

        "Build fix."
        http://trac.webkit.org/changeset/199600

2016-04-15  Alexey Proskuryakov  <ap@apple.com>

        Build fix.

        * LayoutTestRelay/LayoutTestRelay/main.m: Allow some deprecated methods.

2016-04-14  Alexey Proskuryakov  <ap@apple.com>

        Some GuardMalloc bots are not happy when running many parallel processes
        https://bugs.webkit.org/show_bug.cgi?id=156614
        rdar://problem/24711525

        Reviewed by David Kilzer.

        * Scripts/webkitpy/port/mac.py: (MacPort.default_child_processes):

2016-04-14  Brent Fulgham  <bfulgham@apple.com>

        Make <a download> a runtime enabled option
        https://bugs.webkit.org/show_bug.cgi?id=156583
        <rdar://problem/25733449>

        Reviewed by Alex Christensen.

        * DumpRenderTree/mac/DumpRenderTree.mm:
        (resetWebPreferencesToConsistentValues):
        * WebKitTestRunner/InjectedBundle/InjectedBundle.cpp:
        (WTR::InjectedBundle::beginTesting):
        * WebKitTestRunner/InjectedBundle/TestRunner.cpp:
        (WTR::TestRunner::setDownloadAttributeEnabled):
        * WebKitTestRunner/InjectedBundle/TestRunner.h:

2016-04-14  Anders Carlsson  <andersca@apple.com>

        Another build fix attempt.

        * MiniBrowser/mac/WK2BrowserWindowController.m:

2016-04-14  Anders Carlsson  <andersca@apple.com>

        Fix build.

        * MiniBrowser/mac/WK2BrowserWindowController.m:
        (-[WK2BrowserWindowController webView:runOpenPanelWithParameters:initiatedByFrame:completionHandler:webView:runOpenPanelWithParameters:initiatedByFrame:completionHandler:]):

2016-04-14  Anders Carlsson  <andersca@apple.com>

        [Mac] Add API for open panel handling to WKWebView
        https://bugs.webkit.org/show_bug.cgi?id=137759
        rdar://problem/23278623

        Reviewed by Tim Horton.

        Have MiniBrowser implement the new delegate method.

        * MiniBrowser/mac/WK2BrowserWindowController.m:
        (-[WK2BrowserWindowController webView:runOpenPanelWithParameters:initiatedByFrame:completionHandler:]):

2016-04-14  Jiewen Tan  <jiewen_tan@apple.com>

        Unreviewed, rolling out r199554.

        The change breaks Yosemite Release/Debug build

        Reverted changeset:

        "[Mac] Add API for open panel handling to WKWebView"
        https://bugs.webkit.org/show_bug.cgi?id=137759
        http://trac.webkit.org/changeset/199554

2016-04-14  Anders Carlsson  <andersca@apple.com>

        [Mac] Add API for open panel handling to WKWebView
        https://bugs.webkit.org/show_bug.cgi?id=137759
        rdar://problem/23278623

        Reviewed by Tim Horton.

        Have MiniBrowser implement the new delegate method.

        * MiniBrowser/mac/WK2BrowserWindowController.m:
        (-[WK2BrowserWindowController webView:runOpenPanelWithParameters:initiatedByFrame:completionHandler:]):

2016-04-14  Jon Lee  <jonlee@apple.com>

        Update Animometer plan
        https://bugs.webkit.org/show_bug.cgi?id=156569

        Reviewed by Alex Christensen.

        * Scripts/webkitpy/benchmark_runner/data/plans/animometer.plan: Update to r199328. Includes update to screen
        resolution, starting with complexity of 1, and fixing SVG, multiply, and text tests.

2016-04-13  Alex Christensen  <achristensen@webkit.org>

        CMake MiniBrowser should be an app bundle
        https://bugs.webkit.org/show_bug.cgi?id=156521

        Reviewed by Brent Fulgham.

        * MiniBrowser/mac/CMakeLists.txt:
        Make an app bundle and compile nibs.
        * MiniBrowser/mac/Info.plist:
        CMake doesn't know what to do with :rfc1034identifier and there's no reason to keep it.  This is just MiniBrowser.

2016-04-13  Chris Dumez  <cdumez@apple.com>

        We should not speculatively revalidate cached redirects
        https://bugs.webkit.org/show_bug.cgi?id=156548
        <rdar://problem/25583886>

        Reviewed by Darin Adler.

        Re-enable speculative loading in the context of layout tests. This was
        turned off by mistake when speculative loading was turned into a
        setting recently.

        * WebKitTestRunner/TestController.cpp:
        (WTR::TestController::generatePageConfiguration):

2016-04-12  Alexey Proskuryakov  <ap@apple.com>

        Python test webkitpy.common.system.executive_unittest.ExecutiveTest.serial_test_kill_process is flaky
        https://bugs.webkit.org/show_bug.cgi?id=155367

        Reviewed by Darin Adler.

        * Scripts/webkitpy/common/system/executive.py: (Executive.kill_process):
        Don't flakily consume the return code with waitpid, callers need to do waitpid on
        their own. Not sure if this line of code was even intentional.

2016-04-12  Myles C. Maxfield  <mmaxfield@apple.com>

        [OS X] Flakey crash after ScrollAnimatorMac destruction
        https://bugs.webkit.org/show_bug.cgi?id=156372

        Reviewed by Darin Adler.

        Implement the new <!-- webkit-test-runner --> flag.

        * WebKitTestRunner/TestController.cpp:
        (WTR::TestController::createWebViewWithOptions):
        (WTR::TestController::ensureViewSupportsOptionsForTest):
        (WTR::TestController::resetPreferencesToConsistentValues):
        (WTR::TestController::resetStateToConsistentValues):
        (WTR::updateTestOptionsFromTestHeader):
        * WebKitTestRunner/TestController.h:
        * WebKitTestRunner/TestInvocation.cpp:
        (WTR::TestInvocation::invoke):
        * WebKitTestRunner/TestOptions.h:
        * WebKitTestRunner/mac/PlatformWebViewMac.mm:
        (WKR::PlatformWebView::viewSupportsOptions):

2016-04-12  Tomas Popela  <tpopela@redhat.com>

        Modify the CXXFLAGS in webkitdirs.pm just on architectures where the flags are supported
        https://bugs.webkit.org/show_bug.cgi?id=156338

        Reviewed by Michael Catanzaro.

        Add the "-march=pentium4 -msse2 -mfpmath=sse " into the CXXFLAGS just
        for the i686 where it is supported and not for other architectures
        (such as s390(x) and ppc(64)) where the build will fail with these
        CXXFLAGS.

        * Scripts/webkitdirs.pm:
        (generateBuildSystemFromCMakeProject):

2016-04-11  Alex Christensen  <achristensen@webkit.org>

        Build MiniBrowser with CMake on Mac
        https://bugs.webkit.org/show_bug.cgi?id=156471

        Reviewed by Daniel Bates.

        * CMakeLists.txt:
        * DumpRenderTree/CMakeLists.txt:
        * DumpRenderTree/PlatformWin.cmake:
        * MiniBrowser/mac/CMakeLists.txt: Added.

2016-04-11  Ryuan Choi  <ryuan.choi@navercorp.com>

        [EFL] Do not pass context to EwkViewCreate
        https://bugs.webkit.org/show_bug.cgi?id=156461

        Reviewed by Darin Adler.

        * TestWebKitAPI/Tests/WebKit2/CoordinatedGraphics/WKViewUserViewportToContents.cpp:
        (TestWebKitAPI::TEST): Removed context argument from EwkViewCreate calls.
        * TestWebKitAPI/efl/PlatformWebView.cpp:
        (TestWebKitAPI::PlatformWebView::PlatformWebView): Ditto.
        * WebKitTestRunner/efl/PlatformWebViewEfl.cpp:
        (WTR::PlatformWebView::PlatformWebView): Ditto.

2016-04-11  Fujii Hironori  <Hironori.Fujii@jp.sony.com>

        [CMake] Make FOLDER property INHERITED
        https://bugs.webkit.org/show_bug.cgi?id=156460

        Reviewed by Brent Fulgham.

        * CMakeLists.txt:
        * DumpRenderTree/CMakeLists.txt:
        * DumpRenderTree/PlatformWin.cmake:
        * ImageDiff/CMakeLists.txt:
        * MiniBrowser/efl/CMakeLists.txt:
        * MiniBrowser/gtk/CMakeLists.txt:
        * MiniBrowser/win/CMakeLists.txt:
        Set FOLDER property as a directory property not a target property

2016-04-10  Caitlin Potter  <caitp@igalia.com>

        [Tools] correctly check for braces in multiline branches in macro definition
        https://bugs.webkit.org/show_bug.cgi?id=156441

        Reviewed by Darin Adler.

        Prevents emitting whitespace/braces warning for code like the
        following:

        ```
        #define MACRO(x) \
            if (x) { \
                doTheThing(); \
                continue; \
            }
        ```

        * Scripts/webkitpy/style/checkers/cpp.py:
        (check_braces):
        * Scripts/webkitpy/style/checkers/cpp_unittest.py:
        (WebKitStyleTest.test_line_breaking):

2016-04-08  Youenn Fablet  <youenn.fablet@crf.canon.fr>

        Testharness-based tests that time out should be able to produce a detailed output
        https://bugs.webkit.org/show_bug.cgi?id=145313

        Reviewed by Xabier Rodriguez-Calvar.

        Adding timeout readonly accessor to TestRunner for both WK1 and WK2.

        * DumpRenderTree/TestRunner.cpp:
        (getTimeoutCallback): The js "timeout" property getter.
        (TestRunner::staticValues): Adding "timeout" property to DumpRenderTree so that testRunner.timeout called from JS returns the timeout value.
        * DumpRenderTree/TestRunner.h:
        (TestRunner::timeout): Adding access to DRT m_timeout private value.
        * WebKitTestRunner/InjectedBundle/Bindings/TestRunner.idl: Adding timeout readonly attribute so that testRunner.timeout can be called from JS.
        * WebKitTestRunner/InjectedBundle/TestRunner.h: Adding DOM timeout getter to implement timeout IDL definition.
        (WTR::TestRunner::timeout):

2016-04-07  Joseph Pecoraro  <pecoraro@apple.com>

        stylebot should know about TestWebKitAPI FeatureDefines.xcconfig
        https://bugs.webkit.org/show_bug.cgi?id=156387

        Rubber-stamped by Dan Bernstein.

        * Scripts/webkitpy/style/checkers/featuredefines.py:
        (FeatureDefinesChecker.check):

2016-04-07  Joseph Pecoraro  <pecoraro@apple.com>

        Remove ENABLE(ENABLE_ES6_CLASS_SYNTAX) guards
        https://bugs.webkit.org/show_bug.cgi?id=156384

        Reviewed by Ryosuke Niwa.

        * Scripts/webkitperl/FeatureList.pm:
        * TestWebKitAPI/Configurations/FeatureDefines.xcconfig:

2016-04-06  Dean Jackson  <dino@apple.com>

        Watchlist modifications:
        - remove roger_fong
        - add myself to a few areas
        - remove graouts from WebInspectorAPI

        * Scripts/webkitpy/common/config/watchlist:

2016-04-07  Simon Fraser  <simon.fraser@apple.com>

        Make it possible to test effect of view exposed rect on tiled backing
        https://bugs.webkit.org/show_bug.cgi?id=156365

        Reviewed by Tim Horton.

        Expose testRunner.setViewSize() and internals.setViewExposedRect() to enable
        testing of tile coverage when setViewExposedRect() is passed a non-null rectangle.

        testRunner.setViewSize() is used instead of using window.resizeTo(), since we
        can't easily resize a window to larger than the screen being tested on.

        * DumpRenderTree/TestRunner.cpp:
        (setViewSizeCallback):
        (TestRunner::staticFunctions):
        * DumpRenderTree/TestRunner.h:
        * DumpRenderTree/mac/TestRunnerMac.mm:
        (TestRunner::setViewSize):
        * WebKitTestRunner/InjectedBundle/Bindings/TestRunner.idl:
        * WebKitTestRunner/InjectedBundle/InjectedBundle.cpp:
        (WTR::InjectedBundle::postSetViewSize):
        * WebKitTestRunner/InjectedBundle/InjectedBundle.h:
        * WebKitTestRunner/InjectedBundle/TestRunner.cpp:
        (WTR::TestRunner::setViewSize):
        * WebKitTestRunner/InjectedBundle/TestRunner.h:
        * WebKitTestRunner/TestInvocation.cpp:
        (WTR::TestInvocation::didReceiveSynchronousMessageFromInjectedBundle):

2016-04-07  Jason Marcell  <jmarcell@apple.com>

        Adding layout tests for the bot watcher's dashboard QUnit tests.
        https://bugs.webkit.org/show_bug.cgi?id=155272

        Reviewed by Daniel Bates.

        Moved supporting resources into a resources folder and updated index.html accordingly
        to point to the new locations. Added code to tests.js to dumpAsText when QUnit is done.

        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Scripts/tests/index-expected.txt: Added.
        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Scripts/tests/index.html: Updated to point to tests.js and Mock files in resources directory.
        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Scripts/tests/resources/MockBuildbotQueue.js: Renamed from
        Tools/BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Scripts/tests/MockBuildbotQueue.js.
        (MockBuildbotQueue):
        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Scripts/tests/resources/MockBuildbotQueueView.js: Renamed from
        Tools/BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Scripts/tests/MockBuildbotQueueView.js.
        (MockBuildbotQueueView):
        (MockBuildbotQueueView.prototype._latestProductiveIteration):
        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Scripts/tests/resources/MockTrac.js: Renamed from
        Tools/BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Scripts/tests/MockTrac.js.
        (MockTrac):
        (MockTrac.prototype.get oldestRecordedRevisionNumber):
        (MockTrac.prototype.get latestRecordedRevisionNumber):
        (MockTrac.prototype.loadMoreHistoricalData):
        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Scripts/tests/resources/test-fixture-git-trac-rss.xml: Renamed from
        Tools/BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Scripts/tests/test-fixture-git-trac-rss.xml.
        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Scripts/tests/resources/test-fixture-trac-rss.xml: Renamed from
        Tools/BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Scripts/tests/test-fixture-trac-rss.xml.
        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Scripts/tests/resources/tests.js: Renamed from
        Tools/BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Scripts/tests/tests.js.
        Updated the unit tests for Trac._loaded() to point to the XML files that are now located in the 'resources' directory.
        (QUnit.done): Added. Removes machine-specific output from test results and calls testRunner.notifyDone to let the layout test harness know that all testing is done.
        * Scripts/run-dashboard-tests: Added.

2016-04-06  ChangSeok Oh  <changseok@webkit.org>

        Unreviewed, Update my primary email address and expertise.

        * Scripts/webkitpy/common/config/contributors.json:

2016-04-06  Jon Lee  <jonlee@apple.com>

        Update the Animometer patch and plan files
        https://bugs.webkit.org/show_bug.cgi?id=156263

        Reviewed by Ryosuke Niwa.

        Measure the latest set of tests by updating the plan revision to r199134.

        * Scripts/webkitpy/benchmark_runner/data/patches/Animometer.patch: Update to run the master suite only.
        * Scripts/webkitpy/benchmark_runner/data/plans/animometer.plan: Update to use the release page instead
        of the developer page.

2016-04-06  Saam barati  <sbarati@apple.com>

        jsc-layout-tests.yaml/js/script-tests/regress-141098.js failing on Yosemite Debug after r198989
        https://bugs.webkit.org/show_bug.cgi?id=156187

        Reviewed by Keith Miller.

        * Scripts/run-jsc-stress-tests:

2016-04-06  Alex Christensen  <achristensen@webkit.org>

        Compile WebKitTestRunner with CMake on Mac
        https://bugs.webkit.org/show_bug.cgi?id=156310

        Reviewed by Daniel Bates.

        * CMakeLists.txt:
        * WebKitTestRunner/CMakeLists.txt:
        * WebKitTestRunner/InjectedBundle/mac/InjectedBundleMac.mm:
        * WebKitTestRunner/PlatformEfl.cmake:
        * WebKitTestRunner/PlatformGTK.cmake:
        * WebKitTestRunner/PlatformMac.cmake: Added.

2016-04-05  Simon Fraser  <simon.fraser@apple.com>

        Implement operator== and operator!= for Optional<>
        https://bugs.webkit.org/show_bug.cgi?id=156266

        Reviewed by Anders Carlsson.

        * TestWebKitAPI/Tests/WTF/Optional.cpp:
        (TestWebKitAPI::TEST):

2016-04-05  Alex Christensen  <achristensen@webkit.org>

        Make CMake-generated binaries on Mac able to run
        https://bugs.webkit.org/show_bug.cgi?id=156268

        Reviewed by Daniel Bates.

        * DumpRenderTree/CMakeLists.txt:
        * DumpRenderTree/PlatformMac.cmake:
        * DumpRenderTree/PlatformWin.cmake:
        * TestWebKitAPI/PlatformMac.cmake:

2016-04-05  Youenn Fablet  <youenn.fablet@crf.canon.fr>

        [Fetch API] Add a runtime flag to fetch API and related constructs
        https://bugs.webkit.org/show_bug.cgi?id=156113
 
        Reviewed by Alex Christensen.

        * DumpRenderTree/TestRunner.h:
        * DumpRenderTree/mac/DumpRenderTree.mm:
        (resetWebPreferencesToConsistentValues):
        * WebKitTestRunner/InjectedBundle/InjectedBundle.cpp:
        (WTR::InjectedBundle::beginTesting):
        * WebKitTestRunner/InjectedBundle/TestRunner.cpp:
        (WTR::TestRunner::setWebGL2Enabled):
        (WTR::TestRunner::setFetchAPIEnabled):
        (WTR::TestRunner::setAllowUniversalAccessFromFileURLs):
        * WebKitTestRunner/InjectedBundle/TestRunner.h:

2016-04-05  Keith Miller  <keith_miller@apple.com>

        Make Keith a reviewer!
        https://bugs.webkit.org/show_bug.cgi?id=156246

        Reviewed by Mark Lam.

        * Scripts/webkitpy/common/config/contributors.json:

2016-04-05  Antoine Quint  <graouts@apple.com>

        [WebGL2] Allow enabling WebGL2 with a runtime flag
        https://bugs.webkit.org/show_bug.cgi?id=156166
        <rdar://problem/25526929>

        Always enable WebGL2 during testing.

        Reviewed by Dean Jackson.

        * DumpRenderTree/mac/DumpRenderTree.mm:
        (resetWebPreferencesToConsistentValues):
        * WebKitTestRunner/InjectedBundle/InjectedBundle.cpp:
        (WTR::InjectedBundle::beginTesting):
        * WebKitTestRunner/InjectedBundle/TestRunner.cpp:
        (WTR::TestRunner::setWebGL2Enabled):
        * WebKitTestRunner/InjectedBundle/TestRunner.h:

2016-04-04  Bill Ming  <mbbill@gmail.com>

        [win] run-webkit-tests failed to launch DumpRenderTree
        https://bugs.webkit.org/show_bug.cgi?id=156150

        Reviewed by Alex Christensen.

        * Tools/Scripts/webkitpy/port/base.py:

2016-04-04  Bill Ming  <mbbill@gmail.com>

        prepare-ChangeLog set endl incorrectly.
        https://bugs.webkit.org/show_bug.cgi?id=156151

        Reviewed by Alex Christensen.

        * Tools/Scripts/prepare-ChangeLog:

2016-04-03  Sam Weinig  <sam@webkit.org>

        Add SPI to allow install script message handlers in isolated worlds
        https://bugs.webkit.org/show_bug.cgi?id=156153

        Reviewed by Anders Carlsson.

        * TestWebKitAPI/Tests/WebKit2Cocoa/UserContentController.mm:
        Add new test, WKUserContentController.ScriptMessageHandlerBasicPostIsolatedWorld

2016-04-04  Jiewen Tan  <jiewen_tan@apple.com>

        Build fix for r198956.

        Unreviewed.

        * TestWebKitAPI/Tests/WebKit2Cocoa/LoadInvalidURLRequest.mm:
        (-[LoadInvalidURLNavigationActionDelegate webView:didFailProvisionalNavigation:withError:]):
        * TestWebKitAPI/Tests/mac/LoadInvalidURLRequest.mm:
        (-[LoadInvalidURLWebFrameLoadDelegate webView:didFailProvisionalLoadWithError:forFrame:]):

2016-04-04  Bill Ming  <mbbill@gmail.com>

        [win] prepare-ChangeLog should treat windows path differently.
        https://bugs.webkit.org/show_bug.cgi?id=156120

        Reviewed by Brent Fulgham.

        * Scripts/prepare-ChangeLog:

2016-04-04  Alejandro G. Castro  <alex@igalia.com>

        REGRESSION(r198492): [GTK] The WEB_RTC flag was not correctly added in some situations
        https://bugs.webkit.org/show_bug.cgi?id=156164

        Reviewed by Philippe Normand.

        Enable the new WEB_RTC option by default for Gtk+.

        * Scripts/webkitperl/FeatureList.pm:

2016-04-03  Dan Bernstein  <mitz@apple.com>

        Use the correct value for the first nightly build with frameworks built for OS X 10.11.

        * Scripts/bisect-builds:
        (makeNightlyList):

2016-04-03  Dan Bernstein  <mitz@apple.com>

        Made bisect-builds work again.

        Rubber-stamped by Sam Weinig.

        * Scripts/bisect-builds:
        Changed to use HTTPS to access nightly.webkit.org, and added a minimum revision for OS X 10.11.

2016-04-01  Jiewen Tan  <jiewen_tan@apple.com>

        Build fix for r198956.

        Unreviewed.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WebKit2Cocoa/ProvisionalURLNotChange.mm: Renamed from Tools/TestWebKitAPI/Tests/WebKit2Cocoa/ProvisionalURLChange.mm.
        (-[ProvisionalURLNotChangeController webView:didFinishNavigation:]):
        (-[ProvisionalURLNotChangeController webView:didFailProvisionalNavigation:withError:]):
        (TEST):
        * TestWebKitAPI/Tests/WebKit2ObjC/CustomProtocolsInvalidScheme.mm:
        (-[LoadInvalidSchemeDelegate browsingContextController:didFailProvisionalLoadWithError:]):
        (TestWebKitAPI::TEST):

2016-04-01  Jiewen Tan  <jiewen_tan@apple.com>

        WebKit should dispatchDidFailProvisionalLoad while loading invalid URLs
        https://bugs.webkit.org/show_bug.cgi?id=155995
        <rdar://problem/14967004>

        Reviewed by Andy Estes.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WebKit2Cocoa/LoadAlternateHTMLString.mm:
        (-[LoadAlternateHTMLStringFromProvisionalLoadErrorController webView:didFailProvisionalNavigation:withError:]):
        (-[LoadAlternateHTMLStringFromProvisionalLoadErrorController webView:didStartProvisionalNavigation:]):
        (TEST):
        * TestWebKitAPI/Tests/WebKit2Cocoa/LoadInvalidURLRequest.mm: Added.
        (literalURL):
        (-[LoadInvalidURLNavigationActionDelegate webView:didCommitNavigation:]):
        (-[LoadInvalidURLNavigationActionDelegate webView:didFailProvisionalNavigation:withError:]):
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/mac/LoadInvalidURLRequest.html: Added.
        * TestWebKitAPI/Tests/mac/LoadInvalidURLRequest.mm: Added.
        (-[LoadInvalidURLWebFrameLoadDelegate webView:didCommitLoadForFrame:]):
        (-[LoadInvalidURLWebFrameLoadDelegate webView:didFailProvisionalLoadWithError:forFrame:]):
        (TestWebKitAPI::TEST):

2016-04-01  Brent Fulgham  <bfulgham@apple.com>

        Confirm <a download> satisfies specification criteria
        https://bugs.webkit.org/show_bug.cgi?id=156057

        Reviewed by Andy Estes.

        Revise WebKitTestRunner:
        (1) Provide a download client delegate.
        (2) Teach WKTR to wait to finish a test until a download finishes.
        (3) Allow WKTR to notify the current TestRunner that it can finish.

        * WebKitTestRunner/InjectedBundle/Bindings/TestRunner.idl:
        * WebKitTestRunner/InjectedBundle/InjectedBundle.cpp:
        (WTR::InjectedBundle::didReceiveMessageToPage): Update to recognize a new
        message "NotifyDownloadDone".
        * WebKitTestRunner/InjectedBundle/InjectedBundlePage.cpp:
        (WTR::InjectedBundlePage::decidePolicyForNavigationAction): Handle 'download'
        attribute case.
        * WebKitTestRunner/InjectedBundle/TestRunner.cpp:
        (WTR::TestRunner::waitUntilDownload): Added.
        * WebKitTestRunner/InjectedBundle/TestRunner.h:
        (WTR::TestRunner::shouldFinishAfterDownload): Added.
        * WebKitTestRunner/TestController.cpp:
        (WTR::TestController::createWebViewWithOptions): Set up the download client.
        (WTR::TestController::downloadDidStart): Added.
        (WTR::TestController::decideDestinationWithSuggestedFilename): Added.
        (WTR::TestController::downloadDidFinish): Added.
        (WTR::TestController::downloadDidFail): Added.
        (WTR::TestController::downloadDidCancel): Added.
        * WebKitTestRunner/TestController.h:
        * WebKitTestRunner/TestInvocation.cpp:
        (WTR::TestInvocation::notifyDownloadDone): Added.
        * WebKitTestRunner/TestInvocation.h:

2016-04-01  Alex Christensen  <achristensen@webkit.org>

        Compile DumpRenderTree with CMake on Mac
        https://bugs.webkit.org/show_bug.cgi?id=156088

        Reviewed by Brent Fulgham.

        * CMakeLists.txt:
        * DumpRenderTree/CMakeLists.txt:
        * DumpRenderTree/DefaultPolicyDelegate.m:
        (-[DefaultPolicyDelegate webView:decidePolicyForNavigationAction:request:frame:decisionListener:]):
        * DumpRenderTree/DumpRenderTreeFileDraggingSource.m:
        * DumpRenderTree/PlatformMac.cmake: Added.
        * DumpRenderTree/PlatformWin.cmake:
        * DumpRenderTree/mac/AppleScriptController.m:
        (convertAEDescToObject):
        * DumpRenderTree/mac/DumpRenderTreeMain.mm:
        * DumpRenderTree/mac/LayoutTestHelper.m:

2016-03-31  Bill Ming  <mbbill@gmail.com>

        https://bugs.webkit.org/show_bug.cgi?id=156094
        [Win] TestWebCore target build sometimes fail.

        Reviewed by Alex Christensen.

        * Tools/TestWebKitAPI/PlatformWin.cmake:

2016-03-31  Gyuyoung Kim  <gyuyoung.kim@webkit.org>

        [EFL] Bump EFL version to 1.17.0
        https://bugs.webkit.org/show_bug.cgi?id=153008

        Reviewed by Michael Catanzaro.

        Original author is Csaba Osztrogonác  <ossy@webkit.org>

        * efl/jhbuild.modules:

2016-03-31  Daniel Bates  <dabates@apple.com>

        run-webkit-tests fails to create user's cache directory when System Integrity Protection is enabled
        https://bugs.webkit.org/show_bug.cgi?id=156071
        <rdar://problem/25467827>

        Reviewed by Brent Fulgham.

        Fixes an issue where run-webkit-tests will fail to create the suffixed user's cache directory
        on non-Apple Internal machines with System Integrity Protection enabled because the OS only
        honors the suffix, specified by the environment variable DIRHELPER_USER_DIR_SUFFIX, in
        privileged processes. And python(1) does not have sufficient privileges. As a workaround for
        systems that have System Integrity Protection enabled we compute the path to the suffixed
        user's cache directory by hand.

        Additionally, fix an issue where the user's cache directory created by run-webkit-test was
        never deleted on cessation of the test run.

        * Scripts/webkitpy/port/driver.py:
        (Driver._start): Actually store the path to the user's cache directory in self._driver_user_cache_directory
        so that we can delete this directory on cessation of the test run.
        * Scripts/webkitpy/port/mac.py:
        (MacPort):
        (MacPort._path_to_user_cache_directory): Unset the environment variable DIRHELPER_USER_DIR_SUFFIX (if set),
        query the OS for the path to the user's cache directory and concatenate this path with the
        specified suffix.

2016-03-31  Jiewen Tan  <jiewen_tan@apple.com>

        WebKit should set Original URL of a download request correctly
        https://bugs.webkit.org/show_bug.cgi?id=155914
        <rdar://problem/10473811>

        Reviewed by Anders Carlsson.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WebKit2Cocoa/Download.mm:
        (-[DownloadRequestOriginalURLDelegate initWithExpectOriginalURL:]):
        (-[DownloadRequestOriginalURLDelegate _downloadDidStart:]):
        (-[DownloadRequestOriginalURLNavigationDelegate webView:decidePolicyForNavigationAction:decisionHandler:]):
        (TEST):
        * TestWebKitAPI/Tests/WebKit2Cocoa/DownloadRequestOriginalURL.html: Added.
        * TestWebKitAPI/Tests/WebKit2Cocoa/DownloadRequestOriginalURL2.html: Added.
        * TestWebKitAPI/Tests/WebKit2Cocoa/DownloadRequestOriginalURLFrame.html: Added.

2016-03-30  Dewei Zhu  <dewei_zhu@apple.com>

        Extend animometer timeout for slow CPUs.
        https://bugs.webkit.org/show_bug.cgi?id=156047

        Reviewed by Ryosuke Niwa.

        Extend animometer timeout to 30 minutes for slow device.

        * Scripts/webkitpy/benchmark_runner/data/plans/animometer.plan:

2016-03-30  Daniel Bates  <dabates@apple.com>

        run-webkit-tests must create parent directory of user's cache directory before running tests
        https://bugs.webkit.org/show_bug.cgi?id=156009
        <rdar://problem/25442682>

        Reviewed by Alexey Proskuryakov.

        The script run-webkit-tests must create the parent directory of the user's cache directory
        before running tests because a WebKit2 child process expects that this directory exists
        when it starts.

        The script run-webkit-tests influences the path chosen by a WebKit2 child process for the
        user's temporary directory and user's cache directory via the environment variable
        DIRHELPER_USER_DIR_SUFFIX. For the user's temporary directory, run-webkit-tests creates it
        as part of setting up the test environment. But run-webkit-tests does not create the user's
        cache directory. Therefore there is race between the time AppKit creates it and when the
        launched WebContent and Network processes query for the path to the user's cache directory
        such that the OS may return the empty string to the WebContent and Network processes if
        queried for this directory before AppKit creates it.

        * Scripts/webkitpy/port/base.py:
        (Port._path_to_user_cache_directory): Added. Base class implementation that returns the
        empty string. We will override this method for the OS X port to return the path to the
        user's cache directory with the specified suffix.
        (Port.remove_cache_directory): Deleted.
        * Scripts/webkitpy/port/driver.py:
        (Driver.__init__): Initialize self._driver_user_directory_suffix and self._driver_user_cache_directory
        to the suffix to use for the user's temporary and cache directories and the path to the
        user's cache directory, respectively.
        (Driver._setup_environ_for_driver): Modified to set the environment variable DIRHELPER_USER_DIR_SUFFIX
        to self._driver_user_directory_suffix.
        (Driver._start): Compute the user directory suffix and the path to the user's cache
        directory. Create the user's cache directory (if applicable).
        (Driver.stop): Modified to remove directory self._driver_user_cache_directory (if applicable).
        * Scripts/webkitpy/port/mac.py:
        (MacPort.user_cache_directory): Added. Overrides Port._path_to_user_cache_directory().
        (MacPort.remove_cache_directory): Deleted.

2016-03-29  Benjamin Poulain  <bpoulain@apple.com>

        [WTF] Removing a smart pointer from HashTable issues two stores to the same location
        https://bugs.webkit.org/show_bug.cgi?id=155676

        Reviewed by Darin Adler.

        * TestWebKitAPI/Tests/WTF/HashMap.cpp:
        * TestWebKitAPI/Tests/WTF/HashSet.cpp:

2016-03-29  Srinivasan Vijayaraghavan  <svijayaraghavan@apple.com>

        Add machine-readable results for JSC stress tests
        https://bugs.webkit.org/show_bug.cgi?id=155771

        Reviewed by Darin Adler and Dean Johnson

        Add an option to output JSC stress test results to a user-specified file in JSON format.

        * Scripts/run-javascriptcore-tests:
        (runJSCStressTests): Add JSON output support
        (readAllLines): Remove trailing newline from the end of each item

2016-03-29  Alex Christensen  <achristensen@webkit.org>

        Fix Windows build.

        * TestWebKitAPI/PlatformWin.cmake:

2016-03-29  Timothy Hatcher  <timothy@apple.com>

        Update WebKit nightly to have a red needle to better match Safari

        https://bugs.webkit.org/show_bug.cgi?id=155983

        Reviewed by Joseph Pecoraro.

        * WebKitLauncher/webkit.icns:

2016-03-28  Joanmarie Diggs  <jdiggs@igalia.com>

        Adding myself as a reviewer.

        Unreviewed.

        * Scripts/webkitpy/common/config/contributors.json:

2016-03-25  Dewei Zhu  <dewei_zhu@apple.com>

        Dromaeo patch used by run-benchmark should not include an invalid address.
        https://bugs.webkit.org/show_bug.cgi?id=155910

        Reviewed by Ryosuke Niwa.

        Should not use invalid 'http://127.0.0.1/Icons/w3c_home' in the patched version of test.
        * Scripts/webkitpy/benchmark_runner/data/patches/Dromaeo.patch:

2016-03-25  Daniel Bates  <dabates@apple.com>

        Add WebKitSystemInterface for iOS 9.3
        https://bugs.webkit.org/show_bug.cgi?id=155893

        Rubber-stamped by Alexey Proskuryakov.

        * Scripts/copy-webkitlibraries-to-product-directory:

2016-03-25  Daniel Bates  <dabates@apple.com>

        Use webkitdirs::determineXcodeSDK() instead of webkitdirs::willUseIOSDeviceSDK()
        in copy-webkitlibraries-to-product-directory
        https://bugs.webkit.org/show_bug.cgi?id=155869

        Reviewed by Alexey Proskuryakov.

        It is sufficient and more direct to call webkitdirs::determineXcodeSDK() instead of
        webkitdirs::willUseIOSDeviceSDK() to process the --sdk/--device/--ios-simulator command
        line argument.

        * Scripts/copy-webkitlibraries-to-product-directory:

2016-03-25  Konstantin Tokarev  <annulen@yandex.ru>

        Turned on ENABLE_REQUEST_ANIMATION_FRAME by default for any port.
        https://bugs.webkit.org/show_bug.cgi?id=155882

        Reviewed by Michael Catanzaro.

        It was already enabled in all trunk ports, and is required for
        WebInspectorUI to work.

        * Scripts/webkitperl/FeatureList.pm:

2016-03-24  Jeremy Zerfas  <WebKit@JeremyZerfas.com>

        Improve update-webkit-dependency script.
        https://bugs.webkit.org/show_bug.cgi?id=155576

        Reviewed by Brent Fulgham.

        * Scripts/update-webkit-dependency:
        -Updated script to also use ETags for helping to determine whether dependency is up to date.
        -Updated script so it usually won't need to download the entire dependency each time it is
         ran.
        -Updated script to ensure zip file contains expected directories before trying to install.
        -Added some more error checking and improved error messages.
        (lastModifiedToUnixTime): Deleted.

        * Scripts/update-webkit-wincairo-libs:
        -Corrected comment about what script does.

2016-03-24 Bill Ming <mbbill@gmail.com>

        Fix webkitpy tests after r198617
        https://bugs.webkit.org/show_bug.cgi?id=155827

        Reviewed by Alex Christensen.

        * Scripts/webkitpy/tool/steps/confirmdiff.py:
        (ConfirmDiff._show_pretty_diff):

2016-03-23  Bill Ming  <mbbill@gmail.com>

        webkit-patch failed to open pretty diff on Windows
        https://bugs.webkit.org/show_bug.cgi?id=155827

        Reviewed by Alex Christensen.

        * Scripts/webkitpy/tool/steps/confirmdiff.py:
        (ConfirmDiff._show_pretty_diff):

2016-03-23  Jer Noble  <jer.noble@apple.com>

        [ios-sim] RequiresUserActionForPlaybackTest.DoesNotRequireUserActionForMediaPlayback and RequiresUserActionForVideoButNotAudioPlayback failing
        https://bugs.webkit.org/show_bug.cgi?id=155764

        Reviewed by Eric Carlson.

        Remove the requirement for media elements to have webkit-playsinline attributes on iOS.

        * TestWebKitAPI/Tests/WebKit2Cocoa/RequiresUserActionForPlayback.mm:
        (RequiresUserActionForPlaybackTest::SetUp):

2016-03-23  Anders Carlsson  <andersca@apple.com>

        Crash when using KVO from within -[WebView initWithCoder:]
        https://bugs.webkit.org/show_bug.cgi?id=155816
        rdar://problem/17073265

        Reviewed by Dan Bernstein.

        Add test.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/mac/EarlyKVOCrash.mm: Added.
        (-[EarlyKVOCrashResponder initWithWebView:]):
        (-[EarlyKVOCrashResponder initWithCoder:]):
        (-[EarlyKVOCrashResponder dealloc]):
        (-[EarlyKVOCrashResponder encodeWithCoder:]):
        (TestWebKitAPI::TEST):

2016-03-23  Lucas Forschler  <lforschler@apple.com>

        Teach kill-old-processes about perl 5.18.
        
        Reviewed by Alexey Proskuryakov

        * BuildSlaveSupport/kill-old-processes:
        (main):

2016-03-22  Keith Rollin  <krollin@apple.com>

        Unreviewed: add Keith Rollin to the committers list.

        * Scripts/webkitpy/common/config/contributors.json:

2016-03-22  Per Arne Vollan  <peavo@outlook.com>

        [Win] [64-bit] Remove MSVC 2013 FMA3 Bug Workaround
        https://bugs.webkit.org/show_bug.cgi?id=141499

        Reviewed by Brent Fulgham.

        As we have moved on to VS2015, this workaround is no longer needed.

        * DumpRenderTree/cg/ImageDiffCG.cpp:
        (main):
        * DumpRenderTree/win/DumpRenderTree.cpp:
        (main):
        * DumpRenderTree/win/ImageDiffCairo.cpp:
        (main):
        * MiniBrowser/win/Common.cpp:
        (DllMain):
        * TestWebKitAPI/win/main.cpp:
        (main):
        * win/DLLLauncher/DLLLauncherMain.cpp:
        (wWinMain):

2016-03-22  Yusuke Suzuki  <utatane.tea@gmail.com>

        [JSC] ASMBench cannot be run without JSBENCH_PATH
        https://bugs.webkit.org/show_bug.cgi?id=155751

        Reviewed by Saam Barati.

        Check ASMBENCH_PATH instead of JSBENCH_PATH for ASMBench files.

        * Scripts/run-jsc-benchmarks:

2016-03-21  Brent Fulgham  <bfulgham@apple.com>

        [Win] SharedBuffer::copy() can cause a segmentation fault.
        https://bugs.webkit.org/show_bug.cgi?id=155739

        Reviewed by Ryosuke Niwa.

        * TestWebKitAPI/PlatformWin.cmake: Build and run the
        SharedBuffer tests.

2016-03-22  Csaba Osztrogonác  <ossy@webkit.org>

        [buildbot] Move ARM Linux bots to JSCOnly port
        https://bugs.webkit.org/show_bug.cgi?id=155655

        Reviewed by Lucas Forschler.

        * BuildSlaveSupport/build.webkit.org-config/config.json:
        * BuildSlaveSupport/build.webkit.org-config/master.cfg:
        (ConfigureBuild.__init__):
        (appendCustomBuildFlags):
        (CompileJSCOnly):
        (Factory.__init__):
        (BuildAndRemoteJSCTestsFactory):
        (BuildAndRemoteJSCTestsFactory.__init__):
        * BuildSlaveSupport/build.webkit.org-config/mastercfg_unittest.py:
        * BuildSlaveSupport/clean-build:
        (main):

2016-03-21  Brent Fulgham  <bfulgham@apple.com>

        Improve SharedBuffer testing
        https://bugs.webkit.org/show_bug.cgi?id=93078
        <rdar://problem/25277829>

        Reviewed by Ryosuke Niwa.

        Based on a Blink patch by Huang Dongsung <luxtella@company100.net>.
        <https://src.chromium.org/viewvc/blink?revision=153850&view=revision,
        and a Blink patch by <tyoshino@chromium.org>
        <https://src.chromium.org/viewvc/blink?view=rev&revision=151617>

        Add three test cases from the Blink project that cover various append,
        copy, and createArrayBuffer calls.

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

2016-03-21  Hyungwook Lee  <hyungwook.lee@navercorp.com>

        [Win] Connect layoutTestController.findString() to support testing
        https://bugs.webkit.org/show_bug.cgi?id=50234

        Reviewed by Alex Christensen.

        Implement TestRunner::findString().

        * DumpRenderTree/win/TestRunnerWin.cpp:
        (TestRunner::findString):

2016-03-20  Dan Bernstein  <mitz@apple.com>

        [Mac] Determine TARGET_MAC_OS_X_VERSION_MAJOR from MACOSX_DEPLOYMENT_TARGET rather than from MAC_OS_X_VERSION_MAJOR
        https://bugs.webkit.org/show_bug.cgi?id=155707
        <rdar://problem/24980691>

        Reviewed by Darin Adler.

        * ContentExtensionTester/Configurations/Base.xcconfig: Set TARGET_MAC_OS_X_VERSION_MAJOR
          based on the last component of MACOSX_DEPLOYMENT_TARGET.
        * ContentExtensionTester/Configurations/DebugRelease.xcconfig: For engineering builds,
          preserve the behavior of TARGET_MAC_OS_X_VERSION_MAJOR being the host’s OS version.

        Similarly for these projects:

        * DumpRenderTree/mac/Configurations/Base.xcconfig:
        * DumpRenderTree/mac/Configurations/DebugRelease.xcconfig:
        * LayoutTestRelay/Configurations/Base.xcconfig:
        * LayoutTestRelay/Configurations/DebugRelease.xcconfig:
        * MiniBrowser/Configurations/Base.xcconfig:
        * MiniBrowser/Configurations/DebugRelease.xcconfig:
        * TestWebKitAPI/Configurations/Base.xcconfig:
        * TestWebKitAPI/Configurations/DebugRelease.xcconfig:
        * WebEditingTester/Configurations/Base.xcconfig:
        * WebEditingTester/Configurations/DebugRelease.xcconfig:
        * WebKitTestRunner/Configurations/Base.xcconfig:
        * WebKitTestRunner/Configurations/DebugRelease.xcconfig:

2016-03-20  Dan Bernstein  <mitz@apple.com>

        Update build settings

        Rubber-stamped by Andy Estes.

        * ContentExtensionTester/Configurations/DebugRelease.xcconfig:
        * DumpRenderTree/mac/Configurations/DebugRelease.xcconfig:
        * LayoutTestRelay/Configurations/DebugRelease.xcconfig:
        * MiniBrowser/Configurations/DebugRelease.xcconfig:
        * TestWebKitAPI/Configurations/DebugRelease.xcconfig:
        * TestWebKitAPI/Configurations/FeatureDefines.xcconfig: Synced up to the ones in ../Source.
        * WebEditingTester/Configurations/DebugRelease.xcconfig:
        * WebKitTestRunner/Configurations/DebugRelease.xcconfig:
        * asan/asan.xcconfig:

2016-03-18  Sam Weinig  <sam@webkit.org>

        Add test for HashMap::ensure that shows that moving into the lambda does not incure extra cost
        https://bugs.webkit.org/show_bug.cgi?id=155621

        Reviewed by Alex Christensen.

        * TestWebKitAPI/Tests/WTF/HashMap.cpp:
        (TestWebKitAPI::ObjectWithRefLogger::ObjectWithRefLogger):
        (TestWebKitAPI::testMovingUsingEnsure):
        (TestWebKitAPI::testMovingUsingAdd):
        Add tests ensuring that objects moved into a map using ensure don't
        have extra ref-churn.

2016-03-17  Tim Horton  <timothy_horton@apple.com>

        Fix some deprecation warnings in WebEditingTester
        https://bugs.webkit.org/show_bug.cgi?id=155601

        Reviewed by Simon Fraser.

        * WebEditingTester/AppDelegate.m:
        (-[WebEditingAppDelegate showOperations:]):
        (-[WebEditingAppDelegate _updateNewWindowKeyEquivalents]):

2016-03-17  Tim Horton  <timothy_horton@apple.com>

        Find-in-page indicator in Mail viewer is the wrong scale and cut off
        https://bugs.webkit.org/show_bug.cgi?id=155605
        <rdar://problem/23948165>

        Reviewed by Simon Fraser.

        * TestWebKitAPI/Tests/WebKit2Cocoa/FindInPage.mm:
        (TEST):
        Add a test that ensures that the find result image is correctly @2x.
        The NSImage size should be in points.

2016-03-16  Commit Queue  <commit-queue@webkit.org>

        Unreviewed, rolling out r198187.
        https://bugs.webkit.org/show_bug.cgi?id=155564

        Potentially break testing on iOS (Requested by Guest23 on
        #webkit).

        Reverted changeset:

        "Add twisted-15.5.0 module to
        webkitpy.thirdparty.autoinstalled."
        https://bugs.webkit.org/show_bug.cgi?id=154667
        http://trac.webkit.org/changeset/198187

2016-03-16  David Kilzer  <ddkilzer@apple.com>

        check-webkit-style: should warn about blank lines after #include "config.h" in TestWebKitAPI
        <http://webkit.org/b/155445>

        Reviewed by Darin Adler.

        * Scripts/webkitpy/style/checker.py:
        (_PATH_RULES_SPECIFIER): Do not ignore "build/include*" checks
        on TestWebKitAPI since this project uses a config.h header as of
        r95188.  Also remove references to WebKitAPITest, which ceased
        to exist in r95944.

        * Scripts/webkitpy/style/checker_unittest.py:
        (GlobalVariablesTest.test_path_rules_specifier): Add tests.
        Remove reference to WebKitAPITest project.

2016-03-16  Tim Horton  <timothy_horton@apple.com>

        [mac] Printing test snapshots are upside-down after r198242
        https://bugs.webkit.org/show_bug.cgi?id=155543

        Reviewed by Simon Fraser.

        * DumpRenderTree/mac/PixelDumpSupportMac.mm:
        (createPagedBitmapContext):
        Flip printing snapshots in DRT so that everything is right-side-up.

2016-03-16  Alexey Proskuryakov  <ap@apple.com>

        Update unit test for iOS debug queues.

        * BuildSlaveSupport/build.webkit.org-config/mastercfg_unittest.py:

2016-03-16  Jiewen Tan  <jiewen_tan@apple.com>

        URL Parsing should signal failure for illegal IDN
        https://bugs.webkit.org/show_bug.cgi?id=154945
        <rdar://problem/8014795>

        Reviewed by Brent Fulgham.

        * MiniBrowser/mac/WK2BrowserWindowController.m:
        (-[WK2BrowserWindowController fetch:]):
        * TestWebKitAPI/Tests/Cocoa/URLExtras.mm:
        (TestWebKitAPI::TEST):

2016-03-15  Tim Horton  <timothy_horton@apple.com>

        [iOS Simulator] Test result snapshots are upside down
        https://bugs.webkit.org/show_bug.cgi?id=154761

        Reviewed by Simon Fraser.

        * WebKitTestRunner/cg/TestInvocationCG.cpp:
        (WTR::createCGContextFromImage):
        (WTR::TestInvocation::dumpPixelsAndCompareWithExpected):
        In r97104, Simon added code to take WindowServer snapshots, which came
        in flipped, and added code to flip them back. At this point, WindowServer
        snapshots got flipped, and software snapshots did not.

        In r140067, Simon noticed that WindowServer ref test images were upside-down
        on Mac (not sure why this changed), so turned off the flipping code (but
        didn't delete it!). Now, WindowServer snapshots and software snapshots both
        are not flipped.

        In r190304, Carlos added an enum for the source of the snapshot ("WebView"
        for window server snapshots, and "WebContent" for software snapshots),
        and - critically - changed the flipping logic to flip software snapshots!

        We didn't notice this on Mac because at this point we've made it so that
        we *always* have WindowServer snapshots, but on iOS we still don't have
        WindowServer snapshots, so now they're flipped.

        And that's how we got here.

        To restore the behavior from r140067, and correctly unflip snapshots on
        iOS, just delete this code.

2016-03-15  Alexey Proskuryakov  <ap@apple.com>

        run-api-tests doesn't print test name when the test crashes
        https://bugs.webkit.org/show_bug.cgi?id=155476

        Reviewed by Daniel Bates.

        * Scripts/run-api-tests: Print "UNEXPECTEDLY EXITED" with a test name when output
        doesn't contain the test name yet. Changed test name output to always be before raw
        stdout for clarity.

2016-03-15  Chris Dumez  <cdumez@apple.com>

        Unreviewed, rolling out r198203.

        Favorites view is no longer loading on iOS

        Reverted changeset:

        "URL Parsing should signal failure for illegal IDN"
        https://bugs.webkit.org/show_bug.cgi?id=154945
        http://trac.webkit.org/changeset/198203

2016-03-15  Jiewen Tan  <jiewen_tan@apple.com>

        URL Parsing should signal failure for illegal IDN
        https://bugs.webkit.org/show_bug.cgi?id=154945
        <rdar://problem/8014795>

        Reviewed by Brent Fulgham.

        * MiniBrowser/mac/WK2BrowserWindowController.m:
        (-[WK2BrowserWindowController fetch:]):
        * TestWebKitAPI/Tests/Cocoa/URLExtras.mm:
        (TestWebKitAPI::TEST):

2016-03-14  Chris Dumez  <cdumez@apple.com>

        Unreviewed, rolling out r197981.

        Caused a massive PLT regression on Mac.

        Reverted changeset:

        "Font antialiasing (smoothing) changes when elements are
        rendered into compositing layers"
        https://bugs.webkit.org/show_bug.cgi?id=23364
        http://trac.webkit.org/changeset/197981

2016-03-14  Dewei Zhu  <dewei_zhu@apple.com>

        Add twisted-15.5.0 module to webkitpy.thirdparty.autoinstalled.
        https://bugs.webkit.org/show_bug.cgi?id=154667

        Reviewed by Ryosuke Niwa and Simon Fraser.

        Add twisted-15.5.0 to webkitpy.thirdparty.autoinstalled.
        Minor fix for twsited_http_server used by run-benchmark that we should only stop http server while recieving 'GET /shutdown'.

        * Scripts/webkitpy/benchmark_runner/http_server_driver/http_server/twisted_http_server.py:
        (ServerControl.render_POST): Deleted.
        * Scripts/webkitpy/thirdparty/__init__.py:
        (AutoinstallImportHook.find_module):
        (AutoinstallImportHook._install_twisted_15_5_0):
        * Scripts/webkitpy/thirdparty/__init___unittest.py:
        (ThirdpartyTest.test_imports):

2016-03-14  Mark Lam  <mark.lam@apple.com>

        Need to distinguish between Symbol() and Symbol("").
        https://bugs.webkit.org/show_bug.cgi?id=155438

        Reviewed by Saam Barati.

        * TestWebKitAPI/Tests/WTF/StringImpl.cpp:
        (TestWebKitAPI::TEST):
        - Test that the a symbol with an empty string is not equivalent to a null symbol. 

2016-03-14  David Kilzer  <ddkilzer@apple.com>

        Remove blank lines after #include "config.h"

        Follow-up fix from review comments on Bug 155394.

        * TestWebKitAPI/PlatformUtilities.cpp:
        * TestWebKitAPI/Tests/WTF/RefLogger.cpp:

2016-03-14  Frederic Wang  <fred.wang@free.fr>

        Unreviewed: Add my professional email address.

        * Scripts/webkitpy/common/config/contributors.json:

2016-03-14  Youenn Fablet  <youenn.fablet@crf.canon.fr>

        Web platform test server should not try to launch servers on already bound sockets
        https://bugs.webkit.org/show_bug.cgi?id=141157

        Reviewed by Darin Adler.

        * Scripts/webkitpy/layout_tests/servers/web_platform_test_server.py:
        (wpt_config_json): Load WPT config from LayoutTests/imported/w3c/resources/config.json.
        (base_url): Refactored to use wpt_config_json routine.
        (WebPlatformTestServer.__init__): Fill port mappings according WPT config.

2016-03-13  Joseph Pecoraro  <pecoraro@apple.com>

        Remove ENABLE(ES6_TEMPLATE_LITERAL_SYNTAX) guards
        https://bugs.webkit.org/show_bug.cgi?id=155417

        Reviewed by Yusuke Suzuki.

        * Scripts/webkitperl/FeatureList.pm:
        * TestWebKitAPI/Configurations/FeatureDefines.xcconfig:

2016-03-13  Dean Jackson  <dino@apple.com>

        DRT should enable WebGL by default on Mac
        https://bugs.webkit.org/show_bug.cgi?id=155419
        <rdar://problem/25136981>

        Reviewed by Sam Weinig.

        For some reason, lost in time, WebGL was enabled
        by default on trunk, but disabled by default
        in DumpRenderTree when using WebKit 1. This
        was very annoying, because each test had
        an explicit command to enable it.

        * DumpRenderTree/mac/DumpRenderTree.mm:
        (resetWebPreferencesToConsistentValues): Deleted WebGL line.

2016-03-13  Konstantin Tokarev  <annulen@yandex.ru>

        Added new port JSCOnly.
        https://bugs.webkit.org/show_bug.cgi?id=154512

        Reviewed by Michael Catanzaro.

        This port allows to build JavaScriptCore engine with minimal
        dependencies.

        * Scripts/build-jsc:
        * Scripts/webkitdirs.pm:
        (argumentsForConfiguration):
        (executableProductDir):
        (determinePortName):
        (isJSCOnly):
        (wrapperPrefixIfNeeded):
        (generateBuildSystemFromCMakeProject):
        (buildCMakeGeneratedProject):

2016-03-13  David Kilzer  <ddkilzer@apple.com>

        TestWebKitAPI: fix linker warnings
        <http://webkit.org/b/155394>

        Reviewed by Darin Adler.

        * TestWebKitAPI/CMakeLists.txt:
        - Add RefLogger.cpp source file.
        - Add other missing cross-platform source files.
        - Add FIXMEs about RunLoop.cpp and about missing
          platform-specific source files.
        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        - Add RefLogger.cpp source file.

        * TestWebKitAPI/Counters.cpp:
        (DeleterCounter<ConstructorDestructorCounter>::deleterCount):
        Move specific declaration here to fix linker warning.
        * TestWebKitAPI/Counters.h:
        (DeleterCounter<T>::deleterCount): Remove declaration of global
        template variable.

        * TestWebKitAPI/Tests/WTF/RefLogger.cpp: Added.
        (TestWebKitAPI::log): Added.  Move inline definition in
        RefLogger.h to here to fix linker warning.

        * TestWebKitAPI/Tests/WTF/RefLogger.h:
        (TestWebKitAPI::log): Replace inline function with declaration.

2016-03-12  David Kilzer  <ddkilzer@apple.com>

        REGRESSION (r178615): Fix incorrect case in included header for WeakPtr.cpp

        * TestWebKitAPI/Tests/WTF/WeakPtr.cpp: Change "test.h" to
        "Test.h" to fix incorrect case.  This was discovered when adding
        WeakPtr.cpp to CMakeLists.txt for the patch on Bug 155394.

2016-03-12  David Kilzer  <ddkilzer@apple.com>

        run-webkit-tests: handle Darwin framework/library environment variables more consistently
        <http://webkit.org/b/155392>

        Reviewed by Daniel Bates.

        These changes will make it possible to pass through environment
        variables from the run-webkit-tests command-line.

        * Scripts/webkitpy/port/base.py:
        (Port.to.setup_environ_for_server): Add DYLD_FRAMEWORK_PATH,
        __XPC_DYLD_FRAMEWORK_PATH and __XPC_DYLD_LIBRARY_PATH to the
        list of variables to keep from the run-webkit-test environment.

        * Scripts/webkitpy/port/driver.py:
        (Driver._append_environment_variable_path): Add method to append
        a path to an environment variable, or set the path if the
        variable doesn't exist.
        (Driver._setup_environ_for_driver): Extract build_root_path into
        a local variable.  Use Driver._append_environment_variable_path
        to extend DYLD_LIBRARY_PATH, __XPC_DYLD_LIBRARY_PATH,
        DYLD_FRAMEWORK_PATH and __XPC_DYLD_FRAMEWORK_PATH instead of
        overwriting them.

        * Scripts/webkitpy/port/driver_unittest.py:
        (DriverTest.test__append_environment_variable_path): Add test
        method to test Driver._append_environment_variable_path.

2016-03-11  Alexey Proskuryakov  <ap@apple.com>

        [ios-sim debug] API test WTF_Lock.ContendedShortSection and WTF_ParkingLot.UnparkOneFifty timing out
        https://bugs.webkit.org/show_bug.cgi?id=155276

        [ios-sim] API test WTF_Condition.TenProducersTenConsumersOneSlot timing out
        https://bugs.webkit.org/show_bug.cgi?id=155345

        [iOS Simulator] API test timeout: WTF_ParkingLot.UnparkOneFiftyThenFiftyAll
        https://bugs.webkit.org/show_bug.cgi?id=153997
        <rdar://problem/23580034>

        <rdar://problem/23580018> TestWebKitAPI Timeout: WTF_ParkingLot.UnparkOneFifty

        Rubber-stamped by Filip Pizlo.

        * Scripts/run-api-tests: These tests are pretty slow. Increase API test timeout.

        * TestWebKitAPI/Tests/WTF/ParkingLot.cpp: Start running WTF_ParkingLot.UnparkOneFiftyThenFiftyAll
        on iOS again.

2016-03-11  Jer Noble  <jer.noble@apple.com>

        [ios-sim debug] API tests RequiresUserActionForPlaybackTest.DoesNotRequireUserActionForMediaPlayback and RequiresUserActionForAudioButNotVideoPlayback asserting
        https://bugs.webkit.org/show_bug.cgi?id=155365

        Reviewed by Darin Adler.

        Allow tests running on iOS simulator to play video inline, avoiding this assert.

        * TestWebKitAPI/Tests/WebKit2Cocoa/RequiresUserActionForPlayback.mm:
        (RequiresUserActionForPlaybackTest::SetUp):

2016-03-11  Frederic Wang  <fwang@igalia.com>

        [jhbuild] Disable LLVM OCaml bindings.
        https://bugs.webkit.org/show_bug.cgi?id=153274

        Reviewed by Michael Catanzaro.

        * gtk/jhbuild.modules: disable all (actually only OCaml) bindings for LLVM.

2016-03-11  Commit Queue  <commit-queue@webkit.org>

        Unreviewed, rolling out r197495.
        https://bugs.webkit.org/show_bug.cgi?id=155369

        LLVM is needed to run update-webkitgtk-libs reliably
        (Requested by mcatanzaro on #webkit).

        Reverted changeset:

        "[jhbuild] Remove LLVM dependency."
        https://bugs.webkit.org/show_bug.cgi?id=153274
        http://trac.webkit.org/changeset/197495

2016-03-11  Youenn Fablet  <youenn.fablet@crf.canon.fr>

        WTF should have a similar function as equalLettersIgnoringASCIICase to match beginning of strings
        https://bugs.webkit.org/show_bug.cgi?id=153419

        Reviewed by Darin Adler.

        * TestWebKitAPI/Tests/WTF/StringOperators.cpp:
        (TestWebKitAPI::TEST): Adding test case for startsWithLettersIgnoringASCIICase.


2016-03-10  Simon Fraser  <simon.fraser@apple.com>

        Font antialiasing (smoothing) changes when elements are rendered into compositing layers
        https://bugs.webkit.org/show_bug.cgi?id=23364

        Reviewed by Tim Horton.

        Turn off smoothed layer text because it affects many layout test results.

        * DumpRenderTree/mac/DumpRenderTree.mm:
        (resetWebViewToConsistentStateBeforeTesting):
        * WebKitTestRunner/TestController.cpp:
        (WTR::TestController::resetStateToConsistentValues):

2016-03-10  Jer Noble  <jer.noble@apple.com>

        Partial roll-out of r197953; test fails because encode/decode support of those properties were never added.

        * TestWebKitAPI/Tests/WebKit2Cocoa/Coding.mm:
        (TEST): Deleted.

2016-03-10  Myles C. Maxfield  <mmaxfield@apple.com>

        [OS X] Main frame scrollbars should appear on the left on RTL systems
        https://bugs.webkit.org/show_bug.cgi?id=155149

        Reviewed by Simon Fraser.

        Setting the volatile default needs to be done early, so it is
        plumbed through the injected bundle's initialization routine.

        Control of RTL scrollbars is handled by putting the string
        <!-- webkit-test-runner [ rtlScrollbars=true ] -->
        on the first line of a test.

        * WebKitTestRunner/InjectedBundle/mac/InjectedBundleMac.mm:
        (WTR::shouldUseRTLScrollbars):
        (WTR::InjectedBundle::platformInitialize):
        * WebKitTestRunner/TestController.cpp:
        (WTR::TestController::generatePageConfiguration):
        (WTR::updateTestOptionsFromTestHeader):
        (WTR::TestController::getInjectedBundleInitializationUserData):
        * WebKitTestRunner/TestController.h:
        * WebKitTestRunner/TestOptions.h:
        * WebKitTestRunner/mac/PlatformWebViewMac.mm:
        (WTR::PlatformWebView::viewSupportsOptions):

2016-03-08  Jer Noble  <jer.noble@apple.com>

        Add separate WK and WK2 preferences for requiring user gestures for video media, distinct from user gestures for media generally
        https://bugs.webkit.org/show_bug.cgi?id=155141

        Reviewed by Beth Dakin.

        Set the default values for media preferences unconditionally, not just on PLATFORM(IOS). Set "video requires user gesture"
        to sane defaults in addition to "audio requires user gesture" and (in the case of DumpREnderTree) instead of "media requires user gesture".

        Add a new test of WK2 user gesture requirement preferences.

        * DumpRenderTree/mac/DumpRenderTree.mm:
        (resetWebPreferencesToConsistentValues):
        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WebKit/ios/video-with-audio.html:
        * TestWebKitAPI/Tests/WebKit/ios/video-without-audio.html:
        * TestWebKitAPI/Tests/WebKit2Cocoa/RequiresUserActionForPlayback.mm: Added.
        (-[RequiresUserActionForPlaybackNavigationDelegate webView:didFinishNavigation:]):
        (-[RequiresUserActionForPlaybackMessageHandler userContentController:didReceiveScriptMessage:]):
        (RequiresUserActionForPlaybackTest::SetUp):
        (RequiresUserActionForPlaybackTest::createWebView):
        (RequiresUserActionForPlaybackTest::testVideoWithAudio):
        (RequiresUserActionForPlaybackTest::testVideoWithoutAudio):
        (RequiresUserActionForPlaybackTest::testAudioOnly):
        (TEST_F):
        * TestWebKitAPI/Tests/WebKit2Cocoa/Coding.mm:
        (TEST):

2016-03-10  Brian Burg  <bburg@apple.com>

        Web Inspector: should be able to run protocol and input generator scripts from any directory
        https://bugs.webkit.org/show_bug.cgi?id=155307

        Reviewed by Joseph Pecoraro.

        * Scripts/webkitpy/inspector/main.py:
        (InspectorGeneratorTests.main):
        * Scripts/webkitpy/replay/main.py:
        (InputGeneratorTests.main):
        Compute the current SCM based on the location of the script being executed, not
        the $CWD which could be anything. There's rarely a good reason to use $CWD.

2016-03-10  David Kilzer  <ddkilzer@apple.com>

        [iOS] DumpRenderTree crashes when accessing window.testRunner.inspectorTestStubURL
        <http://webkit.org/b/155295>

        Reviewed by Brent Fulgham.

        * DumpRenderTree/mac/TestRunnerMac.mm:
        (TestRunner::inspectorTestStubURL): Always return nullptr for
        PLATFORM(IOS).  This matches what we did in r192604 for
        WebKitTestRunner/InjectedBundle/mac/TestRunnerMac.mm.

2016-03-10  Frederic Wang  <fwang@igalia.com>

        [GTK] Add support for WOFF2
        https://bugs.webkit.org/show_bug.cgi?id=152616

        Reviewed by Carlos Garcia Campos.

        * Scripts/webkitpy/style/checker.py: Only verify basic style for third party modules brotli and woff2.

2016-03-09  Ryosuke Niwa  <rniwa@webkit.org>

        Add runtime flags for shadow DOM and custom elements
        https://bugs.webkit.org/show_bug.cgi?id=155213

        Reviewed by Dean Jackson.

        Always enable shadow DOM and custom elements during testing.

        * DumpRenderTree/mac/DumpRenderTree.mm:
        (resetWebPreferencesToConsistentValues):
        * WebKitTestRunner/InjectedBundle/InjectedBundle.cpp:
        (WTR::InjectedBundle::beginTesting):
        * WebKitTestRunner/InjectedBundle/TestRunner.cpp:
        (WTR::TestRunner::setShadowDOMEnabled): Added.
        * WebKitTestRunner/InjectedBundle/TestRunner.h:

2016-03-09  Brent Fulgham  <bfulgham@apple.com>

        Handling 'allowUniversalAccessFromFileURLs' on WKWebViewConfiguration causes test breakage
        https://bugs.webkit.org/show_bug.cgi?id=155265
        <rdar://problem/11101440>

        Reviewed by Andy Estes.

        WK2 localStorage tests need the 'AllowUniversalAccessFromFileURLs' preference set by default.
        Tests that confirm blocking localStorage manually set the flag to "False" in the test.

        * WebKitTestRunner/cocoa/TestControllerCocoa.mm:
        (WTR::initializeWebViewConfiguration): Set the default state to the correct value.

2016-03-09  David Kilzer  <ddkilzer@apple.com>

        check-webkit-style: fix false-positive warnings about @try/@catch blocks in Objective-C++ source files
        <http://webkit.org/b/155273>

        Reviewed by Andy Estes.

        * Scripts/webkitpy/style/checkers/cpp.py:
        (check_spacing_for_function_call): Ignore @catch lines.
        (check_braces): Ditto.
        * Scripts/webkitpy/style/checkers/cpp_unittest.py:
        (CppStyleTest.test_brace_at_begin_of_line): Add test case.

2016-03-09  Jason Marcell  <jmarcell@apple.com>

        Removing reference to Dashboard.Repository.Internal.trac from open source unit tests.
        https://bugs.webkit.org/show_bug.cgi?id=155274

        Reviewed by Alexey Proskuryakov.

        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Scripts/tests/tests.js:
        (setup): Deleted. In bug 154180 we removed Dashboard.Repository.Internal which was causing an
        error in the unit tests.

2016-03-09  Aakash Jain  <aakash_jain@apple.com>

        use ulimit command to check process limit in webkitpy
        https://bugs.webkit.org/show_bug.cgi?id=155260

        Reviewed by Alexey Proskuryakov.

        * Scripts/webkitpy/port/ios.py:
        (IOSSimulatorPort.default_child_processes): Use ulimit command output instead of 
        launchctl limit maxproc command.

2016-03-09  Alexey Proskuryakov  <ap@apple.com>

        Stop building armv7 on iOS device builders
        https://bugs.webkit.org/show_bug.cgi?id=155246

        Reviewed by David Kilzer.

        * BuildSlaveSupport/build.webkit.org-config/config.json: Building both armv7 and
        armv7s makes the bots unnecessarily slow. We can catch super rare v7-only regressions
        elsewhere.

        * Scripts/webkitpy/common/config/ews.json: Changed EWS to match, as we always want
        EWS configuration to be verified by buildbot queues.

        * Scripts/webkitdirs.pm:
        * Scripts/webkitpy/port/ios.py:
        Changed default to arm64. I think that the default is probably not used in any
        practical scenarios, but it's nice to make it more sensible.

2016-03-09  Alexey Proskuryakov  <ap@apple.com>

        Add iOS Simulator EWS to bot watcher's dashboard
        https://bugs.webkit.org/show_bug.cgi?id=155220

        Reviewed by Lucas Forschler.

        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Scripts/BubbleQueueServer.js:

2016-03-09  Brent Fulgham  <bfulgham@apple.com>

        Local HTML should be blocked from localStorage access unless "Disable Local File Restrictions" is checked
        https://bugs.webkit.org/show_bug.cgi?id=155185
        <rdar://problem/11101440>

        Reviewed by Anders Carlsson.

        * TestWebKitAPI/Tests/WebKit2/CloseFromWithinCreatePage.cpp:
        (TestWebKitAPI::TEST): Allow local file accesss to run test.
        * TestWebKitAPI/Tests/WebKit2Cocoa/IndexedDBMultiProcess.mm:
        (TEST): Ditto.
        * TestWebKitAPI/Tests/WebKit2Cocoa/IndexedDBPersistence.mm:
        (TEST): Ditto.

2016-03-09  Tim Horton  <timothy_horton@apple.com>

        Removing and re-adding a script message handler with the same name results in an unusable message handler
        https://bugs.webkit.org/show_bug.cgi?id=155223

        Reviewed by Sam Weinig.

        * TestWebKitAPI/Tests/WebKit2Cocoa/UserContentController.mm:
        (TEST):
        Add a test ensuring that it is possible to remove and re-add a script message handler
        with the same name and still dispatch messages to it.

2016-03-08  Alexey Proskuryakov  <ap@apple.com>

        Fix iOS Simulator EWS.

        Unreviewed build fix.

        * Scripts/webkitpy/common/config/ports.py:

2016-03-08  Aakash Jain  <aakash_jain@apple.com>

        Booting multiple iOS simulator parallely fails sometimes
        https://bugs.webkit.org/show_bug.cgi?id=155208
        <rdar://problem/25019651>

        Reviewed by Darin Adler.

        * Scripts/webkitpy/port/ios.py:
        (IOSSimulatorPort.setup_test_run): Increase the time delay between subsequent
        simulator boot.

2016-03-08  Alexey Proskuryakov  <ap@apple.com>

        Add iOS debug testers to flakiness dashboard
        https://bugs.webkit.org/show_bug.cgi?id=155206

        Reviewed by Darin Adler.

        * TestResultServer/static-dashboards/builders.jsonp:

2016-03-08  Oliver Hunt  <oliver@apple.com>

        Start moving to separated writable and executable mappings in the JIT
        https://bugs.webkit.org/show_bug.cgi?id=155178

        Reviewed by Fil Pizlo.

        Making run-jsc-benchmarks slightly happier on my machine.

        * Scripts/run-jsc-benchmarks:

2016-03-08  Anders Carlsson  <andersca@apple.com>

        Use NSUInteger instead of NSWindowStyleMask.

        * MiniBrowser/mac/MiniBrowser_Prefix.pch:

2016-03-08  Anders Carlsson  <andersca@apple.com>

        Fix build.

        We intentionally don't use AppKitCompatibilityDeclarations.h here, since we want
        MiniBrowser to build without WTF.

        * MiniBrowser/mac/AppDelegate.m:
        (-[BrowserAppDelegate _updateNewWindowKeyEquivalents]):
        * MiniBrowser/mac/BrowserWindowController.m:
        (-[BrowserWindowController windowDidLoad]):
        * MiniBrowser/mac/MiniBrowser_Prefix.pch:

2016-03-08  Alexey Proskuryakov  <ap@apple.com>

        Add iOS simulator EWS that runs tests
        https://bugs.webkit.org/show_bug.cgi?id=155175

        Reviewed by Lucas Forschler.

        * QueueStatusServer/config/queues.py:
        * Scripts/webkitpy/common/config/ews.json:
        * Scripts/webkitpy/common/config/ports.py:

2016-03-08  Commit Queue  <commit-queue@webkit.org>

        Unreviewed, rolling out r197793 and r197799.
        https://bugs.webkit.org/show_bug.cgi?id=155195

        something weird happened while landing this and everything
        broke (Requested by olliej on #webkit).

        Reverted changesets:

        "Start moving to separated writable and executable mappings in
        the JIT"
        https://bugs.webkit.org/show_bug.cgi?id=155178
        http://trac.webkit.org/changeset/197793

        "arm64 build fix after r197793."
        http://trac.webkit.org/changeset/197799

2016-03-08  Oliver Hunt  <oliver@apple.com>

        Start moving to separated writable and executable mappings in the JIT
        https://bugs.webkit.org/show_bug.cgi?id=155178

        Reviewed by Filip Pizlo.

        Making run-jsc-benchmarks slightly happier on my machine.

        * Scripts/run-jsc-benchmarks:

2016-03-08  Daniel Bates  <dabates@apple.com>

        Support iterating over an OptionSet and checking if it is empty
        https://bugs.webkit.org/show_bug.cgi?id=154941
        <rdar://problem/24964187>

        Reviewed by Darin Adler.

        Add tests to ensure that we do not regression both iteration of an OptionSet and
        determining whether an OptionSet is empty.

        * TestWebKitAPI/Test.h:
        (TestWebKitAPI::Util::assertStrongEnum): Helper function to assert two strong enum type for equality.
        * TestWebKitAPI/Tests/WTF/OptionSet.cpp:
        (TestWebKitAPI::TEST):

2016-03-08  Alexey Proskuryakov  <ap@apple.com>

        Add debug iOS Simulator bots to the dashboard
        https://bugs.webkit.org/show_bug.cgi?id=155157

        Reviewed by Darin Adler.

        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Scripts/WebKitBuildbot.js:

2016-03-08  Alejandro G. Castro  <alex@igalia.com>

        Unreviewed EFL build fix after r197752.

        * Scripts/webkitperl/FeatureList.pm: Avoid MEDIA_STREAM
        compilation by default until EFL bumps gstreamer to 1.6.

2016-03-08  Alejandro G. Castro  <alex@igalia.com>

        [GTK] [EFL] Avoid running mediastream tests by default until we compile by default
        https://bugs.webkit.org/show_bug.cgi?id=153540

        Reviewed by Philippe Normand.

        After bumping gstreamer to 1.6.3 in r196804 we can enable again
        compilation of mediastream and running the tests.

        * Scripts/run-gtk-tests:
        (TestRunner): Enable again the UserMedia API test.
        * Scripts/webkitperl/FeatureList.pm: Enable the compilation of the
        mediastream by default.
        * gtk/jhbuild-webrtc.modules: Removed the specific jhbuild modules
        file.
        * gtk/jhbuild.modules: Bumped the openwebrtc version to the one we
        are currently using.

2016-03-07  Jon Lee  <jonlee@apple.com>

        Update perf bot configuration for Animometer
        https://bugs.webkit.org/show_bug.cgi?id=155134

        Reviewed by Ryosuke Niwa.

        * Scripts/webkitpy/benchmark_runner/data/patches/Animometer.patch: Refactor the patch
        to work with the latest version of the harness.
        * Scripts/webkitpy/benchmark_runner/data/plans/animometer.plan: Bump up the timeout,
        and use the latest version of the harness.

2016-03-07  Joanmarie Diggs  <jdiggs@igalia.com>

        [GTK][jhbuild] OpenWebRTC build fails with GCC 6.0
        https://bugs.webkit.org/show_bug.cgi?id=154839

        Reviewed by Michael Catanzaro.

        Add '-Wno-error' to jhbuildrc; remove it from the module sets for macos.

        * gtk/jhbuild-webrtc.modules:
        * gtk/jhbuild.modules:
        * gtk/jhbuildrc:

2016-03-07  Aakash Jain  <aakash_jain@apple.com>

        webkitpy should verify timestamp from CrashLogs while collecting all crash logs
        https://bugs.webkit.org/show_bug.cgi?id=155000
        <rdar://problem/24860219>

        Reviewed by Alexey Proskuryakov.

        * Scripts/webkitpy/common/system/crashlogs.py:
        (CrashLogs._find_all_logs_darwin): Make sure that crash log timestamp is within expected 
        time range, because file modification time is not always accurate.
        (CrashLogs.get_timestamp_from_logs): Parse the timestamp from logs.
        * Scripts/webkitpy/common/system/crashlogs_unittest.py:
        (CrashLogsTest.test_get_timestamp_from_logs_darwin): Testcase for above function.

2016-03-06  Alexey Proskuryakov  <ap@apple.com>

        build-webkit prints an error on iOS simulator bots
        https://bugs.webkit.org/show_bug.cgi?id=155078

        Reviewed by Dan Bernstein.

        This happens when build-layouttestrelay sets $xcodeSDK to undefined, to use host SDK.

        * Scripts/webkitdirs.pm: (buildXCodeProject): There is no need to pass -sdk, because
        XcodeOptions() already passes SDKROOT as appropriate.

        * Scripts/build-layouttestrelay: Added a FIXME. Resetting $xcodeSDK doesn't reset
        any other configuration variables that were derived from its initial value, like $portName.

2016-03-05  Tim Horton  <timothy_horton@apple.com>

        Create a DOMHTMLVideoElement when wrapping <video> elements
        https://bugs.webkit.org/show_bug.cgi?id=155084
        <rdar://problem/24997193>

        Reviewed by Dan Bernstein.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/mac/DOMHTMLVideoElementWrapper.mm: Added.
        (-[VideoWrapperFrameLoadDelegate webView:didFinishLoadForFrame:]):
        (TestWebKitAPI::TEST):
        Add an API test for this behavior.

2016-03-05  Carlos Alberto Lopez Perez  <clopez@igalia.com>

        [GTK] Fix logging details after r197505 (Run the run-benchmark script on the performance bot.)
        https://bugs.webkit.org/show_bug.cgi?id=154595

        Unreviewed.

        * Scripts/webkitpy/benchmark_runner/run_benchmark.py:
        (start): Use logging.exception when a test fails in order to get the details about the error.

2016-03-04  Alexey Proskuryakov  <ap@apple.com>

        Add iOS simulator debug bots
        https://bugs.webkit.org/show_bug.cgi?id=155053

        Reviewed by Lucas Forschler.

        * BuildSlaveSupport/build.webkit.org-config/config.json:

2016-03-04  Brent Fulgham  <bfulgham@apple.com>

        [WK2] Gather resource load statistics
        https://bugs.webkit.org/show_bug.cgi?id=154278
        <rdar://problem/24702892>

        Reviewed by Andy Estes.

        * MiniBrowser/mac/AppDelegate.m:
        (defaultConfiguration): Retrieve state of the ResourceLoadStatisticsEnabled setting.
        * MiniBrowser/mac/SettingsController.m:
        (-[SettingsController _populateMenu]): Move setting from WK1-only to be
        universally applicable.
        * MiniBrowser/mac/WK2BrowserWindowController.m:
        (-[WK2BrowserWindowController didChangeSettings]): Recognize when the
        Resource Load Statistics flag has changed.

2016-03-04  Alex Christensen  <achristensen@webkit.org>

        Remove vcxproj build system
        https://bugs.webkit.org/show_bug.cgi?id=154388

        Rubber-stamped by Brent Fulgham.

        * DumpRenderTree/DumpRenderTree.vcxproj/DumpRenderTree: Removed.
        * DumpRenderTree/DumpRenderTree.vcxproj/DumpRenderTree.sln: Removed.
        * DumpRenderTree/DumpRenderTree.vcxproj/DumpRenderTree/DumpRenderTree.vcxproj: Removed.
        * DumpRenderTree/DumpRenderTree.vcxproj/DumpRenderTree/DumpRenderTree.vcxproj.filters: Removed.
        * DumpRenderTree/DumpRenderTree.vcxproj/DumpRenderTree/DumpRenderTreeApple.props: Removed.
        * DumpRenderTree/DumpRenderTree.vcxproj/DumpRenderTree/DumpRenderTreeCommon.props: Removed.
        * DumpRenderTree/DumpRenderTree.vcxproj/DumpRenderTree/DumpRenderTreeDebug.props: Removed.
        * DumpRenderTree/DumpRenderTree.vcxproj/DumpRenderTree/DumpRenderTreeDebugWinCairo.props: Removed.
        * DumpRenderTree/DumpRenderTree.vcxproj/DumpRenderTree/DumpRenderTreeLauncher.vcxproj: Removed.
        * DumpRenderTree/DumpRenderTree.vcxproj/DumpRenderTree/DumpRenderTreeLauncherCommon.props: Removed.
        * DumpRenderTree/DumpRenderTree.vcxproj/DumpRenderTree/DumpRenderTreeLauncherDebug.props: Removed.
        * DumpRenderTree/DumpRenderTree.vcxproj/DumpRenderTree/DumpRenderTreeLauncherProduction.props: Removed.
        * DumpRenderTree/DumpRenderTree.vcxproj/DumpRenderTree/DumpRenderTreeLauncherRelease.props: Removed.
        * DumpRenderTree/DumpRenderTree.vcxproj/DumpRenderTree/DumpRenderTreePostBuild.cmd: Removed.
        * DumpRenderTree/DumpRenderTree.vcxproj/DumpRenderTree/DumpRenderTreePreBuild.cmd: Removed.
        * DumpRenderTree/DumpRenderTree.vcxproj/DumpRenderTree/DumpRenderTreeProduction.props: Removed.
        * DumpRenderTree/DumpRenderTree.vcxproj/DumpRenderTree/DumpRenderTreeRelease.props: Removed.
        * DumpRenderTree/DumpRenderTree.vcxproj/DumpRenderTree/DumpRenderTreeReleaseWinCairo.props: Removed.
        * DumpRenderTree/DumpRenderTree.vcxproj/ImageDiff: Removed.
        * DumpRenderTree/DumpRenderTree.vcxproj/ImageDiff/ImageDiff.vcxproj: Removed.
        * DumpRenderTree/DumpRenderTree.vcxproj/ImageDiff/ImageDiffCommon.props: Removed.
        * DumpRenderTree/DumpRenderTree.vcxproj/ImageDiff/ImageDiffCommonWinCairo.props: Removed.
        * DumpRenderTree/DumpRenderTree.vcxproj/ImageDiff/ImageDiffDebug.props: Removed.
        * DumpRenderTree/DumpRenderTree.vcxproj/ImageDiff/ImageDiffDebugWinCairo.props: Removed.
        * DumpRenderTree/DumpRenderTree.vcxproj/ImageDiff/ImageDiffLauncher.vcxproj: Removed.
        * DumpRenderTree/DumpRenderTree.vcxproj/ImageDiff/ImageDiffLauncherCommon.props: Removed.
        * DumpRenderTree/DumpRenderTree.vcxproj/ImageDiff/ImageDiffLauncherDebug.props: Removed.
        * DumpRenderTree/DumpRenderTree.vcxproj/ImageDiff/ImageDiffLauncherProduction.props: Removed.
        * DumpRenderTree/DumpRenderTree.vcxproj/ImageDiff/ImageDiffLauncherRelease.props: Removed.
        * DumpRenderTree/DumpRenderTree.vcxproj/ImageDiff/ImageDiffPostBuild.cmd: Removed.
        * DumpRenderTree/DumpRenderTree.vcxproj/ImageDiff/ImageDiffPreBuild.cmd: Removed.
        * DumpRenderTree/DumpRenderTree.vcxproj/ImageDiff/ImageDiffProduction.props: Removed.
        * DumpRenderTree/DumpRenderTree.vcxproj/ImageDiff/ImageDiffRelease.props: Removed.
        * DumpRenderTree/DumpRenderTree.vcxproj/ImageDiff/ImageDiffReleaseWinCairo.props: Removed.
        * DumpRenderTree/DumpRenderTree.vcxproj/TestNetscapePlugin/TestNetscapePlugin.vcxproj: Removed.
        * DumpRenderTree/DumpRenderTree.vcxproj/TestNetscapePlugin/TestNetscapePlugin.vcxproj.filters: Removed.
        * DumpRenderTree/DumpRenderTree.vcxproj/TestNetscapePlugin/TestNetscapePluginCommon.props: Removed.
        * DumpRenderTree/DumpRenderTree.vcxproj/TestNetscapePlugin/TestNetscapePluginDebug.props: Removed.
        * DumpRenderTree/DumpRenderTree.vcxproj/TestNetscapePlugin/TestNetscapePluginPostBuild.cmd: Removed.
        * DumpRenderTree/DumpRenderTree.vcxproj/TestNetscapePlugin/TestNetscapePluginPreBuild.cmd: Removed.
        * DumpRenderTree/DumpRenderTree.vcxproj/TestNetscapePlugin/TestNetscapePluginProduction.props: Removed.
        * DumpRenderTree/DumpRenderTree.vcxproj/TestNetscapePlugin/TestNetscapePluginRelease.props: Removed.
        * MiniBrowser/MiniBrowser.vcxproj/MiniBrowser.vcxproj: Removed.
        * MiniBrowser/MiniBrowser.vcxproj/MiniBrowser.vcxproj.filters: Removed.
        * MiniBrowser/MiniBrowser.vcxproj/MiniBrowserCF.props: Removed.
        * MiniBrowser/MiniBrowser.vcxproj/MiniBrowserCFLite.props: Removed.
        * MiniBrowser/MiniBrowser.vcxproj/MiniBrowserCommon.props: Removed.
        * MiniBrowser/MiniBrowser.vcxproj/MiniBrowserDebug.props: Removed.
        * MiniBrowser/MiniBrowser.vcxproj/MiniBrowserLib.vcxproj: Removed.
        * MiniBrowser/MiniBrowser.vcxproj/MiniBrowserLib.vcxproj.filters: Removed.
        * MiniBrowser/MiniBrowser.vcxproj/MiniBrowserLibCommon.props: Removed.
        * MiniBrowser/MiniBrowser.vcxproj/MiniBrowserLibDebug.props: Removed.
        * MiniBrowser/MiniBrowser.vcxproj/MiniBrowserLibPostBuild.cmd: Removed.
        * MiniBrowser/MiniBrowser.vcxproj/MiniBrowserLibPreBuild.cmd: Removed.
        * MiniBrowser/MiniBrowser.vcxproj/MiniBrowserLibProduction.props: Removed.
        * MiniBrowser/MiniBrowser.vcxproj/MiniBrowserLibRelease.props: Removed.
        * MiniBrowser/MiniBrowser.vcxproj/MiniBrowserPostBuild.cmd: Removed.
        * MiniBrowser/MiniBrowser.vcxproj/MiniBrowserPreBuild.cmd: Removed.
        * MiniBrowser/MiniBrowser.vcxproj/MiniBrowserProduction.props: Removed.
        * MiniBrowser/MiniBrowser.vcxproj/MiniBrowserRelease.props: Removed.
        * TestWebKitAPI/TestWebKitAPI.vcxproj: Removed.
        * TestWebKitAPI/TestWebKitAPI.vcxproj/TestWebKitAPI.sln: Removed.
        * TestWebKitAPI/TestWebKitAPI.vcxproj/TestWebKitAPI.vcxproj: Removed.
        * TestWebKitAPI/TestWebKitAPI.vcxproj/TestWebKitAPI.vcxproj.filters: Removed.
        * TestWebKitAPI/TestWebKitAPI.vcxproj/TestWebKitAPICommon.props: Removed.
        * TestWebKitAPI/TestWebKitAPI.vcxproj/TestWebKitAPICommonWinCairo.props: Removed.
        * TestWebKitAPI/TestWebKitAPI.vcxproj/TestWebKitAPIDebug.props: Removed.
        * TestWebKitAPI/TestWebKitAPI.vcxproj/TestWebKitAPIDebugWinCairo.props: Removed.
        * TestWebKitAPI/TestWebKitAPI.vcxproj/TestWebKitAPIPostBuild.cmd: Removed.
        * TestWebKitAPI/TestWebKitAPI.vcxproj/TestWebKitAPIPreBuild.cmd: Removed.
        * TestWebKitAPI/TestWebKitAPI.vcxproj/TestWebKitAPIProduction.props: Removed.
        * TestWebKitAPI/TestWebKitAPI.vcxproj/TestWebKitAPIRelease.props: Removed.
        * TestWebKitAPI/TestWebKitAPI.vcxproj/TestWebKitAPIReleaseWinCairo.props: Removed.
        * win/AssembleBuildLogs: Removed.
        * win/AssembleBuildLogs/AssembleBuildLogs.vcxproj: Removed.
        * win/AssembleBuildLogs/AssembleBuildLogs.vcxproj.filters: Removed.
        * win/AssembleBuildLogs/AssembleLogs.cmd: Removed.
        * win/AssembleBuildLogs/README: Removed.

2016-03-04  Myles C. Maxfield  <mmaxfield@apple.com>

        Whitespace causes font-variant: all-small-caps to synthesize
        https://bugs.webkit.org/show_bug.cgi?id=155004
        <rdar://problem/24630796>

        Reviewed by Darin Adler.

        * DumpRenderTree/mac/DumpRenderTree.mm:
        (allowedFontFamilySet):
        * WebKitTestRunner/InjectedBundle/cocoa/ActivateFontsCocoa.mm:
        (WTR::allowedFontFamilySet):
        * WebKitTestRunner/mac/TestControllerMac.mm:
        (WTR::allowedFontFamilySet):

2016-03-04  Myles C. Maxfield  <mmaxfield@apple.com>

        [iOS] Crash during font loading when injected bundle cancels load
        https://bugs.webkit.org/show_bug.cgi?id=155001

        Reviewed by Tim Horton.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WebKit2/Ahem.ttf: Added.
        * TestWebKitAPI/Tests/WebKit2/webfont.html: Added.
        * TestWebKitAPI/Tests/WebKit2Cocoa/CancelFontSubresource.mm: Added.
        (-[Myles webView:didFinishNavigation:]):
        (TEST):
        * TestWebKitAPI/Tests/WebKit2Cocoa/CancelFontSubresourcePlugIn.mm: Added.
        (-[CancelFontSubresourcePlugIn webProcessPlugIn:didCreateBrowserContextController:]):
        (-[CancelFontSubresourcePlugIn webProcessPlugInBrowserContextController:frame:willSendRequestForResource:request:redirectResponse:]):

2016-03-04  Konstantin Tokarev  <annulen@yandex.ru>

        [check-webkit-style] Added checks for redundant virtual specifiers.
        https://bugs.webkit.org/show_bug.cgi?id=155017

        Reviewed by Darin Adler.

        Added 3 new checks related to virtual, override, and final specifiers:

        1. When "override" is present, "virtual" is redundant.
        2. When "final" is present, "virtual" is redundant.
        3. When "final" is present, "override" is redundant.

        * Scripts/webkitpy/style/checkers/cpp.py:
        (_FunctionState.begin):
        (_FunctionState.is_virtual):
        (_check_parameter_name_against_text):
        (_error_redundant_specifier):
        (check_function_definition):
        (CppChecker):
        * Scripts/webkitpy/style/checkers/cpp_unittest.py:
        (FunctionDetectionTest.perform_function_detection):
        (FunctionDetectionTest.test_basic_function_detection):
        (FunctionDetectionTest.test_function_declaration_detection):
        (FunctionDetectionTest.test_pure_function_detection):
        (FunctionDetectionTest.test_override_and_final_function_detection):
        (FunctionDetectionTest.test_non_functions):
        (FunctionDetectionTest.test_parameter_list):

2016-03-03  Darin Adler  <darin@apple.com>

        Followup to:
        Remove "virtual" from all lines that have both "virtual" and "override".
        https://bugs.webkit.org/show_bug.cgi?id=155005

        Reviewed by Geoffrey Garen.

        * Scripts/do-webcore-rename: Added more regular expressions to make sure we always
        use either override or final, not both, and to remove virtual from all lines that
        have both virtual and final.

2016-03-03  Darin Adler  <darin@apple.com>

        Remove "virtual" from all lines that have both "virtual" and "override".
        https://bugs.webkit.org/show_bug.cgi?id=155005

        Reviewed by Geoffrey Garen.

        * Scripts/do-webcore-rename: Added a regular expression to this script to do the job.

2016-03-03  Carlos Alberto Lopez Perez  <clopez@igalia.com>

        [GTK] Unreviewed fix after r197505 (Run the run-benchmark script on the performance bot.)
        https://bugs.webkit.org/show_bug.cgi?id=154595

        Unreviewed fix after r197505.

        * BuildSlaveSupport/build.webkit.org-config/master.cfg:
        (RunBenchmarkTests.start):

2016-03-03  Daniel Bates  <dabates@apple.com>

        Add unit tests for WTF::OptionSet
        https://bugs.webkit.org/show_bug.cgi?id=154925
        <rdar://problem/24964211>

        Reviewed by Darin Adler.

        Add tests to ensure that we do not regress the behavior of WTF::OptionSet.

        * TestWebKitAPI/CMakeLists.txt: Add file TestWebKitAPI/Tests/WTF/OptionSet.cpp.
        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj: Ditto.
        * TestWebKitAPI/Tests/WTF/OptionSet.cpp: Added.
        (TestWebKitAPI::TEST):

2016-03-03  Commit Queue  <commit-queue@webkit.org>

        Unreviewed, rolling out r197442.
        https://bugs.webkit.org/show_bug.cgi?id=154967

        Broke tests, and also uses a wrong approach (Requested by ap
        on #webkit).

        Reverted changeset:

        "Disable FTL JIT testing on 32-bit JSC tester bots"
        https://bugs.webkit.org/show_bug.cgi?id=154858
        http://trac.webkit.org/changeset/197442

2016-03-03  Carlos Alberto Lopez Perez  <clopez@igalia.com>

        [GTK] Run the run-benchmark script on the performance bot.
        https://bugs.webkit.org/show_bug.cgi?id=154595

        Reviewed by Carlos Garcia Campos.

        * BuildSlaveSupport/build.webkit.org-config/master.cfg: Add new RunBenchmarkTests step on the perf bots (only for the GTK+ port at this moment).
        (RunBenchmarkTests):
        (RunBenchmarkTests.start):
        (RunBenchmarkTests.getText):
        (RunBenchmarkTests.getText2):
        (BuildAndPerfTestFactory.__init__):
        (DownloadAndPerfTestFactory.__init__):
        * BuildSlaveSupport/build.webkit.org-config/mastercfg_unittest.py: Add new test for RunBenchmarkTests and update expected steps of GTK+ perf bot.
        (RunBenchmarkTest):
        (RunBenchmarkTest.assertResults):
        (RunBenchmarkTest.test_success):
        (RunBenchmarkTest.test_tests_failed):
        * Scripts/webkitpy/benchmark_runner/benchmark_runner.py: Log both the current iteration as also the total iterations for the current benchmark/plan.
        (BenchmarkRunner._run_benchmark):
        * Scripts/webkitpy/benchmark_runner/browser_driver/gtk_minibrowser_driver.py: Use python logging also for errors.
        (GTKMiniBrowserDriver.close_browsers):
        * Scripts/webkitpy/benchmark_runner/run_benchmark.py: Implement support for running all available benchmark plans.
        (parse_args):
        (start):
        (main):

2016-03-03  Gyuyoung Kim  <gyuyoung.kim@webkit.org>

        [EFL] Remove u-szeged.hu SVN mirror in EFL perf bot
        https://bugs.webkit.org/show_bug.cgi?id=154960

        Reviewed by Csaba Osztrogonác.

        * BuildSlaveSupport/build.webkit.org-config/config.json: Remove szeged univ's svn mirror.
        * BuildSlaveSupport/build.webkit.org-config/mastercfg_unittest.py:

2016-03-03  Frederic Wang  <fwang@igalia.com>

        [jhbuild] Remove LLVM dependency.
        https://bugs.webkit.org/show_bug.cgi?id=153274

        Reviewed by Carlos Garcia Campos.

        * gtk/jhbuild.modules:

2016-03-02  Alejandro G. Castro  <alex@igalia.com>

        Unreviewed build fix for media-stream after r197114.

        * TestWebKitAPI/Tests/WebKit2/UserMedia.cpp:
        (TestWebKitAPI::decidePolicyForUserMediaPermissionRequestCallBack):

2016-03-01  Csaba Osztrogonác  <ossy@webkit.org>

        Disable FTL JIT testing on 32-bit JSC tester bots
        https://bugs.webkit.org/show_bug.cgi?id=154858

        Reviewed by Saam Barati.

        * BuildSlaveSupport/build.webkit.org-config/master.cfg:
        (Run32bitJSCTests):

2016-03-01  Dean Johnson  <dean_johnson@apple.com>

        Fix iOS EWS.
        https://bugs.webkit.org/show_bug.cgi?id=154880

        Reviewed by Alexey Proskuryakov.

        * Scripts/copy-webkitlibraries-to-product-directory:

2016-02-29  Chris Dumez  <cdumez@apple.com>

        Have parseHTMLInteger() / parseHTMLNonNegativeInteger() use WTF::Optional
        https://bugs.webkit.org/show_bug.cgi?id=154845

        Reviewed by Ryosuke Niwa.

        Update API tests accordingly.

        * TestWebKitAPI/Tests/WebCore/HTMLParserIdioms.cpp:
        (TestWebKitAPI::testParseHTMLInteger):
        (TestWebKitAPI::parseHTMLIntegerFails):
        (TestWebKitAPI::testParseHTMLNonNegativeInteger):
        (TestWebKitAPI::parseHTMLNonNegativeIntegerFails):
        (TestWebKitAPI::TEST): Deleted.

2016-02-29  Simon Fraser  <simon.fraser@apple.com>

        Remove the experimental feature of antialiased font dilation
        https://bugs.webkit.org/show_bug.cgi?id=154843

        Reviewed by Zalan Bujtas.

        Remove the "antialiased font dilation" code path, and related prefs.

        * DumpRenderTree/mac/DumpRenderTree.mm:
        (resetWebPreferencesToConsistentValues): Deleted.
        * WebKitTestRunner/TestController.cpp:
        (WTR::TestController::resetPreferencesToConsistentValues): Deleted.

2016-02-29  Brady Eidson  <beidson@apple.com>

        Fix timing flakiness in test I added in http://trac.webkit.org/changeset/197372

        Unreviewed.

        * TestWebKitAPI/Tests/WebKit2Cocoa/IndexedDBMultiProcess-1.html:
        * TestWebKitAPI/Tests/WebKit2Cocoa/IndexedDBMultiProcess-2.html:
        * TestWebKitAPI/Tests/WebKit2Cocoa/IndexedDBMultiProcess.mm:
        (TEST): Sometimes a third message from the first html file was leaking through. The message is expected
          so we should always wait for it and make sure we got it.

2016-02-29  Brady Eidson  <beidson@apple.com>

        Modern IDB: WebKit 2 IPC layer easily confused about multiple web processes being connected.
        https://bugs.webkit.org/show_bug.cgi?id=154837

        Reviewed by Alex Christensen.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WebKit2Cocoa/IndexedDBMultiProcess-1.html: Added.
        * TestWebKitAPI/Tests/WebKit2Cocoa/IndexedDBMultiProcess-2.html: Added.
        * TestWebKitAPI/Tests/WebKit2Cocoa/IndexedDBMultiProcess.mm: Added.

2016-02-29  Joanmarie Diggs  <jdiggs@igalia.com>

        [GTK][jhbuild] GLib build fails with GCC 6.0
        https://bugs.webkit.org/show_bug.cgi?id=154825

        Use the upstream work-around. https://bugzilla.gnome.org/show_bug.cgi?id=761550

        Reviewed by Csaba Osztrogonác.

        * gtk/jhbuild.modules: Apply upstream path.
        * gtk/patches/gdate-suppress-string-format-literal-warning.patch: Added.

2016-02-29  Filip Pizlo  <fpizlo@apple.com>

        We've been running Octane/regexp all wrong in run-jsc-benchmarks
        https://bugs.webkit.org/show_bug.cgi?id=154827

        Reviewed by Andreas Kling.

        Octane v.2 and JetStream v.1.1 run this benchmark with warmup. This script was running
        it without warmup. This patches fixes this by making this script run it with warmup.

        This fix shows that my last patch, which added FTL support for regexp, was actually a 3%
        speed-up on Octane/regexp, not a slow-down as the ChangeLog claimed.

        It discovered this bug because for each Octane test that I want to debug, I usually make
        a standalone .js file that contains the whole test along with a miniharness - usually
        a plain loop - that runs it almost like it would for real but with whatever hacks I'm
        using for debugging. When I wrote such a thing for regexp, I used a ~20 iteration warmup
        to match the one second of warmup that this benchmark gets in Octane. To my surprise,
        this quite faithful regexp runner did not see the regression that run-jsc-benchmarks
        saw. That's when I found out that run-jsc-benchmarks was running it wrong.

        The reason for the no-warmup slow-down is that the FTL is actually fairly expensive to
        run on some of these very large functions in the regexp benchmark. I don't think we can
        do anything about that, and I'd argue that the speed-up we see after the compilation is
        done suggests that it was worth it.

        * Scripts/run-jsc-benchmarks:

2016-02-29  Gavin Barraclough  <barraclough@apple.com>

        RefCounter<T>::Event -> RefCounterEvent
        https://bugs.webkit.org/show_bug.cgi?id=154767

        Reviewed by Darin Adler.

        RefCounter<T>::Event is kinda verbose to use, and there is no need for this
        to be specific to a particular typeof RefCounter. Move the enum class up to
        the top level & rename to RefCounterEvent.

        * TestWebKitAPI/Tests/WTF/RefCounter.cpp:
        (TestWebKitAPI::TEST):

2016-02-29  Csaba Osztrogonác  <ossy@webkit.org>

        Remove more LLVM related cruft
        https://bugs.webkit.org/show_bug.cgi?id=154821

        Reviewed by Darin Adler.

        * Scripts/build-jsc:
        * Scripts/build-webkit:
        * Scripts/copy-webkitlibraries-to-product-directory:
        * Scripts/export-llvm-build: Removed.
        * Scripts/run-jsc-stress-tests:

2016-02-28  Sam Weinig  <sam@webkit.org>

        Reimplement WKPageGroup in terms of WKUserContentController
        https://bugs.webkit.org/show_bug.cgi?id=154804

        Reviewed by Dan Bernstein.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WebKit2/PageGroup.cpp: Added.

2016-02-28  Sam Weinig  <sam@webkit.org>

        Bind _WKUserStyleSheets to WKUserContentWorlds to allow for grouping of user content by associating to a world
        https://bugs.webkit.org/show_bug.cgi?id=154798

        Reviewed by Dan Bernstein.

        * TestWebKitAPI/Tests/WebKit2Cocoa/UserContentController.mm:
        Add tests for removing _WKUserStyleSheets and WKUserScripts

2016-02-27  Alexey Proskuryakov  <ap@apple.com>

        Silence leaks under TextCodecICU::registerCodecs
        https://bugs.webkit.org/show_bug.cgi?id=154737

        Reviewed by Darin Adler.

        * Scripts/webkitpy/port/leakdetector.py:
        (LeakDetector._callstacks_to_exclude_from_leaks):

2016-02-26  Michael Catanzaro  <mcatanzaro@igalia.com>

        [GTK] Fix incorrect cast

        Unreviewed.

        * MiniBrowser/gtk/main.c:
        (createBrowserWindow):

2016-02-26  Chris Dumez  <cdumez@apple.com>

        Fix the behavior of reflecting IDL attributes of type unsigned long
        https://bugs.webkit.org/show_bug.cgi?id=154771

        Reviewed by Ryosuke Niwa.

        Update API tests to cover the fixes to the parseHTMLNonNegativeInteger()
        implementation:
        - "-0" is parsed as 0.
        - Range boundaries are now [0; 2147483647].

        * TestWebKitAPI/Tests/WebCore/HTMLParserIdioms.cpp:
        (TestWebKitAPI::TEST):

2016-02-26  Brady Eidson  <beidson@apple.com>

        Modern IDB: New database versions are never committed to SQLite.
        <rdar://problem/24860952> and https://bugs.webkit.org/show_bug.cgi?id=154741
        
        Modern IDB: If a database handle is not open, files are not actually deleted from disk
        https://bugs.webkit.org/show_bug.cgi?id=154756

        Reviewed by Alex Christensen.

        This also happens to test the previously untested fix for http://trac.webkit.org/changeset/197190

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WebKit2Cocoa/IndexedDBPersistence-1.html: Added.
        * TestWebKitAPI/Tests/WebKit2Cocoa/IndexedDBPersistence-2.html: Added.
        * TestWebKitAPI/Tests/WebKit2Cocoa/IndexedDBPersistence.mm: Added.
        (-[IndexedDBNavigationDelegate webView:didFinishNavigation:]):
        (-[IndexedDBMessageHandler userContentController:didReceiveScriptMessage:]):
        (TEST):

2016-02-26  Commit Queue  <commit-queue@webkit.org>

        Unreviewed, rolling out r197216.
        https://bugs.webkit.org/show_bug.cgi?id=154766

        Test simply needs updated result (Requested by litherum on
        #webkit).

        Reverted changeset:

        "Unreviewed, rolling out r197158."
        https://bugs.webkit.org/show_bug.cgi?id=154758
        http://trac.webkit.org/changeset/197216

2016-02-26  Alexey Proskuryakov  <ap@apple.com>

        [iOS Simulator] Reftests don't work
        https://bugs.webkit.org/show_bug.cgi?id=154764

        Reviewed by Daniel Bates.

        * Scripts/webkitpy/port/image_diff.py: (IOSSimulatorImageDiffer._start):
        Use simctl instead of sim.

2016-02-26  Chris Dumez  <cdumez@apple.com>

        Add API test coverage for parseHTMLInteger / parseHTMLNonNegativeInteger
        https://bugs.webkit.org/show_bug.cgi?id=154714

        Reviewed by Darin Adler.

        Add API test coverage for parseHTMLInteger / parseHTMLNonNegativeInteger as per:
        - https://html.spec.whatwg.org/multipage/infrastructure.html#signed-integers
        - https://html.spec.whatwg.org/multipage/infrastructure.html#non-negative-integers

        * TestWebKitAPI/PlatformEfl.cmake:
        * TestWebKitAPI/PlatformGTK.cmake:
        * TestWebKitAPI/PlatformWin.cmake:
        * TestWebKitAPI/TestWebKitAPI.vcxproj/TestWebKitAPI.vcxproj:
        * TestWebKitAPI/TestWebKitAPI.vcxproj/TestWebKitAPI.vcxproj.filters:
        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WebCore/HTMLParserIdioms.cpp: Added.
        (TestWebKitAPI::testParseHTMLInteger):
        (TestWebKitAPI::parseHTMLIntegerFails):
        (TestWebKitAPI::TEST):
        (TestWebKitAPI::testParseHTMLNonNegativeInteger):
        (TestWebKitAPI::parseHTMLNonNegativeIntegerFails):

2016-02-26  Commit Queue  <commit-queue@webkit.org>

        Unreviewed, rolling out r197158.
        https://bugs.webkit.org/show_bug.cgi?id=154758

        This change did not fix the failing test (Requested by
        ryanhaddad on #webkit).

        Reverted changeset:

        "REGRESSION(r195795): [WK2] fast/text/crash-complex-text-
        surrogate.html is flakey"
        https://bugs.webkit.org/show_bug.cgi?id=154709
        http://trac.webkit.org/changeset/197158

2016-02-26  Anders Carlsson  <andersca@apple.com>

        WKWebsiteDataStore/WKWebsiteDataRecord needs to provide size information about each type of data
        https://bugs.webkit.org/show_bug.cgi?id=154750
        rdar://problem/23861395

        Reviewed by Tim Horton.

        * MiniBrowser/mac/WK2BrowserWindowController.m:
        (-[WK2BrowserWindowController fetchWebsiteData:]):
        Use the new WKWebsiteDataStore SPI to compute data sizes.

2016-02-25  Gavin Barraclough  <barraclough@apple.com>

        RefCounter value changed callback should be called on all changes (not just zero edge).
        https://bugs.webkit.org/show_bug.cgi?id=154699

        Reviewed by Geoff Garen.

        RefCounter currently only triggers a callback when the count goes from zero
        to non-zero and vice-versa. Change that, to be useful to more clients.

        * TestWebKitAPI/Tests/WTF/RefCounter.cpp:
        (TestWebKitAPI::TEST):
            - Updated for change in RefCounter callback siganture & behaviour.

2016-02-25  Sam Weinig  <sam@webkit.org>

        Allow WKUserScripts to be run in isolated worlds
        https://bugs.webkit.org/show_bug.cgi?id=154701

        Reviewed by Anders Carlsson.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WebKit2Cocoa/_WKUserContentWorld.mm: Added.
        (-[SimpleDelegate webView:didFinishNavigation:]):
        (-[UserContentWorldRemoteObject didObserveNormalWorld]):
        (-[UserContentWorldRemoteObject didObserveWorldWithName:]):
        * TestWebKitAPI/Tests/WebKit2Cocoa/_WKUserContentWorldPlugIn.mm: Added.
        (-[_WKUserContentWorldPlugIn webProcessPlugIn:didCreateBrowserContextController:]):
        (-[_WKUserContentWorldPlugIn webProcessPlugInBrowserContextController:globalObjectIsAvailableForFrame:inScriptWorld:]):
        * TestWebKitAPI/Tests/WebKit2Cocoa/_WKUserContentWorldProtocol.h: Added.

2016-02-26  Youenn Fablet  <youenn.fablet@crf.canon.fr>

        W3C test importer should have an option to clean the destination directory
        https://bugs.webkit.org/show_bug.cgi?id=152685

        Reviewed by Darin Adler.

        Adding --clean-dest-dir option to W3C test importer.
        When this option is set, all files in the destination directory will be deleted
        except for WebKit specific files (test expectations, .gitignore...) before new tests import.
        Dangling test expectations are removed after tests import.'

        Adding unit test and minor refactoring for the other tests.

        * Scripts/webkitpy/w3c/test_importer.py:
        (parse_args): Add '--clean-dest-dir' option.
        (TestImporter.do_import):
        (TestImporter._is_baseline): helper routine to capture -expected.txt files.
        (TestImporter):
        (TestImporter._should_not_keep_when_importing): helper routine to filter files that should not be cleaned before importing.
        (TestImporter.clean_destination_directory):
        (TestImporter.remove_dangling_expectations):
        * Scripts/webkitpy/w3c/test_importer_unittest.py:
        (TestImporterTest._parse_options):
        (TestImporterTest.test_import_dir_with_no_tests_and_no_hg):
        (TestImporterTest.test_import_dir_with_no_tests):
        (TestImporterTest.test_import_dir_with_empty_init_py):
        (test_clean_directory_option):

2016-02-25  Myles C. Maxfield  <mmaxfield@apple.com>

        REGRESSION(r195795): [WK2] fast/text/crash-complex-text-surrogate.html is flakey
        https://bugs.webkit.org/show_bug.cgi?id=154709
        <rdar://problem/24483596>

        Reviewed by Dan Bernstein.

        Force auto-activation rules to a consistent state.

        * WebKitTestRunner/InjectedBundle/mac/InjectedBundleMac.mm:
        (WTR::InjectedBundle::platformInitialize):

2016-02-25  Jiewen Tan  <jiewen_tan@apple.com>

        Unreivewed build fix for r197150.

        * TestWebKitAPI/Tests/mac/IsNavigationActionTrusted.mm:

2016-02-25  Jiewen Tan  <jiewen_tan@apple.com>

        Restrict information passed with navigation action which is triggered by untrusted event
        https://bugs.webkit.org/show_bug.cgi?id=154571
        <rdar://problem/15967937>

        Reviewed by Andy Estes.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/mac/IsNavigationActionTrusted.mm: Added.
        (-[WKNavigationActionDelegate webView:decidePolicyForNavigationAction:decisionHandler:]):
        (TestWebKitAPI::TEST):
        (-[NavigationActionDelegate webView:decidePolicyForNavigationAction:request:frame:decisionListener:]):
        * TestWebKitAPI/Tests/mac/IsNavigationActionTrusted.html: Added.

2016-02-25  Gavin Barraclough  <barraclough@apple.com>

        Should template RefCounter instead of RefCounter::Token
        https://bugs.webkit.org/show_bug.cgi?id=154691

        Reviewed by Anders Carlsson.

        Mechanical update per RefCounter interface change.

        * TestWebKitAPI/Tests/WTF/RefCounter.cpp:
        (TestWebKitAPI::TEST):

2016-02-25  Skachkov Aleksandr  <gskachkov@gmail.com>

        Unreviewed: Add Aleksandr Skachkov as a commiter

        * Scripts/webkitpy/common/config/contributors.json:

2016-02-25  Sam Weinig  <sam@webkit.org>

        HashMap::ensure() should return an AddResult like all the other add-like functions
        https://bugs.webkit.org/show_bug.cgi?id=154680

        Reviewed by Anders Carlsson.

        * TestWebKitAPI/Tests/WTF/HashMap.cpp:
        (TestWebKitAPI::TEST):
        Update tests to use/test the new AddResult result.

2016-02-25  Alexey Proskuryakov  <ap@apple.com>

        Enable MallocScribble when detecting leaks
        https://bugs.webkit.org/show_bug.cgi?id=154679

        Reviewed by Geoffrey Garen.

        * Scripts/webkitpy/port/ios.py:
        (IOSSimulatorPort.setup_environ_for_server):
        * Scripts/webkitpy/port/mac.py:
        (MacPort.setup_environ_for_server):
        * Scripts/webkitpy/port/mac_unittest.py:
        (MacTest.test_setup_environ_for_server):

2016-02-25  Eric Carlson  <eric.carlson@apple.com>

        Unreviewed, fix iOS builds after r197114.

        * WebKitTestRunner/TestController.cpp:
        (WTR::createCanonicalUUIDString):
        (WTR::TestController::saltForOrigin):

2016-02-25  Eric Carlson  <eric.carlson@apple.com>

        [MediaStream] MediaDeviceInfo deviceId and groupId must be unique to the page's origin
        https://bugs.webkit.org/show_bug.cgi?id=153163
        <rdar://problem/24334526>

        Reviewed by Tim Horton.

        * WebKitTestRunner/InjectedBundle/InjectedBundle.cpp:
        (WTR::InjectedBundle::setUserMediaPermissionForOrigin): Take top level document origin.
        * WebKitTestRunner/InjectedBundle/InjectedBundle.h:

        * WebKitTestRunner/InjectedBundle/TestRunner.cpp:
        (WTR::TestRunner::setUserMediaPermissionForOrigin): Ditto.
        * WebKitTestRunner/InjectedBundle/TestRunner.h:

        * WebKitTestRunner/TestController.cpp:
        (WTR::decidePolicyForUserMediaPermissionRequest): Pass through top level document origin.
        (WTR::checkUserMediaPermissionForOrigin): Ditto.
        (WTR::TestController::resetStateToConsistentValues): m_userMediaOriginPermissions -> m_cahcedUserMediaPermissions.
        (WTR::originUserVisibleName): Return a String.
        (WTR::userMediaOriginHash): Create a hash of the origin plus top level document origin.
        (WTR::TestController::saltForOrigin): Return salt for an origin.
        (WTR::TestController::setUserMediaPermissionForOrigin): Return permission for an origin.
        (WTR::TestController::handleCheckOfUserMediaPermissionForOrigin):
        (WTR::TestController::handleUserMediaPermissionRequest):
        (WTR::TestController::decidePolicyForUserMediaPermissionRequestIfPossible):
        (WTR::OriginSettings::OriginSettings): New, class to cache settings for an origin.
        (WTR::OriginSettings::persistentPermission): Persistent permissions for origin.
        (WTR::OriginSettings::setPersistentPermission): Set permissions for origin.
        (WTR::OriginSettings::persistentSalt): Return the persistent salt for the origin, if any.
        (WTR::OriginSettings::setPersistentSalt): Set the persistent salt for the origin
        (WTR::OriginSettings::ephemeralSalts): Return hashmap used to store per-frame salts.
        * WebKitTestRunner/TestController.h:

        * WebKitTestRunner/TestInvocation.cpp:
        (WTR::TestInvocation::didReceiveMessageFromInjectedBundle):

2016-02-24  Nikos Andronikos  <nikos.andronikos-webkit@cisra.canon.com.au>

        [web-animations] Add AnimationTimeline, DocumentTimeline and add extensions to Document interface
        https://bugs.webkit.org/show_bug.cgi?id=151688

        Reviewed by Dean Jackson.

        Enables the WEB_ANIMATIONS compiler switch by default.

        * Scripts/webkitperl/FeatureList.pm:

2016-02-24  Youenn Fablet  <youenn.fablet@crf.canon.fr>

        W3C importer should generate all web-platform-tests submodules descriptions
        https://bugs.webkit.org/show_bug.cgi?id=154587

        Reviewed by Darin Adler.

        Updated submodules description format (removing submodule name as it is the last string of the path really).
        Added git subroutines.

        * Scripts/webkitpy/common/checkout/scm/git.py:
        (Git.origin_url):
        (Git):
        (Git.init_submodules):
        (Git.submodules_status):
        (Git.deinit_submodules):
        * Scripts/webkitpy/layout_tests/servers/web_platform_test_server.py:
        (WebPlatformTestServer._install_modules): Updated to submodule name removal.
        * Scripts/webkitpy/w3c/test_downloader.py:
        (TestDownloader._git_submodules_description): Updated to cope with recursive submodules (use of submodule init/deinit).
        * Scripts/webkitpy/w3c/test_importer_unittest.py:
        (TestImporterTest.test_submodules_generation): Reactivated partially this test.

2016-02-23  Dan Bernstein  <mitz@apple.com>

        [Xcode] Linker errors display mangled names, but no longer should
        https://bugs.webkit.org/show_bug.cgi?id=154632

        Reviewed by Sam Weinig.

        * ContentExtensionTester/Configurations/Base.xcconfig: Stop setting LINKER_DISPLAYS_MANGLED_NAMES to YES.
        * DumpRenderTree/mac/Configurations/Base.xcconfig: Ditto.
        * LayoutTestRelay/Configurations/Base.xcconfig: Ditto.
        * MiniBrowser/Configurations/Base.xcconfig: Ditto.
        * TestWebKitAPI/Configurations/Base.xcconfig: Ditto.
        * WebEditingTester/Configurations/Base.xcconfig: Ditto.
        * WebKitTestRunner/Configurations/Base.xcconfig: Ditto.

2016-02-23  Anders Carlsson  <andersca@apple.com>

        WKWebView should implement NSCoding
        https://bugs.webkit.org/show_bug.cgi?id=137160

        Reviewed by Dan Bernstein.

        Add tests.

        * TestWebKitAPI/Tests/WebKit2Cocoa/Coding.mm:
        (TEST):

2016-02-23  Anders Carlsson  <andersca@apple.com>

        WKProcessPool should conform to NSCoding
        https://bugs.webkit.org/show_bug.cgi?id=154608

        Reviewed by Sam Weinig.

        Add tests.

        * TestWebKitAPI/Tests/WebKit2Cocoa/Coding.mm:
        (TEST):

2016-02-23  Anders Carlsson  <andersca@apple.com>

        WKWebsiteDataStore should conform to NSCoding
        https://bugs.webkit.org/show_bug.cgi?id=154605

        Reviewed by Dan Bernstein.

        * TestWebKitAPI/Tests/WebKit2Cocoa/Coding.mm:
        (TEST):

2016-02-23  Anders Carlsson  <andersca@apple.com>

        WKWebViewConfiguration should conform to NSCoding
        https://bugs.webkit.org/show_bug.cgi?id=154602

        Reviewed by Beth Dakin.

        * TestWebKitAPI/Tests/WebKit2Cocoa/Coding.mm:
        (TEST):

2016-02-23  Anders Carlsson  <andersca@apple.com>

        WKPreferences should conform to NSCoding
        https://bugs.webkit.org/show_bug.cgi?id=154597

        Reviewed by Sam Weinig.

        Test encoding and decoding WKPreferences.

        * TestWebKitAPI/Tests/WebKit2Cocoa/Coding.mm:
        (encodeAndDecode):
        (TEST):

2016-02-23  Anders Carlsson  <andersca@apple.com>

        Fix build.

        * TestWebKitAPI/mac/SyntheticBackingScaleFactorWindow.m:
        (-[SyntheticBackingScaleFactorWindow initWithContentRect:styleMask:backing:defer:]):

2016-02-23  Carlos Alberto Lopez Perez  <clopez@igalia.com>

        [GTK] Allow to run the WebKitGTK+ MiniBrowser with the run-benchmark script.
        https://bugs.webkit.org/show_bug.cgi?id=153993

        Reviewed by Carlos Garcia Campos.

        * MiniBrowser/gtk/main.c:
        (createBrowserWindow): Support --geometry argument for MiniBrowser.
        We use this on the gtk_minibrowser_driver script to start the MiniBrowser maximized.
        * Scripts/webkitpy/benchmark_runner/browser_driver/__init__.py: Fix loading of subclasses:
        The base class has to be loaded first, otherwise any subclase referencing it will give import error.
        In OSX the ordering of os.listdir() causes the base class (browser_driver.py) to be first on the list, but not on Linux.
        By specifiying the name of the base class file, we ensure it is always loaded first on any system despite the ordering of listdir.
        * Scripts/webkitpy/benchmark_runner/browser_driver/browser_driver_factory.py:
        (BrowserDriverFactory.create):
        * Scripts/webkitpy/benchmark_runner/browser_driver/gtk_browser_driver.py: Added.
        (GTKBrowserDriver):
        (GTKBrowserDriver.prepare_env):
        (GTKBrowserDriver.restore_env):
        (GTKBrowserDriver.close_browsers):
        (GTKBrowserDriver._launch_process):
        (GTKBrowserDriver._terminate_processes):
        (GTKBrowserDriver._screen_size):
        * Scripts/webkitpy/benchmark_runner/browser_driver/gtk_minibrowser_driver.py: Added.
        (GTKMiniBrowserDriver):
        (GTKMiniBrowserDriver.prepare_env):
        (GTKMiniBrowserDriver.launch_url):
        (GTKMiniBrowserDriver.close_browsers):
        * Scripts/webkitpy/benchmark_runner/http_server_driver/__init__.py: Fix loading of subclasses. See description above.
        * Scripts/webkitpy/benchmark_runner/http_server_driver/simple_http_server_driver.py:
        (SimpleHTTPServerDriver):
        (SimpleHTTPServerDriver.kill_server): Check if the server is still running before trying to terminate it.
        Usually the server ends gracefully (no need to terminate it), so this was causing ugly errors on the log.
        * Scripts/webkitpy/benchmark_runner/utils.py: Fix loading of subclasses. See description above.
        (load_subclasses):

2016-02-23  Alejandro G. Castro  <alex@igalia.com>

        [GTK] Missing configuration patch for openh264 compilation
        https://bugs.webkit.org/show_bug.cgi?id=154455

        This patch is required for the openh264 compilation with the
        jhbuild-webrtc.modules. The code was implemented by Alessandro
        Decina.

        Reviewed by Philippe Normand.

        * gtk/patches/openh264-configure.patch: Added.

2016-02-20  Olivier Blin  <olivier.blin@softathome.com>

        [cmake] Use ICU include dirs in WebKit2 and WebKitTestRunner
        https://bugs.webkit.org/show_bug.cgi?id=154479

        Reviewed by Michael Catanzaro.

        * WebKitTestRunner/CMakeLists.txt:

2016-02-19  Konstantin Tokarev  <annulen@yandex.ru>

        [GTK] Fixed link error when G_DEFINE_AUTOPTR_CLEANUP_FUNC is not defined.
        https://bugs.webkit.org/show_bug.cgi?id=154467

        Reviewed by Michael Catanzaro.

        * TestWebKitAPI/Tests/WebKit2Gtk/TestAutocleanups.cpp:
        (beforeAll):
        (afterAll):

2016-02-19  Brady Eidson  <beidson@apple.com>

        Add "databaseProcessDidCrash" to the WKContextClient; Adopt it in WKTR.
        https://bugs.webkit.org/show_bug.cgi?id=154428

        Reviewed by Jer Noble.

        * WebKitTestRunner/TestController.cpp:
        (WTR::TestController::generatePageConfiguration):
        (WTR::TestController::databaseProcessName):
        (WTR::TestController::databaseProcessDidCrash):
        * WebKitTestRunner/TestController.h:

2016-02-18  Philippe Normand  <pnormand@igalia.com>

        [GStreamer] Bump internal jhbuild versions to 1.6.3
        https://bugs.webkit.org/show_bug.cgi?id=149594

        Reviewed by Michael Catanzaro.

        * gtk/jhbuild.modules: Bump to GStreamer 1.6.3.
        * gtk/patches/gst-plugins-bad-fix-faad2-version-check.patch: Removed.
        * gtk/patches/gst-plugins-bad-remove-gnustep-support.patch: Removed.
        * gtk/patches/gst-plugins-base-rtp-rtcpbuffer-fix-typo-in-enum.patch: Removed.

2016-02-18  Brent Fulgham  <bfulgham@apple.com>

        Extend HashCountedSet with a method to efficiently set the count of an entry
        https://bugs.webkit.org/show_bug.cgi?id=154352

        Reviewed by Geoffrey Garen.

        * TestWebKitAPI/CMakeLists.txt: Add new HashCountedSet test files.
        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj: Ditto.
        * TestWebKitAPI/Tests/WTF/HashCountedSet.cpp: Added.

2016-02-18  Commit Queue  <commit-queue@webkit.org>

        Unreviewed, rolling out r196791.
        https://bugs.webkit.org/show_bug.cgi?id=154438

        broke windows build (Requested by alexchristensen on #webkit).

        Reverted changeset:

        "Extend HashCountedSet with a method to efficiently set the
        count of an entry"
        https://bugs.webkit.org/show_bug.cgi?id=154352
        http://trac.webkit.org/changeset/196791

2016-02-18  Brent Fulgham  <bfulgham@apple.com>

        Extend HashCountedSet with a method to efficiently set the count of an entry
        https://bugs.webkit.org/show_bug.cgi?id=154352

        Reviewed by Geoffrey Garen.

        * TestWebKitAPI/CMakeLists.txt: Add new HashCountedSet test files.
        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj: Ditto.
        * TestWebKitAPI/Tests/WTF/HashCountedSet.cpp: Added.

2016-02-18  Anders Carlsson  <andersca@apple.com>

        Get rid of the --target-web-process and --use-web-process-xpc-service options.

        Rubber-stamped by Dan Bernstein.

        We now always use XPC, and --target-web-process is no longer supported.

        * Scripts/webkitdirs.pm:
        (execMacWebKitAppForDebugging):
        (shouldTargetWebProcess): Deleted.
        (determineShouldTargetWebProcess): Deleted.
        (shouldUseXPCServiceForWebProcess): Deleted.
        (determineShouldUseXPCServiceForWebProcess): Deleted.
        (printHelpAndExitForRunAndDebugWebKitAppIfNeeded): Deleted.
        (argumentsForRunAndDebugMacWebKitApp): Deleted.

2016-02-18  Ryan Haddad  <ryanhaddad@apple.com>

        Skip API test WTF_ParkingLot.UnparkOneFiftyThenFiftyAll on ios-simulator
        https://bugs.webkit.org/show_bug.cgi?id=153997

        Reviewed by Filip Pizlo.

        * TestWebKitAPI/Tests/WTF/ParkingLot.cpp:

2016-02-18  Jer Noble  <jer.noble@apple.com>

        run-webkit-httpd should use webkitpy to run httpd.
        https://bugs.webkit.org/show_bug.cgi?id=154271

        Reviewed by Alexey Proskuryakov.

        Update run-webkit-httpd to use webkitpy.port to launch httpd. Pass on http_port and http_all_interface
        options to match the current run-webkit-httpd (optional) behavior.

        * Scripts/run-webkit-httpd:
        (parse_args):
        (main):
        * Scripts/webkitpy/layout_tests/servers/apache_http_server.py:
        (LayoutTestApacheHttpd.__init__):
        * Scripts/webkitpy/layout_tests/servers/http_server.py:
        (Lighttpd._prepare_config):
        * Scripts/webkitpy/port/base.py:
        (Port.to.start_http_server):

2016-02-18  Filip Pizlo  <fpizlo@apple.com>

        Remove remaining references to LLVM, and make sure comments refer to the backend as "B3" not "LLVM"
        https://bugs.webkit.org/show_bug.cgi?id=154383

        Reviewed by Saam Barati.

        * Scripts/run-jsc-stress-tests:

2016-02-17  Filip Pizlo  <fpizlo@apple.com>

        Remove LLVM dependencies from WebKit
        https://bugs.webkit.org/show_bug.cgi?id=154323

        Reviewed by Antti Koivisto and Benjamin Poulain.

        * Scripts/copy-webkitlibraries-to-product-directory:
        (isContentOfFileEqualToString):
        (fileContains): Deleted.
        (buildLLVM): Deleted.
        (symlinkLLVMLibrariesIfNeeded): Deleted.

2016-02-16  Sam Weinig  <sam@webkit.org>

        Add an ensure function on HashMap that takes a key and a function to make the lazy value initialization idiom easier
        https://bugs.webkit.org/show_bug.cgi?id=134857

        Reviewed by Geoffrey Garen.

        * TestWebKitAPI/Tests/WTF/HashMap.cpp:
        Add tests for HashMap::ensure.

2016-02-17  Nan Wang  <n_wang@apple.com>

        AX: Implement sentence related text marker functions using TextIterator
        https://bugs.webkit.org/show_bug.cgi?id=154312

        Reviewed by Chris Fleizach.

        * DumpRenderTree/AccessibilityUIElement.cpp:
        (nextParagraphEndTextMarkerForTextMarkerCallback):
        (sentenceTextMarkerRangeForTextMarkerCallback):
        (previousSentenceStartTextMarkerForTextMarkerCallback):
        (nextSentenceEndTextMarkerForTextMarkerCallback):
        (setSelectedVisibleTextRangeCallback):
        (AccessibilityUIElement::nextParagraphEndTextMarkerForTextMarker):
        (AccessibilityUIElement::sentenceTextMarkerRangeForTextMarker):
        (AccessibilityUIElement::previousSentenceStartTextMarkerForTextMarker):
        (AccessibilityUIElement::nextSentenceEndTextMarkerForTextMarker):
        (AccessibilityUIElement::getJSClass):
        * DumpRenderTree/AccessibilityUIElement.h:
        * DumpRenderTree/ios/AccessibilityUIElementIOS.mm:
        (AccessibilityUIElement::nextParagraphEndTextMarkerForTextMarker):
        (AccessibilityUIElement::sentenceTextMarkerRangeForTextMarker):
        (AccessibilityUIElement::previousSentenceStartTextMarkerForTextMarker):
        (AccessibilityUIElement::nextSentenceEndTextMarkerForTextMarker):
        * DumpRenderTree/mac/AccessibilityUIElementMac.mm:
        (AccessibilityUIElement::nextParagraphEndTextMarkerForTextMarker):
        (AccessibilityUIElement::sentenceTextMarkerRangeForTextMarker):
        (AccessibilityUIElement::previousSentenceStartTextMarkerForTextMarker):
        (AccessibilityUIElement::nextSentenceEndTextMarkerForTextMarker):
        (AccessibilityUIElement::supportedActions):
        * WebKitTestRunner/InjectedBundle/AccessibilityUIElement.cpp:
        (WTR::AccessibilityUIElement::paragraphTextMarkerRangeForTextMarker):
        (WTR::AccessibilityUIElement::nextParagraphEndTextMarkerForTextMarker):
        (WTR::AccessibilityUIElement::previousParagraphStartTextMarkerForTextMarker):
        (WTR::AccessibilityUIElement::sentenceTextMarkerRangeForTextMarker):
        (WTR::AccessibilityUIElement::nextSentenceEndTextMarkerForTextMarker):
        (WTR::AccessibilityUIElement::previousSentenceStartTextMarkerForTextMarker):
        * WebKitTestRunner/InjectedBundle/AccessibilityUIElement.h:
        * WebKitTestRunner/InjectedBundle/Bindings/AccessibilityUIElement.idl:
        * WebKitTestRunner/InjectedBundle/ios/AccessibilityUIElementIOS.mm:
        (WTR::AccessibilityUIElement::previousParagraphStartTextMarkerForTextMarker):
        (WTR::AccessibilityUIElement::sentenceTextMarkerRangeForTextMarker):
        (WTR::AccessibilityUIElement::nextSentenceEndTextMarkerForTextMarker):
        (WTR::AccessibilityUIElement::previousSentenceStartTextMarkerForTextMarker):
        (WTR::AccessibilityUIElement::mathPostscriptsDescription):
        * WebKitTestRunner/InjectedBundle/mac/AccessibilityUIElementMac.mm:
        (WTR::AccessibilityUIElement::nextParagraphEndTextMarkerForTextMarker):
        (WTR::AccessibilityUIElement::sentenceTextMarkerRangeForTextMarker):
        (WTR::AccessibilityUIElement::previousSentenceStartTextMarkerForTextMarker):
        (WTR::AccessibilityUIElement::nextSentenceEndTextMarkerForTextMarker):
        (WTR::_convertMathMultiscriptPairsToString):

2016-02-15  Brent Fulgham  <bfulgham@apple.com>

        [Mac] Gather some rudimentary statistics during resource load 
        https://bugs.webkit.org/show_bug.cgi?id=153575
        <rdar://problem/24075254>

        Reviewed by Brady Eidson.

        * MiniBrowser/mac/SettingsController.h:
        * MiniBrowser/mac/SettingsController.m:
        (-[SettingsController _populateMenu]): Add menu item for new debug flag.
        (-[SettingsController toggleResourceLoadStatisticsEnabled:]): Added.
        (-[SettingsController resourceLoadStatisticsEnabled]): Added.
        * MiniBrowser/mac/WK1BrowserWindowController.m:
        (-[WK1BrowserWindowController didChangeSettings]): React to changes in
        users's desire to track resource load statistics.

2016-02-15  Csaba Osztrogonác  <ossy@webkit.org>

        [EFL] Update Tools/efl/install-dependencies
        https://bugs.webkit.org/show_bug.cgi?id=154239

        Reviewed by Michael Catanzaro.

        * efl/install-dependencies:

2016-02-15  Alex Christensen  <achristensen@webkit.org>

        Fix internal Windows build of projects built after WebKit
        https://bugs.webkit.org/show_bug.cgi?id=154249
        rdar://problem/24644805

        Reviewed by Chris Dumez.

        * DumpRenderTree/PlatformWin.cmake:
        * MiniBrowser/win/CMakeLists.txt:
        Don't include DerivedSources/WebKit/Interfaces to make MiniBrowser and DumpRenderTree
        more like projects built internally after WebKit.  They should only need to use what
        is in ForwardingHeaders/WebKit.

2016-02-12  Nan Wang  <n_wang@apple.com>

        AX: Implement paragraph related text marker functions using TextIterator
        https://bugs.webkit.org/show_bug.cgi?id=154098
        <rdar://problem/24269675>

        Reviewed by Chris Fleizach.

        * DumpRenderTree/AccessibilityUIElement.cpp:
        (nextWordEndTextMarkerForTextMarkerCallback):
        (paragraphTextMarkerRangeForTextMarkerCallback):
        (previousParagraphStartTextMarkerForTextMarkerCallback):
        (nextParagraphEndTextMarkerForTextMarkerCallback):
        (setSelectedVisibleTextRangeCallback):
        (AccessibilityUIElement::nextWordEndTextMarkerForTextMarker):
        (AccessibilityUIElement::paragraphTextMarkerRangeForTextMarker):
        (AccessibilityUIElement::previousParagraphStartTextMarkerForTextMarker):
        (AccessibilityUIElement::nextParagraphEndTextMarkerForTextMarker):
        (AccessibilityUIElement::getJSClass):
        * DumpRenderTree/AccessibilityUIElement.h:
        * DumpRenderTree/ios/AccessibilityUIElementIOS.mm:
        (AccessibilityUIElement::nextWordEndTextMarkerForTextMarker):
        (AccessibilityUIElement::paragraphTextMarkerRangeForTextMarker):
        (AccessibilityUIElement::previousParagraphStartTextMarkerForTextMarker):
        (AccessibilityUIElement::nextParagraphEndTextMarkerForTextMarker):
        * DumpRenderTree/mac/AccessibilityUIElementMac.mm:
        (AccessibilityUIElement::nextWordEndTextMarkerForTextMarker):
        (AccessibilityUIElement::paragraphTextMarkerRangeForTextMarker):
        (AccessibilityUIElement::previousParagraphStartTextMarkerForTextMarker):
        (AccessibilityUIElement::nextParagraphEndTextMarkerForTextMarker):
        (AccessibilityUIElement::supportedActions):
        * WebKitTestRunner/InjectedBundle/AccessibilityUIElement.cpp:
        (WTR::AccessibilityUIElement::rightWordTextMarkerRangeForTextMarker):
        (WTR::AccessibilityUIElement::previousWordStartTextMarkerForTextMarker):
        (WTR::AccessibilityUIElement::nextWordEndTextMarkerForTextMarker):
        (WTR::AccessibilityUIElement::paragraphTextMarkerRangeForTextMarker):
        (WTR::AccessibilityUIElement::nextParagraphEndTextMarkerForTextMarker):
        (WTR::AccessibilityUIElement::previousParagraphStartTextMarkerForTextMarker):
        * WebKitTestRunner/InjectedBundle/AccessibilityUIElement.h:
        * WebKitTestRunner/InjectedBundle/Bindings/AccessibilityUIElement.idl:
        * WebKitTestRunner/InjectedBundle/ios/AccessibilityUIElementIOS.mm:
        (WTR::AccessibilityUIElement::nextWordEndTextMarkerForTextMarker):
        (WTR::AccessibilityUIElement::paragraphTextMarkerRangeForTextMarker):
        (WTR::AccessibilityUIElement::nextParagraphEndTextMarkerForTextMarker):
        (WTR::AccessibilityUIElement::previousParagraphStartTextMarkerForTextMarker):
        (WTR::AccessibilityUIElement::mathPostscriptsDescription):
        * WebKitTestRunner/InjectedBundle/mac/AccessibilityUIElementMac.mm:
        (WTR::AccessibilityUIElement::nextWordEndTextMarkerForTextMarker):
        (WTR::AccessibilityUIElement::paragraphTextMarkerRangeForTextMarker):
        (WTR::AccessibilityUIElement::previousParagraphStartTextMarkerForTextMarker):
        (WTR::AccessibilityUIElement::nextParagraphEndTextMarkerForTextMarker):
        (WTR::_convertMathMultiscriptPairsToString):

2016-02-12  Jason Marcell  <jmarcell@apple.com>

        Open source bot watcher's dashboard fails assertion in BuildbotQueue.prototype.compareIterationsByRevisions
        https://bugs.webkit.org/show_bug.cgi?id=154180

        Reviewed by Alexey Proskuryakov.

        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Scripts/Dashboard.js: Remove reference to Internal
        repository.

2016-02-12  Jer Noble  <jer.noble@apple.com>

        [Mac] Adopt MediaResourceLoader (instead of CachedResourceLoader) in WebCoreNSURLSession.
        https://bugs.webkit.org/show_bug.cgi?id=154136

        Reviewed by Alex Christensen.

        Use a MediaResourceLoader instead of a CachedResourceLoader for WebCoreNSURLSession.

        Drive-by fix: generate USE and ENABLE macros for TestWebKitAPI by adding FEATURE_DEFINES
        to GCC_PREPROCESSOR_DEFINES.

        * TestWebKitAPI/Configurations/Base.xcconfig:
        * TestWebKitAPI/Tests/WebCore/WebCoreNSURLSession.mm:
        (TestWebKitAPI::WebCoreNSURLSessionTest::SetUp):
        (TestWebKitAPI::WebCoreNSURLSessionTest::TearDown):
        (TestWebKitAPI::TEST_F):

2016-02-11  Dana Burkart  <dburkart@apple.com>

        Large logs can bring down the webkit master
        https://bugs.webkit.org/show_bug.cgi?id=122112

        Reviewed by Lucas Forschler.

        Implement the suggested fix of throwing away stdout / stderr.

        * BuildSlaveSupport/build.webkit.org-config/master.cfg:
        (RunWebKit1LeakTests):

2016-02-10  Jason Marcell  <jmarcell@apple.com>

        Remove calls to parseInt in order to work with non-integer revisions
        https://bugs.webkit.org/show_bug.cgi?id=153820

        Reviewed by Daniel Bates.

        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Scripts/BuildbotIteration.js:
        (BuildbotIteration.prototype.sourceStampChanges): Remove calls to parseInt in order to work with non-integer
        revisions.
        (BuildbotIteration.prototype._parseData): Ditto.
        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Scripts/BuildbotQueue.js:
        (BuildbotQueue.prototype.update): Ditto.
        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Scripts/tests/MockBuildbotQueueView.js:
        (MockBuildbotQueueView.prototype._latestProductiveIteration): Change integers to strings in test code.
        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Scripts/tests/MockTrac.js:
        (MockTrac.prototype.get oldestRecordedRevisionNumber): Ditto.
        (MockTrac.prototype.get latestRecordedRevisionNumber): Ditto.
        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Scripts/tests/tests.js: Ditto.

2016-02-10  Jason Marcell  <jmarcell@apple.com>

        Teach dashboard code to compare non-integer revisions
        https://bugs.webkit.org/show_bug.cgi?id=152345

        Reviewed by Daniel Bates.

        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Scripts/BuildbotQueue.js:
        (BuildbotQueue.prototype.compareIterationsByRevisions): Compare non-integer revisions.
        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Scripts/BuildbotQueueView.js:
        (BuildbotQueueView.prototype._appendPendingRevisionCount): Use Trac.indexOfRevision in order to compare non-integer
        revisions. Also uses new Trac.commitsOnBranchLaterThanRevision method.
        (BuildbotQueueView.prototype._popoverLinesForCommitRange): Ditto.
        (BuildbotQueueView.prototype._presentPopoverForPendingCommits): Use Trac.indexOfRevision in order to compare non-integer
        revisions. Also uses new Trac.nextRevision method to calculate a revision range.
        (BuildbotQueueView.prototype._revisionContentWithPopoverForIteration): Ditto.
        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Scripts/Trac.js:
        (Trac.prototype._commitsOnBranch): Renamed this to indicate that it should be a private method used by the latter two new
        methods.
        (Trac.prototype.commitsOnBranchLaterThanRevision): Finds revisions on a branch later than the specified revision.
        (Trac.prototype.commitsOnBranchInRevisionRange): Finds revisions on a branch within a specified range.
        (Trac.prototype.nextRevision): Finds the next revision after a given revision on a specific branch.
        (Trac.prototype.indexOfRevision): Finds the index of a given revision within the recordedCommits array.
        (Trac.prototype.commitsOnBranch): Deleted. Renamed to _commitsOnBranch.
        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Scripts/tests/tests.js: Added unit tests.

2016-02-09  Nan Wang  <n_wang@apple.com>

        AX: Implement word related text marker functions using TextIterator
        https://bugs.webkit.org/show_bug.cgi?id=153939
        <rdar://problem/24269605>

        Reviewed by Chris Fleizach.

        * DumpRenderTree/AccessibilityUIElement.cpp:
        (endTextMarkerCallback):
        (leftWordTextMarkerRangeForTextMarkerCallback):
        (rightWordTextMarkerRangeForTextMarkerCallback):
        (previousWordStartTextMarkerForTextMarkerCallback):
        (nextWordEndTextMarkerForTextMarkerCallback):
        (setSelectedVisibleTextRangeCallback):
        (AccessibilityUIElement::setSelectedVisibleTextRange):
        (AccessibilityUIElement::leftWordTextMarkerRangeForTextMarker):
        (AccessibilityUIElement::rightWordTextMarkerRangeForTextMarker):
        (AccessibilityUIElement::previousWordStartTextMarkerForTextMarker):
        (AccessibilityUIElement::nextWordEndTextMarkerForTextMarker):
        (AccessibilityUIElement::getJSClass):
        * DumpRenderTree/AccessibilityUIElement.h:
        * DumpRenderTree/ios/AccessibilityUIElementIOS.mm:
        (AccessibilityUIElement::setSelectedVisibleTextRange):
        (AccessibilityUIElement::leftWordTextMarkerRangeForTextMarker):
        (AccessibilityUIElement::rightWordTextMarkerRangeForTextMarker):
        (AccessibilityUIElement::previousWordStartTextMarkerForTextMarker):
        (AccessibilityUIElement::nextWordEndTextMarkerForTextMarker):
        * DumpRenderTree/mac/AccessibilityUIElementMac.mm:
        (AccessibilityUIElement::setSelectedVisibleTextRange):
        (AccessibilityUIElement::leftWordTextMarkerRangeForTextMarker):
        (AccessibilityUIElement::rightWordTextMarkerRangeForTextMarker):
        (AccessibilityUIElement::previousWordStartTextMarkerForTextMarker):
        (AccessibilityUIElement::nextWordEndTextMarkerForTextMarker):
        (AccessibilityUIElement::supportedActions):
        * WebKitTestRunner/InjectedBundle/AccessibilityUIElement.cpp:
        (WTR::AccessibilityUIElement::setBoolAttributeValue):
        (WTR::AccessibilityUIElement::leftWordTextMarkerRangeForTextMarker):
        (WTR::AccessibilityUIElement::rightWordTextMarkerRangeForTextMarker):
        (WTR::AccessibilityUIElement::previousWordStartTextMarkerForTextMarker):
        (WTR::AccessibilityUIElement::nextWordEndTextMarkerForTextMarker):
        * WebKitTestRunner/InjectedBundle/AccessibilityUIElement.h:
        * WebKitTestRunner/InjectedBundle/Bindings/AccessibilityUIElement.idl:
        * WebKitTestRunner/InjectedBundle/ios/AccessibilityUIElementIOS.mm:
        (WTR::AccessibilityUIElement::endTextMarker):
        (WTR::AccessibilityUIElement::leftWordTextMarkerRangeForTextMarker):
        (WTR::AccessibilityUIElement::rightWordTextMarkerRangeForTextMarker):
        (WTR::AccessibilityUIElement::previousWordStartTextMarkerForTextMarker):
        (WTR::AccessibilityUIElement::nextWordEndTextMarkerForTextMarker):
        (WTR::AccessibilityUIElement::mathPostscriptsDescription):
        * WebKitTestRunner/InjectedBundle/mac/AccessibilityUIElementMac.mm:
        (WTR::AccessibilityUIElement::endTextMarker):
        (WTR::AccessibilityUIElement::leftWordTextMarkerRangeForTextMarker):
        (WTR::AccessibilityUIElement::rightWordTextMarkerRangeForTextMarker):
        (WTR::AccessibilityUIElement::previousWordStartTextMarkerForTextMarker):
        (WTR::AccessibilityUIElement::nextWordEndTextMarkerForTextMarker):
        (WTR::_convertMathMultiscriptPairsToString):

2016-02-09  Csaba Osztrogonác  <ossy@webkit.org>

        [EFL] Remove eail related cruft after r195725
        https://bugs.webkit.org/show_bug.cgi?id=154030

        Reviewed by Alex Christensen.

        * efl/jhbuildrc:

2016-02-09  Csaba Osztrogonác  <ossy@webkit.org>

        [EFL] Remove LLVM related cruft after r196077
        https://bugs.webkit.org/show_bug.cgi?id=154031

        Reviewed by Alex Christensen.

        * efl/jhbuild.modules:
        * efl/patches/llvm-elf-add-stackmaps-arm64.patch: Removed.
        * efl/patches/llvm-elf-allow-fde-references-outside-the-2gb-range-arm64.patch: Removed.
        * efl/patches/llvm-version-arm64.patch: Removed.

2016-02-05  Aakash Jain  <aakash_jain@apple.com>

        tests fail if display sleeps while run-webkit-tests is running
        https://bugs.webkit.org/show_bug.cgi?id=153919

        Reviewed by Alexey Proskuryakov.

        * DumpRenderTree/mac/LayoutTestHelper.m:
        (addDisplaySleepAssertion): Add the assertion so that the display doesn't turn off.
        (releaseDisplaySleepAssertion): Release the DisplaySleep Assertion.
        (simpleSignalHandler): Release the DisplaySleepAssertion in case of any iterrupt.

2016-02-05  Alex Christensen  <achristensen@webkit.org>

        Fix iOS API tests after r196082
        https://bugs.webkit.org/show_bug.cgi?id=153900

        Reviewed by Jer Noble.

        * TestWebKitAPI/Tests/WebCore/WebCoreNSURLSession.mm:
        (TestWebKitAPI::WebCoreNSURLSessionTest::SetUp):
        [WebView initialize] doesn't call JSC::initializeThreading on iOS.

2016-02-04  Jason Marcell  <jmarcell@apple.com>

        The status message for passing combined builder queues should say "all builds succeeded" when expanded.
        https://bugs.webkit.org/show_bug.cgi?id=153882

        Reviewed by Alexey Proskuryakov.

        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Scripts/BuildbotCombinedQueueView.js:
        (BuildbotCombinedQueueView.prototype.update): Set status to "all builds succeeded" for combined builder queues
        when expanded.

2016-02-03  Filip Pizlo  <fpizlo@apple.com>

        run-jsc-stress-tests should be better at telling you details about test failures
        https://bugs.webkit.org/show_bug.cgi?id=153845

        Reviewed by Geoffrey Garen.

        Here's an example of the contents of results/resultsByFamily, one of the new files that this
        generates, for some local testing I'm doing.  Notice how it groups families of tests together.

        You won't see this unless you cat results/resultsByFamily.

        regress.yaml/Regress/radar-24289839.js:
            regress.yaml/Regress/radar-24289839.js.default: PASS
            regress.yaml/Regress/radar-24289839.js.ftl: PASS
            regress.yaml/Regress/radar-24289839.js.ftl-no-cjit: FAIL
            regress.yaml/Regress/radar-24289839.js.ftl-eager-no-cjit: FAIL
        
        regress.yaml/Regress/radar-24290639.js:
            regress.yaml/Regress/radar-24290639.js.default: PASS
            regress.yaml/Regress/radar-24290639.js.ftl: PASS
            regress.yaml/Regress/radar-24290639.js.ftl-no-cjit: PASS
            regress.yaml/Regress/radar-24290639.js.ftl-eager-no-cjit: FAIL
        
        regress.yaml/Regress/radar-24290670.js: FAILED
        
        * Scripts/run-jsc-stress-tests:

2016-02-03  Carlos Garcia Campos  <cgarcia@igalia.com>

        [WTR] Crash in EventSendingController::contextClick() when context menu event is not handled
        https://bugs.webkit.org/show_bug.cgi?id=153835

        Reviewed by Martin Robinson.

        WKBundlePageCopyContextMenuAtPointInWindow() returns nullptr when
        the context menu event is not handled, but we are using the
        returned value without null checking it.

        * WebKitTestRunner/InjectedBundle/EventSendingController.cpp:
        (WTR::EventSendingController::contextClick):

2016-02-03  Jason Marcell  <jmarcell@apple.com>

        Format revisions for display according to repository type
        https://bugs.webkit.org/show_bug.cgi?id=153818

        Reviewed by Alexey Proskuryakov.

        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Scripts/BuildbotQueueView.js:
        (BuildbotQueueView.prototype._popoverLinesForCommitRange): Use new _formatRevisionForDisplay to display revisions according
        to repository type.
        (BuildbotQueueView.prototype._revisionContentWithPopoverForIteration): Ditto.
        (BuildbotQueueView.prototype._formatRevisionForDisplay): Formats revisions for display according to repository type.
        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Scripts/tests/tests.js: Added unit tests to test new
        _formatRevisionForDisplay function.

2016-02-03  Aakash Jain  <aakash_jain@apple.com>

        Logs/CoreSimulator filling up OS disk on WebKit testers
        https://bugs.webkit.org/show_bug.cgi?id=153853
        <rdar://problem/24496003>

        Reviewed by Alexey Proskuryakov.

        * Scripts/webkitpy/port/ios.py:
        (IOSSimulatorPort.clean_up_test_run): Delete Logs during cleanup.

2016-02-03  Brian Burg  <bburg@apple.com>

        git-add-reviewer should work when run from a subdirectory within the repository
        https://bugs.webkit.org/show_bug.cgi?id=153842

        Reviewed by David Kilzer.

        There are two problems that needed to be fixed:

         - We can't assume .git is in $PWD/.git
         - We can't specify absolute paths to `git commit`

        Fix these problems using the helpers in VCSUtils that were added to
        fix this same issue for prepare-changeCogs.

        * Scripts/VCSUtils.pm: Export gitDirectory()
        * Scripts/git-add-reviewer:
        (nonInteractive): Cache gitDirectory() result.
        (addReviewer):
        (commit):
        (changeLogsForCommit): Make paths relative.

2016-02-03  Jer Noble  <jer.noble@apple.com>

        Yet another Yosemite build fix.

        * TestWebKitAPI/Tests/WebCore/WebCoreNSURLSession.mm:

2016-02-03  Jer Noble  <jer.noble@apple.com>

        iOS build fix after Yosemite build fix broke iOS build.

        * TestWebKitAPI/Tests/WebCore/WebCoreNSURLSession.mm:

2016-02-03  Jer Noble  <jer.noble@apple.com>

        Yosemite build fix; hide the entire WebCoreNSURLSessionDataTask class from Yosemite and prior.

        * TestWebKitAPI/Tests/WebCore/WebCoreNSURLSession.mm:

2016-02-03  Joonghun Park  <jh718.park@samsung.com>

        [Tools] Remove $additionalCMakeArgs variable because without this variable --cmakeargs options works well
        https://bugs.webkit.org/show_bug.cgi?id=153827

        Reviewed by Michael Catanzaro.

        When an array is passed to subroutines as argument in perl,
        a list containing its element is returned from the array.
        Currently @$ arguments are being passed, then it is going to be one list
        including all the elements not only from @ but also from $.
        As a result, --cmakeargs option's value is included in @cmakeArgs
        at generateBuildSystemFromCMakeProject subroutine,
        so $additionalCMakeArgs doesn't needed anymore.

        * Scripts/webkitdirs.pm:
        (generateBuildSystemFromCMakeProject):

2016-02-03  Jer Noble  <jer.noble@apple.com>

        [Mac] Wrap a resource and resource loader in a NSURLSession-like object for use by lower level frameworks
        https://bugs.webkit.org/show_bug.cgi?id=153669

        Reviewed by Alex Christensen.

        Add an API test for WebCoreNSURLSession, testing that it behaves like a regulare NSURLSession, including
        calling appropriate NSURLSessionDelegate callbacks.

        Drive-by fix: Add a FeatureDefines.xcconfig to TestWebKitAPI.  Without this, the ENABLE macros in WebCore
        header files will not match the one used when compiling WebCore, leading to strange crashes and weird
        inconsistencies when calling, e.g., inline methods.

        * TestWebKitAPI/Configurations/FeatureDefines.xcconfig: Added.
        * TestWebKitAPI/Configurations/TestWebKitAPI.xcconfig:
        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WebCore/WebCoreNSURLSession.mm: Added.
        (-[TestNSURLSessionLoaderDelegate webView:didCommitLoadForFrame:]):
        (-[TestNSURLSessionDataDelegate URLSession:task:didCompleteWithError:]):
        (-[TestNSURLSessionDataDelegate URLSession:dataTask:didReceiveResponse:completionHandler:]):
        (-[TestNSURLSessionDataDelegate URLSession:dataTask:didReceiveData:]):
        (TestWebKitAPI::WebCoreNSURLSessionTest::SetUp):
        (TestWebKitAPI::WebCoreNSURLSessionTest::TearDown):
        (TestWebKitAPI::TEST_F):

2016-02-03  Konstantin Tokarev  <annulen@yandex.ru>

        [webkitdirs] Clarify logic behind is{PortName} functions.
        https://bugs.webkit.org/show_bug.cgi?id=153554

        Reviewed by Michael Catanzaro.

        * Scripts/webkitdirs.pm:
        (prohibitUnknownPort): This function makes determinePortName()
        failure fatal.
        (determinePortName): Added new function which decides which port are
        we building based on command line switches and platform defaults.
        (portName): Added getter for determined $portName.
        (isEfl): Modified to use portName().
        (isGtk): Ditto.
        (isWinCairo): Ditto.
        (isAppleMacWebKit): Ditto.
        (isAppleWinWebKit): Ditto.
        (isIOSWebKit): Ditto.
        (cmakeBasedPortName): Return portName() with capitalized first letter.
        (determineIsEfl): Deleted.
        (determineIsGtk): Deleted.
        (determineIsWinCairo): Deleted.

        * Scripts/build-jsc: Call prohibitUnknownPort().
        * Scripts/run-minibrowser: Ditto.
        * Scripts/webkitperl/FeatureList.pm: Ditto.
        * Scripts/update-webkit: Call determinePortName() instead of
        determineIsWinCairo().

2016-02-02  Dan Bernstein  <mitz@apple.com>

        Better fix for Layout Test fast/parser/external-entities-in-xslt.xml is flaky on El Capitan (but fails most of the time)
        https://bugs.webkit.org/show_bug.cgi?id=153683

        Reviewed by Darin Adler.

        * Scripts/webkitpy/port/driver.py:
        (Driver._setup_environ_for_driver): Reverted change from r196013. DUMPRENDERTREE_TEMP is not
          used by any code in the Web Content process. If that ever changed, we should send it over
          as a bundle parameter.

        * Scripts/webkitpy/port/ios.py:
        (IOSSimulatorPort.setup_environ_for_server): Reverted change from r196013.

        * Scripts/webkitpy/port/mac.py:
        (MacPort.setup_environ_for_server): Ditto.

        * WebKitTestRunner/InjectedBundle/ios/InjectedBundleIOS.mm:
        (WTR::InjectedBundle::platformInitialize): Set XML_CATALOG_FILES in the Web Process
          environment. This is early enough that libxml2 has not been initialized yet.

        * WebKitTestRunner/InjectedBundle/mac/InjectedBundleMac.mm:
        (WTR::InjectedBundle::platformInitialize): Ditto.

2016-02-02  Dan Bernstein  <mitz@apple.com>

        Layout Test fast/parser/external-entities-in-xslt.xml is flaky on El Capitan (but fails most of the time)
        https://bugs.webkit.org/show_bug.cgi?id=153683

        Reviewed by Alexey Proskuryakov.

        Ensure that XML_CATALOG_FILES is set in the Web Content service’s environment as well.

        * Scripts/webkitpy/port/driver.py:
        (Driver._setup_environ_for_driver): Also set __XPC_DUMPRENDERTREE_TEMP.
        * Scripts/webkitpy/port/ios.py:
        (IOSSimulatorPort.setup_environ_for_server): Set __XPC_XML_CATALOG_FILES.
        * Scripts/webkitpy/port/mac.py:
        (MacPort.setup_environ_for_server): Ditto.

2016-01-29 Grzegorz Czajkowski  <g.czajkowski@samsung.com>

        [EFL] Virtual Keyboard overlaps MiniBrowser's WebView
        https://bugs.webkit.org/show_bug.cgi?id=153009

        Reviewed by Gyuyoung Kim.

        On mobile, virtual keyboard represented by ecore_imf module appears on
        the top of application layer usually covering bottom part of the screen.
        If the web page contains the editable content on the bottom of the page
        it will be overlapped by keyboard which prevents user from seeing the
        typed text.

        Pack MiniBrowser layout into conformant widget to allow EFL to guess
        the space that will be required by the keyboard, finally resizing it
        to the desired size. As a result, webview gets resized and scrolled
        into focused elements which makes the editable elements visible while
        typing.

        More details about elm_conformant widger can be found at:
        https://docs.enlightenment.org/elementary/1.15.0/group__Conformant.html
        https://docs.enlightenment.org/elementary/1.15.0/conformant_example.html

        * MiniBrowser/efl/main.c:
        (window_create): pack a box into conformant widget.

2016-02-02  Alejandro G. Castro  <alex@igalia.com>

        [GTK][EFL] Upgrade OpenWebRTC dependency
        https://bugs.webkit.org/show_bug.cgi?id=153489

        Reviewed by Philippe Normand.

        * Scripts/run-gtk-tests:
        (TestRunner): Avoid running the mediastream API test.
        * Scripts/webkitperl/FeatureList.pm: Stop compiling mediastream by
        default for gtk and efl.
        * gtk/jhbuild-webrtc.modules: Added modules files with
        dependencies required to compile and test the mediastream.

2016-02-01  Jason Marcell  <jmarcell@apple.com>

        Add code to parse the git branches out of the Trac RSS feed
        https://bugs.webkit.org/show_bug.cgi?id=153624

        Reviewed by Daniel Bates.

        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Scripts/Trac.js:
        (Trac.prototype.commitsOnBranch): Update filter to check for Git branches.
        (Trac.prototype._convertCommitInfoElementToObject): Parse Git branches from the Trac RSS feed. Also changed "branchName" to
        "branches" and updated the code to work with an array instead of a string.
        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Scripts/tests/MockTrac.js:
        (MockTrac): Refactored example commits out into a constant, MockTrac.EXAMPLE_TRAC_COMMITS.
        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Scripts/tests/test-fixture-git-trac-rss.xml: Added. Test
        fixture that contains XML with a Git branch.
        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Scripts/tests/tests.js: Added unit test to test parsing Git
        branches from Trac RSS feed. Also updated code to work with the new MockTrac.EXAMPLE_TRAC_COMMITS constant.

2016-02-01  Brady Eidson  <beidson@apple.com>

        Add command line flag to DRT to output the number of tests completed in server mode.
        https://bugs.webkit.org/show_bug.cgi?id=153750

        Reviewed by Darin Adler.

        * DumpRenderTree/mac/DumpRenderTree.mm:
        (initializeGlobalsFromCommandLineOptions):
        (runTestingServerLoop):

2016-02-01  Jason Marcell  <jmarcell@apple.com>

        Improvements to botwatcher's dashboard unit tests.
        https://bugs.webkit.org/show_bug.cgi?id=153621

        Reviewed by Darin Adler.

        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Scripts/PopoverTracker.js:
        (PopoverTracker): Retain a reference to the PopoverTracker so that we can make assertions about it in the unit tests.
        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Scripts/tests/MockTrac.js:
        (MockTrac): Changing revision 33019 to be on a different branch so that _appendPendingRevisionCount and
        _popoverLinesForCommitRange have to traverse commits from different branches.
        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Scripts/tests/tests.js: Changing equal to strictEqual
        in unit test for _appendPendingRevisionCount. Also added assertions for Popover in test for
        _revisionContentWithPopoverForIteration.

2016-02-01  Jason Marcell  <jmarcell@apple.com>

        Refactor to add event listeners and start periodic updates for all trac instances.
        https://bugs.webkit.org/show_bug.cgi?id=153609

        Reviewed by Darin Adler.

        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Scripts/BuildbotQueueView.js:
        (BuildbotQueueView): Adding event listeners for all trac instances.
        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Scripts/Main.js: Starting periodic updates
        for all trac instances.

2016-01-31  Darin Adler  <darin@apple.com>

        Replace CaseFoldingHash with ASCIICaseInsensitiveHash
        https://bugs.webkit.org/show_bug.cgi?id=153639

        Reviewed by Filip Pizlo.

        * Scripts/do-webcore-rename: Use script to do this rename.

2016-01-30  Commit Queue  <commit-queue@webkit.org>

        Unreviewed, rolling out r195911.
        https://bugs.webkit.org/show_bug.cgi?id=153723

        Caused frequent assertion failures on bots (Requested by ap on
        #webkit).

        Reverted changeset:

        "Replace CaseFoldingHash with ASCIICaseInsensitiveHash"
        https://bugs.webkit.org/show_bug.cgi?id=153639
        http://trac.webkit.org/changeset/195911

2016-01-30  Darin Adler  <darin@apple.com>

        Replace CaseFoldingHash with ASCIICaseInsensitiveHash
        https://bugs.webkit.org/show_bug.cgi?id=153639

        Reviewed by Filip Pizlo.

        * Scripts/do-webcore-rename: Use script to do this rename.

2016-01-30  Ryosuke Niwa  <rniwa@webkit.org>

        TouchList should be retargeted
        https://bugs.webkit.org/show_bug.cgi?id=149592

        Reviewed by Antti Koivisto.

        Added touchDownAtPoint and liftUpAtPoint to UIScriptController so that we can test touch events with
        multiple touch targets on iOS. fast/shadow-dom/touch-event-ios.html uses this new testing feature.

        * WebKitTestRunner/UIScriptContext/Bindings/UIScriptController.idl:
        * WebKitTestRunner/UIScriptContext/UIScriptController.cpp:
        (WTR::UIScriptController::touchDownAtPoint): Added.
        (WTR::UIScriptController::liftUpAtPoint): Added.
        * WebKitTestRunner/UIScriptContext/UIScriptController.h:
        * WebKitTestRunner/ios/HIDEventGenerator.h:
        * WebKitTestRunner/ios/HIDEventGenerator.mm:
        (-[HIDEventGenerator touchDown:touchCount:completionBlock:]): Added. Sends touch down and waits.
        (-[HIDEventGenerator liftUp:touchCount:completionBlock:]): Ditto for lift up.
        * WebKitTestRunner/ios/UIScriptControllerIOS.mm:
        (WTR::UIScriptController::touchDownAtPoint): Added.
        (WTR::UIScriptController::liftUpAtPoint): Added.

2016-01-30  Yusuke Suzuki  <utatane.tea@gmail.com>

        Enable SamplingProfiler on POSIX environment
        https://bugs.webkit.org/show_bug.cgi?id=153584

        Reviewed by Michael Saboff.

        * Scripts/run-jsc-stress-tests:

2016-01-29  Nikos Andronikos  <nikos.andronikos-webkit@cisra.canon.com.au>

        update-webkit-dependency fails to fetch updates through firewall on Windows
        https://bugs.webkit.org/show_bug.cgi?id=153619

        Reviewed by Myles C. Maxfield.

        On Windows, when a firewall is present we need to read proxy settings
        from environment variables.

        This patch relies on the following environment variables being set:
        HTTP_PROXY
        HTTPS_PROXY

        * Scripts/update-webkit-dependency:

2016-01-28  Dan Bernstein  <mitz@apple.com>

        [Cocoa] Use the non-Development variants of XPC services for development
        https://bugs.webkit.org/show_bug.cgi?id=152545

        Reviewed by Darin Adler.

        * Scripts/webkitdirs.pm:
        (setUpGuardMallocIfNeeded): Ensure that libgmalloc is loaded into XPC services as well.

        * Scripts/webkitpy/port/driver.py:
        (Driver._setup_environ_for_driver): Ensure that the DYLD_LIBRARY_PATH and ASAN_OPTIONS are
          set in the XPC services as well.

        * Scripts/webkitpy/port/ios.py:
        (IOSSimulatorPort.setup_environ_for_server): Ensure that malloc stack logging for leaks and
          Guard Malloc are enabled in XPC services as well.

        * Scripts/webkitpy/port/mac.py:
        (MacPort.setup_environ_for_server): Ditto.

2016-01-28  Csaba Osztrogonác  <ossy@webkit.org>

        Unreviewed buildfix after r195743.

        * WebKitTestRunner/InjectedBundle/atk/AccessibilityUIElementAtk.cpp:
        (WTR::AccessibilityUIElement::isPressActionSupported):

2016-01-12  Jer Noble  <jer.noble@apple.com>

        Custom protocol loading through AVFoundation does not support byte-range requests.
        https://bugs.webkit.org/show_bug.cgi?id=152919
        <rdar://problem/23664657>

        Reviewed by Alex Christensen.

        Add tests for new ParsedContntRange class.

        * TestWebKitAPI/PlatformWin.cmake:
        * TestWebKitAPI/TestWebKitAPI.vcxproj/TestWebKitAPI.vcxproj:
        * TestWebKitAPI/TestWebKitAPI.vcxproj/TestWebKitAPI.vcxproj.filters:
        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WebCore/ParsedContentRange.cpp: Added.
        (TestWebKitAPI::TEST):

2016-01-28  Konstantin Tokarev  <annulen@yandex.ru>

        Use isAnyWindows() instead of isCygwin() || isWindows() in Perl scripts.
        https://bugs.webkit.org/show_bug.cgi?id=153594

        Reviewed by Alex Christensen.

        * Scripts/webkitdirs.pm:
        (determineNumberOfCPUs):
        (jscPath):
        (checkFrameworks):
        (setupCygwinEnv):
        (wrapperPrefixIfNeeded):
        (cmakeGeneratedBuildfile):
        (generateBuildSystemFromCMakeProject):
        * Scripts/webkitperl/features.pm:
        (libraryContainsSymbol):

2016-01-28  Chris Dumez  <cdumez@apple.com>

        Unreviewed, rolling out r195742.

        Broke EWS

        Reverted changeset:

        "[webkitdirs] Clarify logic behind is{PortName} functions."
        https://bugs.webkit.org/show_bug.cgi?id=153554
        http://trac.webkit.org/changeset/195742

2016-01-28  Darin Adler  <darin@apple.com>

        Remove equalIgnoringCase since all callers really wanted equalIgnoringASCIICase
        https://bugs.webkit.org/show_bug.cgi?id=153411

        Reviewed by Ryosuke Niwa.

        * Scripts/do-webcore-rename: Removed rename of equalIgnoringCase since we
        have removed the function instead.

        * TestWebKitAPI/Tests/WTF/StringImpl.cpp:
        (TestWebKitAPI::TEST): Updated test since nullptr is now ambiguous since we
        added overloads for const char*.

        * WebKitTestRunner/InjectedBundle/atk/AccessibilityUIElementAtk.cpp:
        (WTR::AccessibilityUIElement::isPressActionSupported): Use equalLettersIgnoringASCIICase.
        (WTR::AccessibilityUIElement::hasPopup): Ditto.
        * WebKitTestRunner/cocoa/CrashReporterInfo.mm:
        (WTR::testPathFromURL): Ditto.

2016-01-28  Konstantin Tokarev  <annulen@yandex.ru>

        [webkitdirs] Clarify logic behind is{PortName} functions.
        https://bugs.webkit.org/show_bug.cgi?id=153554

        Reviewed by Darin Adler.

        * Scripts/webkitdirs.pm:
        (determinePortName): Added new function which decides which port are
        we building based on command line switches and platform defaults.
        (portName): Added getter for determined $portName.
        (isEfl): Modified to use portName().
        (isGtk): Ditto.
        (isWinCairo): Ditto.
        (isAppleMacWebKit): Ditto.
        (isAppleWinWebKit): Ditto.
        (isIOSWebKit): Ditto.
        (cmakeBasedPortName): Code replaced with portName() call.
        (determineIsEfl): Deleted.
        (determineIsGtk): Deleted.
        (determineIsWinCairo): Deleted.

2016-01-28  Konstantin Tokarev  <annulen@yandex.ru>

        [webkitdirs] Don't pass cmakeBasedPortName around.
        https://bugs.webkit.org/show_bug.cgi?id=153589

        Reviewed by Darin Adler.

        It should be local function of webkitdirs.pm instead.

        * Scripts/build-jsc: Don't pass cmakeBasedPortName to
        buildCMakeProjectOrExit().
        * Scripts/build-webkit: Don't pass cmakeBasedPortName to
        buildCMakeProjectOrExit() and generateBuildSystemFromCMakeProject().
        * Scripts/run-efl-tests: Don't pass cmakeBasedPortName to
        generateBuildSystemFromCMakeProject().
        * Scripts/webkitdirs.pm: Don't export cmakeBasedPortName.
        (generateBuildSystemFromCMakeProject): Removed $port argument as we
        can get it from cmakeBasedPortName().
        (buildCMakeProjectOrExit): Ditto.

2016-01-28  Gwang Yoon Hwang  <yoon@igalia.com>

        [GStreamer] Clean up includes and headers related with GStreamerGL
        https://bugs.webkit.org/show_bug.cgi?id=153590

        Reviewed by Philippe Normand.

        * Scripts/webkitpy/style/checker.py: Skips
        include_order check for MediaPlayerPrivateGStreamerBase.cpp
        Removes VideoSinkGStreamer1.cpp which doesn't exist anymore.

2016-01-27  Krzysztof Czech  <k.czech@samsung.com>

        [EFL] Remove unused accessibility related code
        https://bugs.webkit.org/show_bug.cgi?id=153543

        Reviewed by Darin Adler.

        Removed reference to EAIL library.
        It not going to be support anymore. There have been changes in
        EFL/Elementary in terms of the accessibility and we should
        follow those.

        * efl/jhbuild-optional.modules:

2016-01-27  Daniel Bates  <dabates@apple.com>

        Remove WebKitSystemInterface for iOS SDK < 9
        https://bugs.webkit.org/show_bug.cgi?id=153570

        Reviewed by Andy Estes.

        * Scripts/copy-webkitlibraries-to-product-directory:

2016-01-27  Jason Marcell  <jmarcell@apple.com>

        Fix bugs caused by incorrect usage of "branch" vs. "branchName".
        https://bugs.webkit.org/show_bug.cgi?id=153330

        Reviewed by Daniel Bates.

        In an earlier patch we started using the name "branch" to indicate a branch object, whereas
        "branchName" implies that the variable or property in question is simply a string. We fixed some
        inconsistencies regarding this issue in 152982 but further bugs and inconsistencies were recently
        spotted in BuildbotQueueView.js.

        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Scripts/BuildbotQueueView.js:
        (BuildbotQueueView.prototype._popoverLinesForCommitRange): Change branchName to branch in method signature.
        Changed branchName to branch.name in call to commitsOnBranch.
        (BuildbotQueueView.prototype._presentPopoverForPendingCommits): Change branch.name to branch in call to
        _popoverLinesForCommitRange.
        (BuildbotQueueView.prototype._presentPopoverForRevisionRange): Changed context.branchName to context.branch.name.
        (BuildbotQueueView.prototype._revisionContentWithPopoverForIteration): Changed branch.name to branch.
        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Scripts/tests/tests.js: Added tests to verify
        fix.

2016-01-27  Ryosuke Niwa  <rniwa@webkit.org>

        Add API to access closed shadowRoot in InjectedBundle
        https://bugs.webkit.org/show_bug.cgi?id=153533

        Reviewed by Antti Koivisto.

        Added WebKit2 API test for WKBundleScriptWorldMakeAllShadowRootsOpen.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WebKit2/InjectedBundleMakeAllShadowRootsOpen.cpp: Added.
        (TestWebKitAPI::runJavaScriptAlert):
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/WebKit2/InjectedBundleMakrAllShadowRootOpen_Bundle.cpp: Added.
        (TestWebKitAPI::InjectedBundleMakrAllShadowRootOpenTest::InjectedBundleMakrAllShadowRootOpenTest):
        (TestWebKitAPI::InjectedBundleMakrAllShadowRootOpenTest::initialize):

2016-01-27  Jason Marcell  <jmarcell@apple.com>

        Refactor logic for parsing Trac revisions into its own function and add logic for parsing git hashes.
        https://bugs.webkit.org/show_bug.cgi?id=153332

        Reviewed by Alexey Proskuryakov.

        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Scripts/Trac.js:
        (Trac.prototype._xmlTimelineURL): Uses new function.
        (Trac.prototype._parseRevisionFromURL): Added. Pulled out logic for parsing revisions from a URL. Also added
        logic for parsing git hashes.
        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Scripts/tests/tests.js: Added tests for
        Trac._parseRevisionFromURL.

2016-01-27  Alexey Proskuryakov  <ap@apple.com>

        Remove Mavericks from the flakiness dashboard
        https://bugs.webkit.org/show_bug.cgi?id=153521

        Reviewed by Dan Bernstein.

        * TestResultServer/static-dashboards/builders.jsonp:
        * TestResultServer/static-dashboards/flakiness_dashboard.js:

2016-01-27  Alexey Proskuryakov  <ap@apple.com>

        Remove ENABLE_CURRENTSRC
        https://bugs.webkit.org/show_bug.cgi?id=153545

        Reviewed by Simon Fraser.

        * Scripts/webkitperl/FeatureList.pm:

2016-01-26  Jason Marcell  <jmarcell@apple.com>

        Sort incoming commits via date instead of revision number.
        https://bugs.webkit.org/show_bug.cgi?id=153467

        Reviewed by Alexey Proskuryakov.

        Future Trac instances may use Git or other revision control systems where we cannnot rely on the revision number
        for sorting revisions. Instead we use the commit date to sort revisions chronologically.

        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Scripts/Trac.js:
        (Trac.prototype._loaded): Sort via date instead of revision number.
        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Scripts/tests/MockTrac.js:
        (MockTrac): Fix up the mock data to look more like real-world data.
        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Scripts/tests/test-fixture-trac-rss.xml: Added.
        Fake RSS feed that adds three more commits.
        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Scripts/tests/tests.js: Added unit tests to test
        Trac._loaded().

2016-01-26  I-Ting Liu  <iting_liu@apple.com>

        Add a test for WebKit::stringMatchesWildcardString.
        https://bugs.webkit.org/show_bug.cgi?id=153090

        Reviewed by Darin Adler.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        Add the file to the project.

        * TestWebKitAPI/Tests/WebKit2/mac/StringUtilities.mm: Added.
        (TestWebKitAPI::TEST):
        Test that a string matches another string that may contain wildcard characters.

2016-01-26  Konstantin Tokarev  <annulen@yandex.ru>

        [webkitdirs] Removed check for bison, gperf, and flex.
        https://bugs.webkit.org/show_bug.cgi?id=153496

        Reviewed by Alex Christensen.

        This prerequisites are checked in WebKitCommon.cmake and don't
        have to be in $PATH.

        * Scripts/webkitdirs.pm:
        (checkRequiredSystemConfig):

2016-01-26  Konstantin Tokarev  <annulen@yandex.ru>

        [webkitdirs] isCMakeBuild should be true by default
        https://bugs.webkit.org/show_bug.cgi?id=153497

        Reviewed by Michael Catanzaro.

        * Scripts/webkitdirs.pm:
        (isCMakeBuild):

2016-01-26  Daniel Bates  <dabates@apple.com>

        Add WebKitSystemInterface for iOS 9.2
        https://bugs.webkit.org/show_bug.cgi?id=153355

        Rubber-stamped by David Kilzer.

        * Scripts/copy-webkitlibraries-to-product-directory:

2016-01-26  Daniel Bates  <dabates@apple.com>

        WebKitTestRunner: Credential cache is not cleared between tests
        https://bugs.webkit.org/show_bug.cgi?id=153407
        <rdar://problem/24280834>

        Reviewed by Alexey Proskuryakov.

        * WebKitTestRunner/TestController.cpp:
        (WTR::TestController::resetStateToConsistentValues): Call WKContextClearCachedCredentials()
        to clear cached credentials.

2016-01-26  Carlos Alberto Lopez Perez  <clopez@igalia.com>

        kill-old-processes: allow to specify on the environment of the bot a list of process that should be killed.
        https://bugs.webkit.org/show_bug.cgi?id=153483

        Reviewed by Csaba Osztrogonác.

        * BuildSlaveSupport/kill-old-processes:
        (main): Allow to specify extra tasks to kill via the environment variable WEBKITBOT_TASKSTOKILL

2016-01-25  Simon Fraser  <simon.fraser@apple.com>

        Give the layout test results file a <title> showing the date and time the tests were run
        https://bugs.webkit.org/show_bug.cgi?id=153187

        Reviewed by Darin Adler.
        
        Include a 'date' property in the JSON with the date and time the tests completed.

        * Scripts/webkitpy/layout_tests/models/test_run_results.py:
        (summarize_results):

2016-01-25  Commit Queue  <commit-queue@webkit.org>

        Unreviewed, rolling out r195543.
        https://bugs.webkit.org/show_bug.cgi?id=153451

        regressed performance of test bots by ~6% (Requested by dydz
        on #webkit).

        Reverted changeset:

        "WebKitTestRunner: Credential cache is not cleared between
        tests"
        https://bugs.webkit.org/show_bug.cgi?id=153407
        http://trac.webkit.org/changeset/195543

2016-01-25  Aakash Jain  <aakash_jain@apple.com>

        Failing to upload to flakiness dashboard should not be a hard error
        https://bugs.webkit.org/show_bug.cgi?id=153444
        <rdar://problem/22146294>

        Reviewed by Alexey Proskuryakov.

        * Scripts/webkitpy/layout_tests/controllers/manager.py:
        (Manager._upload_json_files): If JSON file is not generated, do not try to upload it.

2016-01-25  Daniel Bates  <dabates@apple.com>

        WebKitTestRunner: Credential cache is not cleared between tests
        https://bugs.webkit.org/show_bug.cgi?id=153407
        <rdar://problem/24280834>

        Reviewed by Brady Eidson.

        * WebKitTestRunner/TestController.cpp:
        (WTR::TestController::resetStateToConsistentValues): Reset testing network session
        to clear cached credentials.

2016-01-24  Dan Bernstein  <mitz@apple.com>

        Added project.xcworkspace and xcuserdata to this project’s svn:ignore.

        * LayoutTestRelay/LayoutTestRelay.xcodeproj: Added property svn:ignore.

2016-01-22  Enrica Casucci  <enrica@apple.com>

        Unreviewed build fix after http://trac.webkit.org/changeset/195474.

        * WebKitTestRunner/cocoa/TestControllerCocoa.mm:
        (WTR::TestController::platformCreateWebView):

2016-01-22  Tim Horton  <timothy_horton@apple.com>

        Add a test for iOS arrow-key repeat
        https://bugs.webkit.org/show_bug.cgi?id=152857
        <rdar://problem/24017380>

        Reviewed by Darin Adler.

        * WebKitTestRunner/UIScriptContext/Bindings/UIScriptController.idl:
        * WebKitTestRunner/UIScriptContext/UIScriptController.cpp:
        (WTR::UIScriptController::keyUpUsingHardwareKeyboard):
        (WTR::UIScriptController::keyDownUsingHardwareKeyboard):
        * WebKitTestRunner/UIScriptContext/UIScriptController.h:
        * WebKitTestRunner/ios/HIDEventGenerator.h:
        * WebKitTestRunner/ios/HIDEventGenerator.mm:
        (-[HIDEventGenerator keyPress:completionBlock:]):
        (-[HIDEventGenerator keyDown:completionBlock:]):
        (-[HIDEventGenerator keyUp:completionBlock:]):
        * WebKitTestRunner/ios/UIScriptControllerIOS.mm:
        (WTR::UIScriptController::typeCharacterUsingHardwareKeyboard):
        (WTR::UIScriptController::keyDownUsingHardwareKeyboard):
        (WTR::UIScriptController::keyUpUsingHardwareKeyboard):
        Make it possible to independently send keyUp/keyDown, instead of just paired.

2016-01-22  Tim Horton  <timothy_horton@apple.com>

        Reproducible "Unhanded web process message 'WebUserContentController:AddUserScripts'" and friends
        https://bugs.webkit.org/show_bug.cgi?id=153193
        <rdar://problem/24222034>

        Reviewed by Darin Adler.

        * TestWebKitAPI/Tests/WebKit2Cocoa/UserContentController.mm:
        (webViewForScriptMessageHandlerMultipleHandlerRemovalTest):
        (TEST):
        Add a test that exhibits the problems we're fixing here.
        Before, it would both log and assert in debug, and crash in release.
        Now it runs happily to completion.

2016-01-22  Enrica Casucci  <enrica@apple.com>

        Add support for testing data detection.
        https://bugs.webkit.org/show_bug.cgi?id=153360

        Reviewed by Tim Horton.

        Adding a new testing option (useDataDetection) to turn on
        data detection when running the a test.

        * WebKitTestRunner/TestController.cpp:
        (WTR::updateTestOptionsFromTestHeader):
        * WebKitTestRunner/TestOptions.h:
        * WebKitTestRunner/cocoa/TestControllerCocoa.mm:
        (WTR::TestController::platformCreateWebView):

2016-01-21  Simon Fraser  <simon.fraser@apple.com>

        Fix the lldb WebCoreLayoutUnitProvider to not dynamically look up the LayoutUnit denominator
        https://bugs.webkit.org/show_bug.cgi?id=153334

        Reviewed by Zalan Bujtas.
        
        Evaluating expressions in the LayoutUnit summary provider seems to cause
        re-entrancy problems in lldb python bindings, so just hardcode the LayoutUnit
        denominator to 64.

        * lldb/lldb_webkit.py:
        (WebCoreLayoutUnitProvider.to_string):

2016-01-21  Filip Pizlo  <fpizlo@apple.com>

        display-profiler-output should be able to display code blocks sorted by machine counts
        https://bugs.webkit.org/show_bug.cgi?id=153298

        Reviewed by Oliver Hunt.

        * Scripts/display-profiler-output:

2016-01-21  Julien Isorce  <j.isorce@samsung.com>

        Ensure to use compatible liborc version with wanted gstreamer version
        https://bugs.webkit.org/show_bug.cgi?id=153276

        For example gst-plugins-base-1.4.4 fails to build with liborc-0.4.24.
        The user may have a very recent liborc installed on his system.

        Reviewed by Philippe Normand.

        * efl/jhbuild.modules: add liborc-0.4.17 and make it a gst dependency.
        * gtk/jhbuild.modules: add liborc-0.4.17 and make it a gst depencendy.

2016-01-21  Nan Wang  <n_wang@apple.com>

        AX: [IOS] Implement next/previous text marker functions using TextIterator
        https://bugs.webkit.org/show_bug.cgi?id=153292
        <rdar://problem/24268243>

        Reviewed by Chris Fleizach.

        Made text marker tests available on iOS.

        * DumpRenderTree/AccessibilityTextMarker.h:
        * DumpRenderTree/DumpRenderTree.xcodeproj/project.pbxproj:
        * DumpRenderTree/ios/AccessibilityTextMarkerIOS.mm: Added.
        (AccessibilityTextMarker::AccessibilityTextMarker):
        (AccessibilityTextMarker::~AccessibilityTextMarker):
        (AccessibilityTextMarker::isEqual):
        (AccessibilityTextMarker::platformTextMarker):
        (AccessibilityTextMarkerRange::AccessibilityTextMarkerRange):
        (AccessibilityTextMarkerRange::~AccessibilityTextMarkerRange):
        (AccessibilityTextMarkerRange::isEqual):
        (AccessibilityTextMarkerRange::platformTextMarkerRange):
        * DumpRenderTree/ios/AccessibilityUIElementIOS.mm:
        (AccessibilityUIElement::pathDescription):
        (AccessibilityUIElement::lineTextMarkerRangeForTextMarker):
        (AccessibilityUIElement::textMarkerRangeForElement):
        (AccessibilityUIElement::selectedTextMarkerRange):
        (AccessibilityUIElement::resetSelectedTextMarkerRange):
        (AccessibilityUIElement::textMarkerRangeLength):
        (AccessibilityUIElement::textMarkerRangeForMarkers):
        (AccessibilityUIElement::startTextMarkerForTextMarkerRange):
        (AccessibilityUIElement::endTextMarkerForTextMarkerRange):
        (AccessibilityUIElement::accessibilityElementForTextMarker):
        (AccessibilityUIElement::endTextMarkerForBounds):
        (AccessibilityUIElement::startTextMarkerForBounds):
        (AccessibilityUIElement::textMarkerForPoint):
        (AccessibilityUIElement::previousTextMarker):
        (AccessibilityUIElement::nextTextMarker):
        (AccessibilityUIElement::stringForTextMarkerRange):
        (AccessibilityUIElement::attributedStringForTextMarkerRangeContainsAttribute):
        (AccessibilityUIElement::indexForTextMarker):
        (AccessibilityUIElement::isTextMarkerValid):
        (AccessibilityUIElement::textMarkerForIndex):
        (AccessibilityUIElement::startTextMarker):
        (AccessibilityUIElement::endTextMarker):
        (AccessibilityUIElement::setSelectedVisibleTextRange):
        (AccessibilityUIElement::getLinkedUIElements):
        * DumpRenderTree/mac/AccessibilityTextMarkerMac.mm:
        (AccessibilityTextMarkerRange::platformTextMarkerRange):
        * DumpRenderTree/mac/AccessibilityUIElementMac.mm:
        (AccessibilityUIElement::removeSelection):
        (AccessibilityUIElement::lineTextMarkerRangeForTextMarker):
        (AccessibilityUIElement::setSelectedVisibleTextRange):
        (AccessibilityUIElement::supportedActions):
        * WebKitTestRunner/InjectedBundle/ios/AccessibilityUIElementIOS.mm:
        (WTR::AccessibilityUIElement::textMarkerRangeForElement):
        (WTR::AccessibilityUIElement::textMarkerRangeLength):
        (WTR::AccessibilityUIElement::previousTextMarker):
        (WTR::AccessibilityUIElement::nextTextMarker):
        (WTR::AccessibilityUIElement::stringForTextMarkerRange):
        (WTR::AccessibilityUIElement::textMarkerRangeForMarkers):
        (WTR::AccessibilityUIElement::startTextMarkerForTextMarkerRange):
        (WTR::AccessibilityUIElement::endTextMarkerForTextMarkerRange):
        (WTR::AccessibilityUIElement::endTextMarkerForBounds):
        (WTR::AccessibilityUIElement::accessibilityElementForTextMarker):
        (WTR::AccessibilityUIElement::attributedStringForTextMarkerRangeContainsAttribute):

2016-01-20  Filip Pizlo  <fpizlo@apple.com>

        Unreviewed, revert accidental unreviewed commit.

        * Scripts/display-profiler-output:

2016-01-20  Jason Marcell  <jmarcell@apple.com>

        Refactor compareIterations to remove duplicate code.
        https://bugs.webkit.org/show_bug.cgi?id=152913

        Reviewed by Daniel Bates.

        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Scripts/BuildbotQueue.js:
        (BuildbotQueue.prototype.compareIterations): Refactored to remove duplicate code.
        (BuildbotQueue.prototype.sortIterations): Add binding to call to compareIterations.
        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Scripts/tests/tests.js: Added tests in order to ensure
        the same behavior before and after refactor.

2016-01-20  Dana Burkart  <dburkart@apple.com>

        Botwatcher's dashboard should show an 'X' when the build is broken
        https://bugs.webkit.org/show_bug.cgi?id=152507

        Reviewed by David Kilzer.

        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Scripts/BuildbotStaticAnalyzerQueueView.js:
        (BuildbotStaticAnalyzerQueueView.prototype.appendStaticAnalyzerQueueStatus):
        (BuildbotStaticAnalyzerQueueView.prototype.update):

2016-01-19  Jason Marcell  <jmarcell@apple.com>

        Remove assertion from revisionContentForIteration that is causing errors on the dashboard.
        https://bugs.webkit.org/show_bug.cgi?id=153262

        Reviewed by Alexey Proskuryakov.

        Occasionaly some buildbot iterations will not have their "got_revisions" property populated. In
        such cases this revisionContentForIteration method does not have any content to return, thus the
        assertion fails.

        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Scripts/BuildbotQueueView.js:
        (BuildbotQueueView.prototype.revisionContentForIteration): Removed assertion that was causing errors.

2016-01-19  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] Runtime critical warnings when loading a URL after a session restore
        https://bugs.webkit.org/show_bug.cgi?id=153233

        Reviewed by Michael Catanzaro.

        Add new test case.

        * TestWebKitAPI/Tests/WebKit2Gtk/TestBackForwardList.cpp:
        (viewLoadChanged):
        (testWebKitWebViewNavigationAfterSessionRestore):
        (beforeAll):

2016-01-19  Michael Catanzaro  <mcatanzaro@igalia.com>

        [GTK] Remove jhbuild-optional.modules
        https://bugs.webkit.org/show_bug.cgi?id=152964

        Reviewed by Alex Christensen.

        * gtk/jhbuild-optional.modules: Removed.
        * gtk/jhbuild.modules:

2016-01-19  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] Add support to load/save session in MiniBrowser
        https://bugs.webkit.org/show_bug.cgi?id=153201

        Reviewed by Michael Catanzaro.

        It makes it easier to test the new WebView session API.

        * MiniBrowser/gtk/BrowserWindow.c:
        (browserWindowFinalize): Free the session file path.
        (browserWindowSaveSession): Save the current WebView session if
        there's a session file path.
        (browserWindowDeleteEvent): Call browserWindowSaveSession().
        (browser_window_load_session): Try to load the session from the
        given file path, otherwise fall back to homepage and keep the
        session file to save the session on window close.
        * MiniBrowser/gtk/BrowserWindow.h:
        * MiniBrowser/gtk/main.c:
        (createBrowserWindow): Pass the given session file path when
        shouldLoadSession is TRUE.
        (main): Only allow to restore/save session when MiniBrowser is
        launched without URL arguments.

2016-01-19  Carlos Garcia Campos  <cgarcia@igalia.com>

        Unreviewed. Fix GTK+ test /webkit2/WebKitWebView/geolocation-permission-requests after r195075.

        Geolocation is no longer allowed for unique origins after r195075.

        * TestWebKitAPI/Tests/WebKit2Gtk/TestUIClient.cpp:
        (testWebViewGeolocationPermissionRequests):

2016-01-18  Carlos Alberto Lopez Perez  <clopez@igalia.com>

        [GTK][EFL] Layout tests abort with PulseAudioSanitizer instance has no attribute '_pa_module_index' when the build is not ready.
        https://bugs.webkit.org/show_bug.cgi?id=153216

        Reviewed by Michael Catanzaro.

        * Scripts/webkitpy/port/pulseaudio_sanitizer.py:
        (PulseAudioSanitizer.__init__): initialize _pa_module_index in the constructor.

2016-01-18  Nan Wang  <n_wang@apple.com>

        AX: [Mac] Implement next/previous text marker functions using TextIterator
        https://bugs.webkit.org/show_bug.cgi?id=152728

        Reviewed by Chris Fleizach.

        * WebKitTestRunner/InjectedBundle/mac/AccessibilityUIElementMac.mm:
        (WTR::AccessibilityUIElement::accessibilityElementForTextMarker):

2016-01-18  Csaba Osztrogonác  <ossy@webkit.org>

        [cmake] Add testair to the build system
        https://bugs.webkit.org/show_bug.cgi?id=153126

        Reviewed by Michael Catanzaro.

        * Scripts/build-jsc:

2016-01-16  Myles C. Maxfield  <mmaxfield@apple.com>

        Remove TextRun::allowsRoundingHacks()
        https://bugs.webkit.org/show_bug.cgi?id=153185

        Reviewed by Simon Fraser.

        * DumpRenderTree/mac/DumpRenderTree.mm:
        (resetWebViewToConsistentStateBeforeTesting): Deleted.

2016-01-15  Konstantin Tokarev  <annulen@yandex.ru>

        [webkitdirs] Avoid list form of open because it broke WinCairo
        https://bugs.webkit.org/show_bug.cgi?id=153106

        Reviewed by Alex Christensen.

        * Scripts/webkitdirs.pm:
        (determineArchitecture):

2016-01-15  Simon Fraser  <simon.fraser@apple.com>

        Add kdebug_trace signposts for a few WebCore operations
        https://bugs.webkit.org/show_bug.cgi?id=153136
        rdar://problem/24208487

        Reviewed by Sam Weinig.
        
        Plist used by kdebug_trace() viewing tools.

        * Tracing/SystemTracePoints.plist: Added.

2016-01-14  Konstantin Tokarev  <annulen@yandex.ru>

        [webkitdirs] Replaced grep invocation with perl code
        https://bugs.webkit.org/show_bug.cgi?id=153106

        Reviewed by Alex Christensen.

        * Scripts/webkitdirs.pm:
        (determineArchitecture):

2016-01-14  Brian Burg  <bburg@apple.com>

        prepare-changelog does not read paths containing spaces properly
        https://bugs.webkit.org/show_bug.cgi?id=137982

        Reviewed by Joseph Pecoraro.

        Escape whitespace in filenames before passing the file path to other functions.

        * Scripts/prepare-ChangeLog:
        (generateFunctionLists): Use the more explicit 3-argument form of 'open'.

2016-01-14  Jason Marcell  <jmarcell@apple.com>

        Standardize the usage of "branch" vs. "branchName".
        https://bugs.webkit.org/show_bug.cgi?id=152982

        Reviewed by Daniel Bates.

        In an earlier patch we started using the name "branch" to indicate a branch object, whereas
        "branchName" implies that the variable or property in question is simply a string.

        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Scripts/BuildbotQueueView.js:
        (BuildbotQueueView.prototype._popoverLinesForCommitRange): Change branch to branchName.
        (BuildbotQueueView.prototype._presentPopoverForRevisionRange): Change branch to branch.name.
        (BuildbotQueueView.prototype._revisionContentWithPopoverForIteration): Change branch to branchName.
        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Scripts/Trac.js:
        (Trac.prototype.commitsOnBranch): Change branch to branchName.
        (Trac.prototype._convertCommitInfoElementToObject): Ditto.
        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Scripts/tests/MockTrac.js:
        (MockTrac): Ditto.

2016-01-14  Jason Marcell  <jmarcell@apple.com>

        Add a unit test to test BuildbotQueueView._appendPendingRevisionCount.
        https://bugs.webkit.org/show_bug.cgi?id=152910

        Reviewed by Daniel Bates.

        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Scripts/tests/MockBuildbotQueue.js: Added.
        (MockBuildbotQueue): Added. Mock BuildbotQueue object that doesn't need to talk to an actual Buildbot server.
        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Scripts/tests/MockBuildbotQueueView.js: Added.
        (MockBuildbotQueueView): Added. Mock BuildbotQueueView object that returns a pre-specified _latestProductiveIteration without
        the need to talk to a real Buildbot server.
        (MockBuildbotQueueView.prototype._latestProductiveIteration): Added. Returns a pre-specified _latestProductiveIteration
        without the need to talk to a real Buildbot server.
        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Scripts/tests/MockTrac.js: Added.
        (MockTrac): Added. Mock Trac constructor that has pre-populated "recordedCommits" and does not need to talk to a real Trac
        server.
        (MockTrac.prototype.get oldestRecordedRevisionNumber): Added. Returns a pre-specified revision.
        (MockTrac.prototype.get latestRecordedRevisionNumber): Ditto.
        (MockTrac.prototype.loadMoreHistoricalData): Added. Overrides the real loadMoreHistoricalData so that we don't waste time
        trying to talk to Trac.
        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Scripts/tests/index.html: Added. Web page container for
        QUnit unit tests.
        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Scripts/tests/tests.js: Added. QUnit unit tests.

2016-01-14  Nikos Andronikos  <nikos.andronikos-webkit@cisra.canon.com.au>

        [CMake][GTK] CMake Error: Could not create named generator Eclipse CDT4 - Ninja
        https://bugs.webkit.org/show_bug.cgi?id=132599

        Reviewed by Michael Catanzaro.

        Check if cmake Ninja generators are installed.

        * Scripts/webkitdirs.pm:
        (canUseNinjaGenerator):
        (canUseEclipseNinjaGenerator):
        (generateBuildSystemFromCMakeProject):
        (canUseEclipse): Deleted.

2016-01-13  Myles C. Maxfield  <mmaxfield@apple.com>

        [Cocoa] Testing with font family name "System Font" is unused
        https://bugs.webkit.org/show_bug.cgi?id=153073
        <rdar://problem/24091683>

        Reviewed by Brent Fulgham.

        * DumpRenderTree/mac/DumpRenderTree.mm:
        (allowedFontFamilySet): Deleted.
        * WebKitTestRunner/InjectedBundle/cocoa/ActivateFontsCocoa.mm:
        (WTR::allowedFontFamilySet): Deleted.
        * WebKitTestRunner/mac/TestControllerMac.mm:
        (WTR::allowedFontFamilySet): Deleted.

2016-01-13  Daniel Bates  <dabates@apple.com>

        [XSS Auditor] Add test when XSS payload is in the path portion of the URL
        https://bugs.webkit.org/show_bug.cgi?id=152871

        Reviewed by Brent Fulgham.

        Merged from Blink (patch by Tom Sepez <tsepez@chromium.org>):
        <https://src.chromium.org/viewvc/blink?revision=164746&view=revision>

        * Scripts/webkitpy/layout_tests/servers/lighttpd.conf:

2016-01-08  Andy Estes  <aestes@apple.com>

        [Content Filtering] Lazily load platform frameworks
        https://bugs.webkit.org/show_bug.cgi?id=152881
        rdar://problem/23270886

        Reviewed by Brady Eidson.

        Added an API test that verifies that the Parental Controls and Network Extension frameworks are loaded at the
        expected times. The test verifies that they are not loaded after creating a WKWebView, loading an HTML string,
        loading NSData, loading a file, or loading from a custom protocol. It verifies that Network Extension on Mac/iOS
        and Parental Controls on iOS are loaded after an HTTP request. It finally verifies that Parental Controls on Mac
        is loaded after an HTTPS request.

        To accomplish this, TestProtocol was generalized to allow tests to specify the scheme they wish to use.
        Other tests that used TestProtocol were updated to account for this change. TestProtocol was removed from
        WebKit2.PreventImageLoadWithAutoResizingTest, which didn't actually need to use it. ContentFiltering tests were
        also re-enabled on iOS after mistakenly being disabled by r188892.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/CustomProtocolsSyncXHRTest.mm:
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/WebKit2Cocoa/ContentFiltering.h: Added.
        * TestWebKitAPI/Tests/WebKit2Cocoa/ContentFiltering.html: Added.
        * TestWebKitAPI/Tests/WebKit2Cocoa/ContentFiltering.mm:
        (TEST):
        (downloadTest):
        (-[LazilyLoadPlatformFrameworksController init]):
        (-[LazilyLoadPlatformFrameworksController webView]):
        (-[LazilyLoadPlatformFrameworksController expectParentalControlsLoaded:networkExtensionLoaded:]):
        (-[LazilyLoadPlatformFrameworksController webView:didFinishNavigation:]):
        * TestWebKitAPI/Tests/WebKit2Cocoa/ContentFilteringPlugIn.mm:
        (-[ContentFilteringPlugIn webProcessPlugIn:didCreateBrowserContextController:]):
        (-[ContentFilteringPlugIn observeValueForKeyPath:ofObject:change:context:]):
        (-[ContentFilteringPlugIn checkIfPlatformFrameworksAreLoaded:]):
        * TestWebKitAPI/Tests/WebKit2ObjC/CustomProtocolsTest.mm:
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/WebKit2ObjC/PreventImageLoadWithAutoResizing.mm:
        (TestWebKitAPI::TEST): Deleted.
        * TestWebKitAPI/cocoa/TestProtocol.h:
        * TestWebKitAPI/cocoa/TestProtocol.mm:
        (+[TestProtocol registerWithScheme:]):
        (+[TestProtocol unregister]):

2016-01-12  Dewei Zhu  <dewei_zhu@apple.com>

        Fix the Sunpider converage in slow device.
        https://bugs.webkit.org/show_bug.cgi?id=152938
        <rdar://problem/22511411>

        Reviewed by Ryosuke Niwa.

        Updated the patch for RunBenchmark to resume sunspider coverage by removing unused subresources in sub-tests.

        * Scripts/webkitpy/benchmark_runner/data/patches/SunSpider.patch:

2016-01-12  Ryosuke Niwa  <rniwa@webkit.org>

        Add a build flag for custom element
        https://bugs.webkit.org/show_bug.cgi?id=153005

        Reviewed by Alex Christensen.

        Added --custom-elements option to enable custom elements support.

        * Scripts/webkitperl/FeatureList.pm:

2016-01-12  Benjamin Poulain  <bpoulain@apple.com>

        [JSC] Add a help message when run-jsc-stress-tests fails
        https://bugs.webkit.org/show_bug.cgi?id=153014

        Reviewed by Csaba Osztrogonác.

        * Scripts/run-jsc-stress-tests:

2016-01-11  Saam barati  <sbarati@apple.com>

        run-jsc-stress-tests should try to figure out a JSC path
        https://bugs.webkit.org/show_bug.cgi?id=152971

        Reviewed by Yusuke Suzuki.

        This patch now allows run-jsc-stress-tests to be run
        without a "--jsc <jsc-path>" argument. It tries
        to take its best guess at a <jsc-path> automagically.
        
        This makes it much easier to just run run-jsc-stress-tests
        with a directory or a yaml file as an argument.
        You now just do this:
        `run-jsc-stress-tests <path-to-yaml>`
        or
        `run-jsc-stress-tests <path-to-directory-of-js-files>`
        
        I wrote this patch because I'd often find myself hacking the 
        run-javascriptcore-tests file just to run a particular subset of tests.
        Because I always forget the arguments to run-jsc-stress-tests (which means
        I always forgot to provide a --jsc argument), I always found it easier to 
        just hack on that file instead of calling run-jsc-stress-tests directly.
        No longer is this true!

        * Scripts/run-jsc-stress-tests:

2016-01-09  Andy Estes  <aestes@apple.com>

        [Cocoa] Add SPI to opt out a URL scheme from the memory cache
        https://bugs.webkit.org/show_bug.cgi?id=152950
        rdar://problem/24066652

        Reviewed by Tim Horton.

        Added an API test.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WebKit2Cocoa/AlwaysRevalidatedURLSchemes.mm: Added.
        (+[AlwaysRevalidatedURLSchemeProtocol canInitWithRequest:]):
        (+[AlwaysRevalidatedURLSchemeProtocol canonicalRequestForRequest:]):
        (+[AlwaysRevalidatedURLSchemeProtocol requestIsCacheEquivalent:toRequest:]):
        (-[AlwaysRevalidatedURLSchemeProtocol startLoading]):
        (-[AlwaysRevalidatedURLSchemeProtocol stopLoading]):
        (-[AlwaysRevalidatedURLSchemesDelegate webView:didFinishNavigation:]):
        (TEST):

2016-01-11  Commit Queue  <commit-queue@webkit.org>

        Unreviewed, rolling out r194866.
        https://bugs.webkit.org/show_bug.cgi?id=152986

        This change broke the mac build (Requested by ryanhaddad on
        #webkit).

        Reverted changeset:

        "[Cocoa] Add SPI to opt out a URL scheme from the memory
        cache"
        https://bugs.webkit.org/show_bug.cgi?id=152950
        http://trac.webkit.org/changeset/194866

2016-01-11  Andy Estes  <aestes@apple.com>

        [Cocoa] Add SPI to opt out a URL scheme from the memory cache
        https://bugs.webkit.org/show_bug.cgi?id=152950
        rdar://problem/24066652

        Reviewed by Tim Horton.

        Added an API test.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WebKit2Cocoa/AlwaysRevalidatedURLSchemes.mm: Added.
        (+[AlwaysRevalidatedURLSchemeProtocol canInitWithRequest:]):
        (+[AlwaysRevalidatedURLSchemeProtocol canonicalRequestForRequest:]):
        (+[AlwaysRevalidatedURLSchemeProtocol requestIsCacheEquivalent:toRequest:]):
        (-[AlwaysRevalidatedURLSchemeProtocol startLoading]):
        (-[AlwaysRevalidatedURLSchemeProtocol stopLoading]):
        (-[AlwaysRevalidatedURLSchemesDelegate webView:didFinishNavigation:]):
        (TEST):

2016-01-11  Konstantin Tokarev  <annulen@yandex.ru>

        [webkitdirs] Use CMake to determine architecture on isCMakeBuild()
        https://bugs.webkit.org/show_bug.cgi?id=152959

        Reviewed by Brent Fulgham.

        * Scripts/webkitdirs.pm:
        (determineArchitecture):

2016-01-11  Michael Catanzaro  <mcatanzaro@igalia.com>

        [GTK] W3C CSS2.1 anonymous table tests are failing
        https://bugs.webkit.org/show_bug.cgi?id=152455

        Reviewed by Mario Sanchez Prada.

        Add shared-mime-info to the jhbuild environment, since it affects the results of layout
        tests. Add upstream patches to fix detection of XHTML files.

        * gtk/jhbuild.modules:
        * gtk/patches/shared-mime-info-xht-glob.patch: Added.
        * gtk/patches/shared-mime-info-xhtml-magic.patch: Added.

2016-01-10  Saam barati  <sbarati@apple.com>

        Implement a sampling profiler
        https://bugs.webkit.org/show_bug.cgi?id=151713

        Reviewed by Filip Pizlo.

        * Scripts/run-jsc-stress-tests:

2016-01-10  Konstantin Tokarev  <annulen@yandex.ru>

        [webkitdirs] Try arch and uname commands on non-windows OS
        https://bugs.webkit.org/show_bug.cgi?id=152958

        Reviewed by Michael Catanzaro.

        Right now, determineArchitecture()  uses `arch` and `uname -m`
        commands to determine architecture in case of condition (isGtk() ||
        isAppleMacWebKit() || isEfl()) is true. This should be !anyWindows()
        instead, because this code is applicable to any non-windows OS WebKit
        supports (even Haiku which once was supported is moderately
        POSIX-compliant and has uname command).

        * Scripts/webkitdirs.pm:
        (determineArchitecture):

2016-01-08  Aakash Jain  <aakash_jain@apple.com>

        run-webkit-tests mis-counts totals when there are other crashes
        https://bugs.webkit.org/show_bug.cgi?id=152894
        <rdar://problem/24098697>

        Reviewed by Alexey Proskuryakov.

        * Scripts/webkitpy/layout_tests/models/test_run_results.py:
        (TestRunResults.add): Do not update result counters for other crashes.

2016-01-08  Youenn Fablet  <youenn.fablet@crf.canon.fr>

        webkit-patch build-and-test should have an option to iterate over new tests
        https://bugs.webkit.org/show_bug.cgi?id=143093

        Reviewed by Michael Catanzaro.

        This patch introduces the --iterate-on-new-tests option to webkit-patch build-and-test.
        It allows running run-webkit-tests on modified or new paths in LayoutTests.
        Computation of new or modified tests is done by LayoutTestFinder.find_touched_tests
        It implements the translation of -expected.* paths to their related tests.
        It also implements the removal of skipped tests.

        * Scripts/webkitpy/layout_tests/controllers/layout_test_finder.py:
        (LayoutTestFinder.find_touched_tests):
        * Scripts/webkitpy/layout_tests/controllers/layout_test_finder_unittest.py: Added.
        (MockPort):
        (MockPort.__init__):
        (MockPort.tests):
        (LayoutTestFinderTests):
        (LayoutTestFinderTests.touched_files):
        (LayoutTestFinderTests.test_touched_test):
        (LayoutTestFinderTests.test_expected_touched_test):
        (LayoutTestFinderTests.test_platform_expected_touched_test):
        (LayoutTestFinderTests.test_platform_duplicate_touched_test):
        (LayoutTestFinderTests.test_touched_but_skipped_test):
        * Scripts/webkitpy/port/base.py:
        (Port.potential_test_names_from_expected_file):
        * Scripts/webkitpy/tool/commands/download_unittest.py:
        (DownloadCommandsTest._default_options):
        * Scripts/webkitpy/tool/steps/options.py:
        (Options):
        * Scripts/webkitpy/tool/steps/runtests.py:
        (RunTests.options):
        (RunTests.run):
        (RunTests):
        (RunTests._new_or_modified_tests):
        (RunTests._run_webkit_tests):
        * Scripts/webkitpy/tool/steps/runtests_unittest.py:
        (RunTestsTest.test_webkit_run_unit_tests):
        * Scripts/webkitpy/tool/steps/steps_unittest.py:
        (StepsTest._step_options):

2016-01-07  Joseph Pecoraro  <pecoraro@apple.com>

        prepare-ChangeLog should include radar number
        https://bugs.webkit.org/show_bug.cgi?id=152839
        <rdar://problem/24093563>

        Reviewed by Daniel Bates.

        When running `prepare-ChangeLog -b ###`, check for a bugzilla comment that
        starts with a "<rdar://problem/####>" URL. If found, include that radar URL
        in the ChangeLog description after the bug URL.

        * Scripts/prepare-ChangeLog:
        (main): Update signatures.
        (fetchBugXMLData): XML Data is now used for multiple reasons. Extract this to just get the data.
        (fetchBugDescriptionFromBugXMLData): Search data for <short_desc>.
        (fetchRadarURLFromBugXMLData): Search comment text for radar URL.
        (generateNewChangeLogs): Include radar URL if we found one.

        * Scripts/webkitperl/prepare-ChangeLog_unittest/fetchRadarURLFromBugXMLData.pl: Added.
        Tests for the radar URL extraction.

2016-01-07  Alexey Proskuryakov  <ap@apple.com>

        testRunner.runUIScript crashes while running multiple tests in a row that invokes the same UIScript
        https://bugs.webkit.org/show_bug.cgi?id=152390
        <rdar://problem/23948321>

        Reviewed by Simon Fraser.

        Fix two use-after-frees.

        1. WKPageCallAfterNextPresentationUpdate's callback has a pointer to TestInvocation,
        but we may have already progressed to another test by the time the callback fires,
        having destroyed the TestInvocation.
        2. UIScriptController is a RefCounted object, but it has a raw pointer to
        UIScriptContext which has the same lifetime as a TestInvocation.
        As a result, completion blocks of UIScriptController actions would use a destroyed
        TestInvocation.

        * WebKitTestRunner/TestInvocation.cpp:
        (WTR::TestInvocation::~TestInvocation):
        (WTR::TestInvocation::url):
        (WTR::TestInvocation::didReceiveMessageFromInjectedBundle):
        (WTR::TestInvocation::runUISideScriptAfterUpdateCallback):
        (WTR::TestInvocation::runUISideScript):
        * WebKitTestRunner/TestInvocation.h:
        * WebKitTestRunner/UIScriptContext/UIScriptContext.cpp:
        (UIScriptContext::UIScriptContext):
        (UIScriptContext::~UIScriptContext):
        (UIScriptContext::runUIScript):
        * WebKitTestRunner/UIScriptContext/UIScriptContext.h:
        * WebKitTestRunner/UIScriptContext/UIScriptController.cpp:
        (WTR::UIScriptController::UIScriptController):
        (WTR::UIScriptController::contextDestroyed):
        (WTR::UIScriptController::makeWindowObject):
        (WTR::UIScriptController::setWillBeginZoomingCallback):
        (WTR::UIScriptController::willBeginZoomingCallback):
        (WTR::UIScriptController::setDidEndZoomingCallback):
        (WTR::UIScriptController::didEndZoomingCallback):
        (WTR::UIScriptController::setDidEndScrollingCallback):
        (WTR::UIScriptController::didEndScrollingCallback):
        (WTR::UIScriptController::setDidShowKeyboardCallback):
        (WTR::UIScriptController::didShowKeyboardCallback):
        (WTR::UIScriptController::setDidHideKeyboardCallback):
        (WTR::UIScriptController::didHideKeyboardCallback):
        (WTR::UIScriptController::uiScriptComplete):
        * WebKitTestRunner/UIScriptContext/UIScriptController.h:
        (WTR::UIScriptController::create):
        * WebKitTestRunner/ios/UIScriptControllerIOS.mm:
        (WTR::UIScriptController::doAsyncTask):
        (WTR::UIScriptController::zoomToScale):
        (WTR::UIScriptController::singleTapAtPoint):
        (WTR::UIScriptController::doubleTapAtPoint):
        (WTR::UIScriptController::typeCharacterUsingHardwareKeyboard):
        (WTR::UIScriptController::contentVisibleRect):
        (WTR::UIScriptController::platformSetWillBeginZoomingCallback):
        (WTR::UIScriptController::platformSetDidEndZoomingCallback):
        (WTR::UIScriptController::platformSetDidShowKeyboardCallback):
        (WTR::UIScriptController::platformSetDidHideKeyboardCallback):
        (WTR::UIScriptController::platformSetDidEndScrollingCallback):
        * WebKitTestRunner/mac/UIScriptControllerMac.mm:
        (WTR::UIScriptController::doAsyncTask):

2016-01-07  Youenn Fablet  <youenn.fablet@crf.canon.fr>

        [buildbot] clean-build script should remove untracked files and revert local changes too
        https://bugs.webkit.org/show_bug.cgi?id=142400

        Reviewed by Ryosuke Niwa.

        This patch cleans the WebKit folder by reverting tracked files changes and deleting SCM untracked files, including SCM ignored files.
        A helper routine SCM.discard_untracked_files is added for that purpose.

        * BuildSlaveSupport/clean-build:
        (main): Making call to Scripts/clean-webkit
        * Scripts/clean-webkit: Added.
        (main): Revert changes and delete untracked files.
        * Scripts/webkitpy/common/checkout/scm/scm.py:
        (SCM.discard_untracked_files): Helper function to discard untracked files or folders found by SCM.
        * Scripts/webkitpy/common/checkout/scm/scm_unittest.py:
        (SCMTest._shared_test_discard_untracked_files):
        (test_discard_untracked_files): Tests that untracked file and untracked folder get discarded correctly.

2016-01-06  Simon Fraser  <simon.fraser@apple.com>

        Add a setting and preferences to enable display-list drawing. Does nothing yet.
        https://bugs.webkit.org/show_bug.cgi?id=152807

        Reviewed by Zalan Bujtas.
        
        Add an item to the Settings menu to toggle display-list drawing.

        * MiniBrowser/mac/SettingsController.h:
        * MiniBrowser/mac/SettingsController.m:
        (-[SettingsController _populateMenu]):
        (-[SettingsController validateMenuItem:]):
        (-[SettingsController toggleDisplayListDrawingEnabled:]):
        (-[SettingsController displayListDrawingEnabled]):
        * MiniBrowser/mac/WK2BrowserWindowController.m:
        (-[WK2BrowserWindowController didChangeSettings]):

2016-01-06  Youenn Fablet  <youenn.fablet@crf.canon.fr>

        Python SCM should be able to retrieve untracked files - Add GIT support
        https://bugs.webkit.org/show_bug.cgi?id=143135

        Reviewed by Michael Catanzaro.

        * Scripts/webkitpy/common/checkout/scm/git.py:
        (Git.untracked_files): Adding support for git.
        * Scripts/webkitpy/common/checkout/scm/scm_unittest.py:
        (GitTest.setUp):
        (GitTest.test_untracked_files): Adding test.

2016-01-05  Mark Lam  <mark.lam@apple.com>

        Rename badly named JSC_timeout env var to JSCTEST_timeout.
        https://bugs.webkit.org/show_bug.cgi?id=152748

        Reviewed by Geoffrey Garen.

        Now that we validate JSC options, the badly named JSC_timeout env var causes the
        bots to have a bad time.

        * Scripts/run-javascriptcore-tests:
        * Scripts/run-jsc-stress-tests:

2016-01-04  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] Allow to save and restore session
        https://bugs.webkit.org/show_bug.cgi?id=115600

        Reviewed by Michael Catanzaro.

        Add test case to check the new session API.

        * TestWebKitAPI/Tests/WebKit2Gtk/TestBackForwardList.cpp:
        (testWebKitWebViewSessionState):
        (testWebKitWebViewSessionStateWithFormData):
        (beforeAll):

2016-01-04  Csaba Osztrogonác  <ossy@webkit.org>

        [EFL] Bump EFL version to 1.16.1
        https://bugs.webkit.org/show_bug.cgi?id=152688

        Reviewed by Gyuyoung Kim.

        * efl/jhbuild.modules:

2016-01-04  Aakash Jain  <aakash_jain@apple.com>

        error running layout tests on iOS simulator on latest build
        https://bugs.webkit.org/show_bug.cgi?id=152719
        <rdar://problem/24009549>

        Reviewed by Alexey Proskuryakov.

        * Scripts/webkitpy/xcode/simulator.py:
        (Simulator.wait_until_device_is_booted): Ensure that simulator device is in booted state
          before running simctl spawn command.

2016-01-03  Michael Catanzaro  <mcatanzaro@igalia.com>

        Unreviewed, move Frédéric Wang to committers list

        He seems to be on the contributors list by accident. He has been landing his own commits for
        about two years now.

        * Scripts/webkitpy/common/config/contributors.json:

2016-01-03  Michael Catanzaro  <mcatanzaro@igalia.com>

        Unreviewed, move Sebastian Dröge to committers list harder

        He accidentally added himself to the reviewers list because the file is confusing. Then I
        accidentially moved him to the contributors list because the file is confusing, even though
        I knew the contributors list existed in this file and was attempting to add him to the
        committers list. Really move him to the committers list now.

        * Scripts/webkitpy/common/config/contributors.json:

2016-01-02  Youenn Fablet  <youenn.fablet@crf.canon.fr>

        Python SCM should be able to retrieve untracked files - Add SVN support
        https://bugs.webkit.org/show_bug.cgi?id=152546

        Reviewed by Michael Catanzaro.

        * Scripts/webkitpy/common/checkout/scm/scm_unittest.py:
        (test_untracked_files): Activating test for SVN.
        * Scripts/webkitpy/common/checkout/scm/svn.py:
        (SVN.untracked_files): Implementing untracked files retrieval for SVN.

2015-12-31  Andy Estes  <aestes@apple.com>

        Replace WTF::move with WTFMove
        https://bugs.webkit.org/show_bug.cgi?id=152601

        Reviewed by Brady Eidson.

        * DumpRenderTree/TestRunner.h:
        (TestRunner::setAllowedHosts):
        * DumpRenderTree/win/DRTDataObject.cpp:
        (DRTDataObject::SetData):
        * TestWebKitAPI/Tests/WTF/Deque.cpp:
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/WTF/HashMap.cpp:
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/WTF/HashSet.cpp:
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/WTF/NakedPtr.cpp:
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/WTF/Ref.cpp:
        (TestWebKitAPI::passWithRef):
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/WTF/RefPtr.cpp:
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/WTF/Vector.cpp:
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/WTF/WTFString.cpp:
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/WTF/ns/RetainPtr.mm:
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/WebCore/CalculationValue.cpp:
        (TestWebKitAPI::createTestValue):
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/WebCore/ContentExtensions.cpp:
        (TestWebKitAPI::InMemoryCompiledContentExtension::createFromFilter):
        (TestWebKitAPI::InMemoryCompiledContentExtension::create):
        (TestWebKitAPI::InMemoryCompiledContentExtension::InMemoryCompiledContentExtension):
        (TestWebKitAPI::createNFAs):
        (TestWebKitAPI::TEST_F):
        * TestWebKitAPI/Tests/WebCore/DFACombiner.cpp:
        (TestWebKitAPI::combine):
        * TestWebKitAPI/Tests/WebCore/DFAHelpers.h:
        (TestWebKitAPI::createNFAs):
        * TestWebKitAPI/Tests/WebKit2/cocoa/WeakObjCPtr.mm:
        (TEST):
        * TestWebKitAPI/Tests/WebKit2Gtk/WebProcessTest.cpp:
        (WebProcessTest::add):

2016-01-01  Michael Catanzaro  <mcatanzaro@igalia.com>

        [SOUP] REGRESSION(r192761): Broke resource URIs for applications that use g_resource_load in a web extension
        https://bugs.webkit.org/show_bug.cgi?id=152634

        Reviewed by Carlos Garcia Campos.

        * TestWebKitAPI/Tests/WebKit2Gtk/TestLoaderClient.cpp:
        (testLoadFromGResource): Added test.
        (beforeAll):
        * TestWebKitAPI/Tests/WebKit2Gtk/WebExtensionTest.cpp:
        (registerGResource): Added.
        (webkit_web_extension_initialize_with_user_data): Load the test gresource.
        * TestWebKitAPI/Tests/WebKit2Gtk/resources/boring.html: Added.
        * TestWebKitAPI/Tests/WebKit2Gtk/resources/webkit2gtk-tests.gresource.xml: Add an HTML file.

2015-12-31  David Kilzer  <ddkilzer@apple.com>

        REGRESSION (r194470): Fix warnings uncovered by migrating to WTF_MOVE
        <https://bugs.webkit.org/show_bug.cgi?id=152601>

        Ignore unknown pragmas on older clangs.  Fixes the following
        build failure:

            Tools/TestWebKitAPI/Tests/WTF/NakedPtr.cpp:184:34: error: unknown warning group '-Wself-move', ignored [-Werror,-Wunknown-pragmas]
            #pragma clang diagnostic ignored "-Wself-move"
                                             ^
            1 error generated.

        * TestWebKitAPI/Tests/WTF/NakedPtr.cpp:
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/WTF/RefPtr.cpp:
        (TestWebKitAPI::TEST):

2015-12-31  Andy Estes  <aestes@apple.com>

        Update the style checker to advise using WTFMove() instead of WTF::move()
        https://bugs.webkit.org/show_bug.cgi?id=152601

        Reviewed by Daniel Bates.

        * Scripts/webkitpy/style/checkers/cpp.py:
        (check_wtf_move):
        * Scripts/webkitpy/style/checkers/cpp_unittest.py:
        (WebKitStyleTest.test_wtf_move):

2015-12-31  Andy Estes  <aestes@apple.com>

        Fix warnings uncovered by migrating to WTF_MOVE
        https://bugs.webkit.org/show_bug.cgi?id=152601

        Reviewed by Daniel Bates.

        Ignored -Wself-move warnings in these two API tests. It's useful to test that these classes properly handle
        self-move, even if doing so would trigger a warning.

        * TestWebKitAPI/Tests/WTF/NakedPtr.cpp:
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/WTF/RefPtr.cpp:
        (TestWebKitAPI::TEST):

2015-12-31  Martin Robinson  <mrobinson@igalia.com>

        [GTK] The install-dependencies script has a syntax error
        https://bugs.webkit.org/show_bug.cgi?id=152613

        Reviewed by Michael Catanzaro.

        * gtk/install-dependencies: Add the missing 'then.'

2015-12-30  Philippe Normand  <pnormand@igalia.com>

        [Mac][GTK] Jhbuild support for OSX
        https://bugs.webkit.org/show_bug.cgi?id=150799

        Reviewed by Michael Catanzaro.

        * gtk/install-dependencies: Install dependencies on OSX with Homebrew.
        * gtk/jhbuild.modules: Moved platform-specific build settings in condition tags.
        * gtk/patches/foxbntconfig-fix-osx-cache.diff: Added.
        * gtk/jhbuildrc: GTK+ makeargs clean-up, the 3.0.12 hack is no longer needed.

2015-12-28  Michael Catanzaro  <mcatanzaro@igalia.com>

        Unreviewed, move Sebastian Dröge to committers list

        He accidentally added himself to the reviewers list because the file is confusing.

        * Scripts/webkitpy/common/config/contributors.json:

2015-12-24  Simon Fraser  <simon.fraser@apple.com>

        Remove the unused #define _USE_MATH_DEFINES
        https://bugs.webkit.org/show_bug.cgi?id=152034

        Reviewed by Tim Horton.
        
        Update this test to use piDouble from MathExtras.h, and
        std::numeric_limits<>.

        * TestWebKitAPI/Tests/WTF/MediaTime.cpp:

2015-12-24  Youenn Fablet  <youenn.fablet@crf.canon.fr>

        Python SCM should be able to retrieve untracked files - Generic changes
        https://bugs.webkit.org/show_bug.cgi?id=152536

        Reviewed by Brent Fulgham.

        This patch introduces SCM.untracked_files to retrieve a list of untracked files.
        No support is yet added to GIT and SVN specific implementations.

        * Scripts/webkitpy/common/checkout/scm/scm.py:
        (SCM.untracked_files):
        * Scripts/webkitpy/common/checkout/scm/scm_unittest.py:
        (SCMTest._shared_test_untracked_files):

2015-12-23  Dewei Zhu  <dewei_zhu@apple.com>

        SVN checkout used by RunBenchmark should be non-interactive
        https://bugs.webkit.org/show_bug.cgi?id=152542

        Reviewed by Ryosuke Niwa.

        RunBenchmark should not require user interaction while running.

        * Scripts/webkitpy/benchmark_runner/benchmark_builder.py:
        (BenchmarkBuilder._checkout_with_subversion):

2015-12-23  Brent Fulgham  <bfulgham@apple.com>

        Web Inspector: add support for running protocol-test.js tests on Windows
        https://bugs.webkit.org/show_bug.cgi?id=148037
        <rdar://problem/22292237>

        Reviewed by Simon Fraser.

        * DumpRenderTree/win/TestRunnerWin.cpp:
        (TestRunner::inspectorTestStubURL): Provide implementation.

2015-12-23  Eric Carlson  <eric.carlson@apple.com>

        [MediaStream] MediaDeviceInfo.label must be empty in some situations
        https://bugs.webkit.org/show_bug.cgi?id=152000

        Reviewed by Brent Fulgham.

        * WebKitTestRunner/InjectedBundle/Bindings/TestRunner.idl:
        * WebKitTestRunner/InjectedBundle/InjectedBundle.cpp:
        (WTR::InjectedBundle::setUserMediaPermission):
        (WTR::InjectedBundle::setUserMediaPermissionForOrigin): New.
        * WebKitTestRunner/InjectedBundle/InjectedBundle.h:

        * WebKitTestRunner/InjectedBundle/TestRunner.cpp:
        (WTR::TestRunner::setUserMediaPermissionForOrigin): New.
        * WebKitTestRunner/InjectedBundle/TestRunner.h:

        * WebKitTestRunner/TestController.cpp:
        (WTR::TestController::setUserMediaPermissionForOrigin):
        (WTR::TestController::handleCheckOfUserMediaPermissionForOrigin): Add NULL check.
        (WTR::TestController::decidePolicyForUserMediaPermissionRequestIfPossible): Don't add 
          persistent permission for origin, that can be done from script now.
        * WebKitTestRunner/TestController.h:

        * WebKitTestRunner/TestInvocation.cpp:
        (WTR::TestInvocation::didReceiveMessageFromInjectedBundle): Add support for
          SetUserMediaPermissionForOrigin.

2015-12-23  Brent Fulgham  <bfulgham@apple.com>

        [Win] Unreviewed build fix: Recognize Windows 10 variants.

        * Scripts/webkitpy/common/system/platforminfo.py:
        (PlatformInfo._determine_win_version):

2015-12-23  Chris Aljoudi <chris@chrismatic.io> and Alex Christensen <achristensen@webkit.org>

        Content blockers should be able to promote http to https
        https://bugs.webkit.org/show_bug.cgi?id=148966

        Reviewed by Benjamin Poulain.

        * TestWebKitAPI/Tests/WebCore/ContentExtensions.cpp:
        (WebCore::ContentExtensions::operator<<):
        (TestWebKitAPI::TEST_F):

2015-12-22  Hunseop Jeong  <hs85.jeong@samsung.com>

        [EFL] MiniBrowser should be able to choose the offline-web-application-cache option
        https://bugs.webkit.org/show_bug.cgi?id=152516

        Reviewed by Gyuyoung Kim.

        * MiniBrowser/efl/main.c:

2015-12-22  Brent Fulgham  <bfulgham@apple.com>

        Unreviewed: Add John Wilander as a contributor.

        * Scripts/webkitpy/common/config/contributors.json:

2015-12-22  Chris Fleizach  <cfleizach@apple.com>

        [WK2] Looping in testcase: fast/dom/Window/property-access-on-cached-window-after-frame-removed.html
        https://bugs.webkit.org/show_bug.cgi?id=152482

        Reviewed by Brent Fulgham.

        vertical/horizontalScrollbar returns an accessibility element. That element can also be queried
        for the same property. On WK2, the element returned will not be valid, but is still present and
        that can lead to looping.

        * DumpRenderTree/mac/AccessibilityUIElementMac.mm:
        (AccessibilityUIElement::horizontalScrollbar):
        (AccessibilityUIElement::verticalScrollbar):
        * WebKitTestRunner/InjectedBundle/mac/AccessibilityUIElementMac.mm:
        (WTR::AccessibilityUIElement::horizontalScrollbar):
        (WTR::AccessibilityUIElement::verticalScrollbar):

2015-12-22  Xabier Rodriguez Calvar  <calvaris@igalia.com>

        Unreviewed.

        * Scripts/webkitpy/common/config/contributors.json: Marking myself as reviewer.

2015-12-21  Hunseop Jeong  <hs85.jeong@samsung.com>

        [EFL] test_ewk2_context failed after r192808
        https://bugs.webkit.org/show_bug.cgi?id=151846

        Reviewed by Gyuyoung Kim.

        Used the added ewk_context_web_process_count_limit_set api
        instead of the deprecated ewk_context_process_model_set.

        * MiniBrowser/efl/main.c:
        (elm_main):

2015-12-21  Michael Catanzaro  <mcatanzaro@igalia.com>

        Unreviewed, move myself to reviewer list.

        * Scripts/webkitpy/common/config/contributors.json:

2015-12-21  Aakash Jain  <aakash_jain@apple.com>

        Unreviewed, add myself to the committers list.

        * Scripts/webkitpy/common/config/contributors.json:

2015-12-21  Michael Catanzaro  <mcatanzaro@igalia.com>

        [GTK] jquery.min.js violates DFSG
        https://bugs.webkit.org/show_bug.cgi?id=152428

        Reviewed by Joseph Pecoraro.

        Stop distributing Source/WebInspectorUI/Tools. It is not needed in tarballs. This brings us
        into compliance with DFSG by removing a bundled, minified copy of jQuery from our tarball.

        * gtk/manifest.txt.in:

2015-12-19  Dan Bernstein  <mitz@apple.com>

        [Mac] WebKit contains dead source code for OS X Mavericks and earlier
        https://bugs.webkit.org/show_bug.cgi?id=152462

        Reviewed by Alexey Proskuryakov.

        - Removed definitions of MACOSX_DEPLOYMENT_TARGET and WEBKIT_SYSTEM_INTERFACE_LIBRARY for
          OS X 10.9:

        * DumpRenderTree/mac/Configurations/DebugRelease.xcconfig:
        * LayoutTestRelay/Configurations/DebugRelease.xcconfig:
        * MiniBrowser/Configurations/DebugRelease.xcconfig:
        * TestWebKitAPI/Configurations/DebugRelease.xcconfig:
        * WebKitTestRunner/Configurations/DebugRelease.xcconfig:

        - Simplified expressions involving __MAC_OS_X_VERSION_MIN_REQUIRED and removed code that was
          never getting compiled:

        * DumpRenderTree/mac/TextInputController.m:
        * MiniBrowser/mac/BrowserWindowController.m:
        * TestWebKitAPI/Tests/mac/AttributedString.mm:
        * WebKitTestRunner/mac/EventSenderProxy.mm:

2015-12-18  Michael Catanzaro  <mcatanzaro@igalia.com>

        Unreviewed, add WebKitGTK+ Bugzilla email to committers list

        This is to make it easy to CC it on Bugzilla.

        * Scripts/webkitpy/common/config/contributors.json:

2015-12-18  Aakash Jain  <aakash_jain@apple.com>

        Pasteboard get messed up after running kill-old-processes
        https://bugs.webkit.org/show_bug.cgi?id=152426

        Reviewed by Alexey Proskuryakov.

        * BuildSlaveSupport/kill-old-processes:
        (main): Do not kill pasteboard anymore.

2015-12-17  Aakash Jain  <aakash_jain@apple.com>

        run-webkit-tests shouldn't start multiple iOS simulators while only running one test
        https://bugs.webkit.org/show_bug.cgi?id=152157
        <rdar://problem/23851817>

        Reviewed by Alexey Proskuryakov.

        * Scripts/webkitpy/layout_tests/controllers/layout_test_runner.py:
        (LayoutTestRunner.get_worker_count): Calculate required number of workers.
        * Scripts/webkitpy/layout_tests/controllers/manager.py:
        (Manager._get_test_inputs): Common method to calculate test_inputs.
        (Manager._update_worker_count): Calculate and update required number of workers.

2015-12-16  Aakash Jain  <aakash_jain@apple.com>

        run-webkit-tests fails to delete Simulator device during cleanup
        https://bugs.webkit.org/show_bug.cgi?id=152363

        Reviewed by Alexey Proskuryakov.

        * Scripts/webkitpy/xcode/simulator.py:
        (Simulator.delete_device): Ensure that device is Shutdown before deleting it.

2015-12-16  Tim Horton  <timothy_horton@apple.com>

        [mac-wk2] fast/events force click tests crashing
        https://bugs.webkit.org/show_bug.cgi?id=152339

        Reviewed by Beth Dakin.

        * WebKitTestRunner/mac/EventSenderProxy.mm:
        (-[EventSenderSyntheticEvent initPressureEventAtLocation:globalLocation:stage:pressure:stageTransition:phase:time:eventNumber:window:]):
        Set the NSEvent's _type member in addition to overriding -type,
        because there are assertions in touch event handling code that depend on it.

2015-12-16  Youenn Fablet  <youenn.fablet@crf.canon.fr>

        Enforce temporarily bots to sync WebKit and WPT testharness.js
        https://bugs.webkit.org/show_bug.cgi?id=152334

        Reviewed by Darin Adler.

        * Scripts/webkitpy/layout_tests/servers/web_platform_test_server.py:
        (WebPlatformTestServer._copy_webkit_test_files): Temporarily overwrite wpt testharness.js with WebKit testharness.js.

2015-12-16  Youenn Fablet  <youenn.fablet@crf.canon.fr>

        [Fetch API] Add fetch API compile time flag
        https://bugs.webkit.org/show_bug.cgi?id=152254

        Reviewed by Darin Adler.

        * Scripts/webkitperl/FeatureList.pm:

2015-12-16  Xabier Rodriguez Calvar  <calvaris@igalia.com>

        Unreviewed.

        Added files that have impact in building Streams API to the watchlist.

        * Scripts/webkitpy/common/config/watchlist:

2015-12-16  Xabier Rodriguez Calvar  <calvaris@igalia.com>

        Unreviewed.

        Added imported tests to Streams API watchlist.

        * Scripts/webkitpy/common/config/watchlist:

2015-12-16  Youenn Fablet  <youenn.fablet@crf.canon.fr>

        Remove default copy of wpt testharness.js when launching wpt server
        https://bugs.webkit.org/show_bug.cgi?id=152298

        Reviewed by Darin Adler.

        * Scripts/webkitpy/layout_tests/servers/web_platform_test_server.py:
        (WebPlatformTestServer._copy_webkit_test_files): Deleted default copy of WebKit testharness.js to WPT.

2015-12-15  David Kilzer  <ddkilzer@apple.com>

        REGRESSION (r192375): DumpRenderTree.app exits immediately with no error
        <http://webkit.org/b/152314>

        Reviewed by Daniel Bates.

        The change to DumpRenderTreeMain.mm in r192375 caused the iOS
        code path to exit immediately when calling main().
        Unfortunately, DumpRenderTreeMain.mm was used for both
        DumpRenderTree command-line binary and DumpRenderTree.app, which
        meant that the app would exit immediately with no error code
        when run!

        The workaround is to introduce a separate source file called
        DumpRenderTreeAppMain.mm, similar to what WebKitTestRunner
        already does.

        * DumpRenderTree/DumpRenderTree.xcodeproj/project.pbxproj: Add
        DumpRenderTreeAppMain.mm to the project.  Make it the only
        compiled source for the DumpRenderTree.app target.
        * DumpRenderTree/ios/DumpRenderTreeAppMain.mm: Copied from Tools/DumpRenderTree/mac/DumpRenderTreeMain.mm.
        (main): Call DumpRenderTreeMain() on iOS.  Assert on OS X in
        case someone tries mistakenly to use the app.
        * DumpRenderTree/mac/Configurations/DumpRenderTree.xcconfig:
        Link to JavaScriptCore.framework on iOS for the assert.
        * DumpRenderTree/mac/Configurations/DumpRenderTreeApp.xcconfig:
        Link to JavaScriptCore.framework on OS X for the assert.  Remove
        unneeded EXCLUDED_SOURCE_FILE_NAMES setting.
        * DumpRenderTree/mac/DumpRenderTreeMain.mm:
        (main): Add assert for iOS so that a crash occurs if someone
        tries to run the wrong command.

2015-12-14  Tim Horton  <timothy_horton@apple.com>

        Frequent crash under -[WKPDFView web_setMinimumSize:]_block_invoke
        https://bugs.webkit.org/show_bug.cgi?id=152266
        <rdar://problem/22092676>

        Reviewed by Simon Fraser.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WebKit2Cocoa/WKPDFViewResizeCrash.mm: Added.
        Add a test that crashed before this change, and doesn't crash after.

2015-12-14  Chris Fleizach  <cfleizach@apple.com>

        AX: iOS: Text field variations do not have the correct traits
        https://bugs.webkit.org/show_bug.cgi?id=152237

        Reviewed by Mario Sanchez Prada.

        Add iOS calls for determing if an object is a search field or a text area.

        * DumpRenderTree/AccessibilityUIElement.cpp:
        (getIsSearchFieldCallback):
        (getIsTextAreaCallback):
        (stringForSelectionCallback):
        (AccessibilityUIElement::getJSClass):
        * DumpRenderTree/AccessibilityUIElement.h:
        * DumpRenderTree/ios/AccessibilityUIElementIOS.mm:
        (AccessibilityUIElement::identifier):
        (AccessibilityUIElement::isTextArea):
        (AccessibilityUIElement::isSearchField):
        (AccessibilityUIElement::traits):
        * WebKitTestRunner/InjectedBundle/AccessibilityUIElement.cpp:
        (WTR::AccessibilityUIElement::scrollPageRight):
        (WTR::AccessibilityUIElement::hasContainedByFieldsetTrait):
        (WTR::AccessibilityUIElement::fieldsetAncestorElement):
        (WTR::AccessibilityUIElement::isSearchField):
        (WTR::AccessibilityUIElement::isTextArea):
        * WebKitTestRunner/InjectedBundle/AccessibilityUIElement.h:
        * WebKitTestRunner/InjectedBundle/Bindings/AccessibilityUIElement.idl:
        * WebKitTestRunner/InjectedBundle/ios/AccessibilityUIElementIOS.mm:
        (WTR::AccessibilityUIElement::fieldsetAncestorElement):
        (WTR::AccessibilityUIElement::isTextArea):
        (WTR::AccessibilityUIElement::isSearchField):
        (WTR::AccessibilityUIElement::rowCount):

2015-12-14  Carlos Alberto Lopez Perez  <clopez@igalia.com>

        [GTK] [JHBuild] package libtool-bin is now required on Debian systems.
        https://bugs.webkit.org/show_bug.cgi?id=152252

        Reviewed by Sergio Villar Senin.

        * gtk/install-dependencies: Add libtool-bin to the list of packages required
        for building the JHBuild on Debian systems.

2015-12-11  Joseph Pecoraro  <pecoraro@apple.com>

        check-for-inappropriate-objc-class-names should check all class names, not just externally visible ones
        https://bugs.webkit.org/show_bug.cgi?id=152156

        Reviewed by Dan Bernstein.

        Our frameworks should appropriately prefix all ObjC classes,
        not just external symbols.

        * Scripts/check-for-inappropriate-objc-class-names:
        Remove the -g switch to check all ObjC class names.

2015-12-10  Eric Carlson  <eric.carlson@apple.com>

        [MediaStream] Expose media capture devices persistent permissions to WebCore
        https://bugs.webkit.org/show_bug.cgi?id=152087

        Add support for the new user media permission checker page UI client method.

        Reviewed by Chris Dumez.

        * WebKitTestRunner/TestController.cpp:
        (WTR::decidePolicyForUserMediaPermissionRequest):
        (WTR::checkUserMediaPermissionForOrigin):
        (WTR::TestController::createOtherPage): Add checkUserMediaPermissionForOrigin.
        (WTR::TestController::createWebViewWithOptions): Ditto.
        (WTR::TestController::resetStateToConsistentValues): Clear m_userMediaOriginPermissions.
        (WTR::originUserVisibleName): New, create a string for the origin.
        (WTR::TestController::handleCheckOfUserMediaPermissionForOrigin): Set the WKUserMediaPermissionCheckRef
          according to the state of the origin permission map.
        (WTR::TestController::handleUserMediaPermissionRequest): Remember both the origin and the
          request so we can update the origin permission map in decidePolicyForUserMediaPermissionRequestIfPossible.
        (WTR::TestController::decidePolicyForUserMediaPermissionRequestIfPossible): Update the
          origin permission map.
        * WebKitTestRunner/TestController.h:

2015-12-10  Alex Christensen  <achristensen@webkit.org>

        REGRESSION (r192796) WKBundlePageResourceLoadClient should be able to setHTTPBody in willSendRequestForFrame
        https://bugs.webkit.org/show_bug.cgi?id=152022
        rdar://problem/23763584

        Reviewed by Darin Adler.

        * WebKitTestRunner/InjectedBundle/Bindings/TestRunner.idl:
        * WebKitTestRunner/InjectedBundle/InjectedBundlePage.cpp:
        (WTR::InjectedBundlePage::willSendRequestForFrame):
        * WebKitTestRunner/InjectedBundle/TestRunner.h:
        (WTR::TestRunner::setWillSendRequestReturnsNull):
        (WTR::TestRunner::willSendRequestReturnsNullOnRedirect):
        (WTR::TestRunner::setWillSendRequestReturnsNullOnRedirect):
        (WTR::TestRunner::setWillSendRequestAddsHTTPBody):
        (WTR::TestRunner::willSendRequestHTTPBody):
        Added setWillSendRequestAddsHTTPBody that uses new SPI for testing.

2015-12-10  Aakash Jain  <aakash_jain@apple.com>

        Remove additional simulator checks before running layout-tests
        https://bugs.webkit.org/show_bug.cgi?id=152146

        Reviewed by Darin Adler.

        * Scripts/webkitpy/port/ios.py:
        (IOSSimulatorPort.check_sys_deps): Removed additional simulators verifications.
        * Scripts/webkitpy/xcode/simulator.py:
        (Simulator._boot_and_shutdown_simulator_device): Deleted.
        (Simulator.check_simulator_device_and_erase_if_needed): Deleted.

2015-12-09  Aakash Jain  <aakash_jain@apple.com>

        Run atleast one simulator even if max process limit is low
        https://bugs.webkit.org/show_bug.cgi?id=152081
        <rdar://problem/23819694>

        Reviewed by Alexey Proskuryakov.

2015-12-09  Mario Sanchez Prada  <mario@endlessm.com>

        [GTK] Crash in WebProcess when loading large content with custom URI schemes
        https://bugs.webkit.org/show_bug.cgi?id=144262

        Reviewed by Carlos Garcia Campos.

        Added new unit test to check the additional scenarios we now
        handle for custom URI schemes.

        * TestWebKitAPI/Tests/WebKit2Gtk/TestWebKitWebContext.cpp:
        (generateHTMLContent): New helper function to generate big enough content.
        (testWebContextURIScheme): New unit test.

2015-12-09  Ryuan Choi  <ryuan.choi@navercorp.com>

        [EFL] Fix unhandled web process message when launching MiniBrowser
        https://bugs.webkit.org/show_bug.cgi?id=152048

        Reviewed by Gyuyoung Kim.

        * TestWebKitAPI/Tests/WebKit2/CoordinatedGraphics/WKViewUserViewportToContents.cpp:
        (TestWebKitAPI::TEST):

2015-12-09  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] Add API to handle beforeunload events
        https://bugs.webkit.org/show_bug.cgi?id=139090

        Reviewed by Gustavo Noronha Silva.

        * MiniBrowser/gtk/BrowserWindow.c:
        (browserWindowConstructed):
        (browserWindowDeleteEvent):
        (browser_window_class_init):
        Handle delete-event to prevent the window from being closed when
        the page has beforeunload handlers. Use
        webkit_web_view_try_close() when the window is requested to be
        closed.
        * TestWebKitAPI/Tests/WebKit2Gtk/TestUIClient.cpp:
        (testWebViewJavaScriptDialogs):
        Add a test case for the WEBKIT_SCRIPT_DIALOG_BEFORE_UNLOAD_CONFIRM
        script dialog type.

2015-12-09  Mario Sanchez Prada  <mario@endlessm.com>

        Refactored initialization code in LoadTrackingTest.

        Rubber-stamped by Carlos Garcia Campos.

        Small refactoring to make sure that the state of a LoadTrackingTest
        gets properly reset before loading new web content.

        * TestWebKitAPI/gtk/WebKit2Gtk/LoadTrackingTest.h:
        * TestWebKitAPI/gtk/WebKit2Gtk/LoadTrackingTest.cpp:
        (LoadTrackingTest::reset): New, refactored code from *load*() and go*()
        functions and reset the remaining local variables.
        (LoadTrackingTest::loadURI): Call reset();
        (LoadTrackingTest::loadHtml): Ditto.
        (LoadTrackingTest::loadPlainText): Ditto.
        (LoadTrackingTest::loadBytes): Ditto.
        (LoadTrackingTest::loadRequest): Ditto.
        (LoadTrackingTest::reload): Ditto.
        (LoadTrackingTest::goBack): Ditto.
        (LoadTrackingTest::goForward): Ditto.

2015-12-09  Gyuyoung Kim  <gyuyoung.kim@webkit.org>

        [EFL] REGRESSION(r193616): WKPreferences test has been failed since r193616
        https://bugs.webkit.org/show_bug.cgi?id=151942

        Reviewed by Darin Adler.

        * MiniBrowser/efl/main.c:
        (window_create): Enable offline web application cache feature on MiniBrowser.
        (elm_main):

2015-12-08  Aakash Jain  <aakash_jain@apple.com>

        https://bugs.webkit.org/show_bug.cgi?id=151243
        <rdar://problem/22955197>

        Reviewed by Alexey Proskuryakov.

        * LayoutTestRelay/LayoutTestRelay/main.m:
        (getTestingSimDevice): Use separate testing device for each worker.
        * Scripts/webkitpy/layout_tests/controllers/manager.py:
        (Manager.run): Perform cleanup even if setup fails.
        * Scripts/webkitpy/port/ios.py:
        (IOSSimulatorPort.default_child_processes): Calculate number of simulators to use.
        (IOSSimulatorPort.child_processes): Gets the number of simulators from options variable.
        (IOSSimulatorPort.setup_test_run): Handle mulitple simulators.
        (IOSSimulatorPort._quit_ios_simulator): Same
        (IOSSimulatorPort.clean_up_test_run): Same
        (IOSSimulatorPort.check_sys_deps): Same
        (IOSSimulatorPort.testing_device): Same
        (IOSSimulatorPort.reset_preferences): Same
        (IOSSimulatorPort.get_simulator_path): Return simulator path.
        (IOSSimulatorPort._createSimulatorApp): Create the copy of simulator app.
        * Scripts/webkitpy/xcode/simulator.py:
        (Device.delete): Delete the simulator device.
        (Simulator.delete_device): Same
        (Simulator.wait_until_device_is_booted): Wait for device booting.

2015-12-08  Ryuan Choi  <ryuan.choi@navercorp.com>

        [EFL] Add API to provide preferences before creating ewk_view
        https://bugs.webkit.org/show_bug.cgi?id=151587

        Reviewed by Gyuyoung Kim.

        * MiniBrowser/efl/main.c:
        (on_key_down):
        (quit):
        (window_create):
        Moved settings related code to configuration() not to update settings
        whenever ewk_view is created.
        (configuration):
        (elm_main):

2015-12-08  Carlos Garcia Campos  <cgarcia@igalia.com>

        Unreviewed. Fix GTK+ API tests after r193639.

        The new jhbuild version needs some more variables ot be present in
        the builtin dict, even if they are set to None.

        * jhbuild/jhbuildutils.py:
        (enter_jhbuild_environment_if_available):

2015-12-07  Gustavo Noronha Silva  <gns@gnome.org>

        [GTK] Notify WebCore when notification is clicked
        https://bugs.webkit.org/show_bug.cgi?id=151951

        Reviewed by Carlos Garcia Campos.

        * TestWebKitAPI/Tests/WebKit2Gtk/TestWebKitWebView.cpp:
        (testWebViewNotification): test the new API.

2015-12-07  Michael Catanzaro  <mcatanzaro@igalia.com>

        'jhbuild build' should fail immediately when building any module fails
        https://bugs.webkit.org/show_bug.cgi?id=145697

        Reviewed by Carlos Garcia Campos.

        * efl/jhbuildrc: Update jhbuildrc to account for the removal of the use_lib64 option.
        * gtk/jhbuildrc: Update jhbuildrc to account for the removal of the use_lib64 option.
        Everything is placed under lib instead of lib64 now.
        * jhbuild/jhbuild-wrapper: Update jhbuild to the latest upstream commit, and pass
        --exit-on-error when running 'jhbuild build'.
        * jhbuild/jhbuildrc_common.py:
        (init): Don't override PKG_CONFIG_PATH, CMAKE_PREFIX_PATH, or CMAKE_LIBRARY_PATH. Modern
        jhbuild should be able to handle these for us without breaking things....

2015-12-07  Xabier Rodriguez Calvar  <calvaris@igalia.com>

        Add support to import w3c tests from a repository with a different root that the main repo dir
        https://bugs.webkit.org/show_bug.cgi?id=151751

        Reviewed by Ryosuke Niwa and Youenn Fablet.

        We should be able to import tests from repositories that are not pure test repositories and where tests are kept
        in a different directory than the repository root.

        This patch introduces a new parameter tests_directory that we will use as root directory to search for
        tests. All paths will be flattened when copying tests to have a less complicated directory structure. This
        requires having the copy_path lists including tuples of origin and destination directories.

        * Scripts/webkitpy/w3c/test_downloader.py:
        (TestDownloader._add_test_suite_paths): Adds the paths as a tuple of origin and destination directory.
        (TestDownloader.copy_tests): Uses the origin and destination tuple for the paths to copy when copying files.
        * Scripts/webkitpy/w3c/test_importer_unittest.py:
        (TestImporterTest.test_tests_directory): Test.

2015-12-07  Xabier Rodriguez Calvar  <calvaris@igalia.com>

        Mock TestRepositories in W3C importer tests
        https://bugs.webkit.org/show_bug.cgi?id=151938

        Reviewed by Youenn Fablet.

        The test importer tests should use a fake repository instead of using the real one. The reason why this happened
        is because the test repository method reading the file was using the filesystem directly instead of taking the
        host one. This patch changes that.

        * Scripts/webkitpy/w3c/test_downloader.py:
        (TestDownloader.load_test_repositories): Take a filesystem and use it. If we get no filesystem, we use the
        default one.
        (TestDownloader.__init__): When loading the repositories, pass the host filesystem.
        * Scripts/webkitpy/w3c/test_importer_unittest.py:
        (TestImporterTest.test_harnesslinks_conversion):
        (TestImporterTest.test_submodules_generation): Use a fake test repository file.

2015-12-07  David Kilzer  <ddkilzer@apple.com>

        TestNetscapePlugIn: Address review comment on 193607
        <http://webkit.org/b/151881>

        * DumpRenderTree/TestNetscapePlugIn/PluginObject.cpp:
        (testSetStatus): Initializing std::unique_ptr<char[]> with
        nullptr is redundant.

2015-12-07  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] Add webkit_uri_request_get_http_method
        https://bugs.webkit.org/show_bug.cgi?id=151601

        Reviewed by Martin Robinson.

        Add test case to check HTTP method of WebKitURIRequest.

        * TestWebKitAPI/Tests/WebKit2Gtk/TestLoaderClient.cpp:
        (testURIRequestHTTPMethod):
        (serverCallback):
        (beforeAll):
        * TestWebKitAPI/Tests/WebKit2Gtk/WebExtensionTest.cpp:
        (sendRequestCallback):

2015-12-07  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] Add WebKitWebPage::console-message-sent signal to Web Extensions API
        https://bugs.webkit.org/show_bug.cgi?id=79918

        Reviewed by Gustavo Noronha Silva.

        Add unit tests to check the different console messages.

        * TestWebKitAPI/Tests/WebKit2Gtk/CMakeLists.txt:
        * TestWebKitAPI/Tests/WebKit2Gtk/TestConsoleMessage.cpp: Added.
        (ConsoleMessageTest::ConsoleMessage::operator==):
        (ConsoleMessageTest::consoleMessageReceivedCallback):
        (ConsoleMessageTest::ConsoleMessageTest):
        (ConsoleMessageTest::~ConsoleMessageTest):
        (ConsoleMessageTest::waitUntilConsoleMessageReceived):
        (testWebKitConsoleMessageConsoleAPI):
        (testWebKitConsoleMessageJavaScriptException):
        (testWebKitConsoleMessageNetworkError):
        (testWebKitConsoleMessageSecurityError):
        (beforeAll):
        (afterAll):
        * TestWebKitAPI/Tests/WebKit2Gtk/WebExtensionTest.cpp:
        (consoleMessageSentCallback):
        (pageCreatedCallback):

2015-12-07  Ryuan Choi  <ryuan.choi@navercorp.com>

        [EFL] MiniBrowser doesn't exit when called ewk_view_try_close()
        https://bugs.webkit.org/show_bug.cgi?id=151934

        Reviewed by Csaba Osztrogonác.

        * MiniBrowser/efl/main.c:
        (on_window_deletion): Revert the changes of r192767.

2015-12-07  Michael Catanzaro  <mcatanzaro@igalia.com>

        [GTK] update-webkitgtk-libs cannot build mesa
        https://bugs.webkit.org/show_bug.cgi?id=151535

        Reviewed by Martin Robinson.

        Upgrade to newer mesa in order to build successfully against LLVM 3.7. Add missing
        dependency of mesa on LLVM, to ensure LLVM is built first. Build LLVM unconditionally, even
        on architectures where FTL is not supported, to ensure mesa is always buildable, since LLVM
        does not have a stable API and we cannot expect mesa to be buildable unless we control the
        LLVM version. Build mesa with --disable-egl since --enable-egl conflicts with
        --enable-xlib-glx. This fixes update-webkitgtk-libs on distros with LLVM 3.7.

        * gtk/jhbuild.modules:

2015-12-07  Philippe Normand  <pnormand@igalia.com>

        [GTK][Mac] libWebExtensionTest link error
        https://bugs.webkit.org/show_bug.cgi?id=150802

        Reviewed by Carlos Garcia Campos.

        * TestWebKitAPI/Tests/WebKit2Gtk/CMakeLists.txt: add dependencies to the webextension library.

2015-12-06  David Kilzer  <ddkilzer@apple.com>

        TestNetscapePlugIn: Fix leaks found by static analyzer
        <http://webkit.org/b/151881>

        Reviewed by Darin Adler.

        Fixes the following leaks found by the static analyzer:
            DumpRenderTree/TestNetscapePlugIn/PluginObject.cpp:808:16: warning: Potential leak of memory pointed to by 'path'
                    return false;
                           ^~~~~
            DumpRenderTree/TestNetscapePlugIn/PluginObject.cpp:808:16: warning: Potential leak of memory pointed to by 'target'
                    return false;
                           ^~~~~
            DumpRenderTree/TestNetscapePlugIn/PluginObject.cpp:808:16: warning: Potential leak of memory pointed to by 'url'
                    return false;
                           ^~~~~

        * DumpRenderTree/TestNetscapePlugIn/PluginObject.cpp:
        (toCString): Switch to returning std::unique_ptr<char[]>.  Add
        early return if allocation fails.
        (testPostURLFile): Switch to using std::unique_ptr<char[]>.
        Make sure to call fclose() on filehandle, even for an early
        return.
        (testSetStatus): Switch to using std::unique_ptr<char[]>.

2015-12-05  David Kilzer  <ddkilzer@apple.com>

        prepare-ChangeLog: Fix some warning messages when using svn
        <http://webkit.org/b/151914>

        Reviewed by Daniel Bates.

        * Scripts/prepare-ChangeLog:
        (generateFunctionLists): Simplify logic so that we never call
        normalizePath() with an undefined value.
        (attributeCommand): Quote $subPath for the shell so that we
        don't try to run "svn propget" on invalid paths.

2015-12-04  David Kilzer  <ddkilzer@apple.com>

        TestNetscapePlugIn: Fix remaining static analyzer warnings
        <http://webkit.org/b/151888>

        Reviewed by Alexey Proskuryakov.

        Fixes the following static analyzer warnings:
            Tools/DumpRenderTree/TestNetscapePlugIn/main.cpp:101:9: warning: Called function pointer is null (null dereference)
                    CRASH();
                    ^~~~~~~
            Tools/DumpRenderTree/TestNetscapePlugIn/main.cpp:46:5: note: expanded from macro 'CRASH'
                ((void(*)())0)(); /* More reliable, but doesn't say BBADBEEF */ \
                ^~~~~~~~~~~~~~~~
            Tools/DumpRenderTree/TestNetscapePlugIn/main.cpp:375:12: warning: Access to field 'pluginTest' results in a dereference of a null pointer (loaded from variable 'obj')
                return obj->pluginTest->NPP_SetWindow(window);
                       ^~~~~~~~~~~~~~~
            2 warnings generated.

        * DumpRenderTree/TestNetscapePlugIn/main.cpp:
        (CRASH): Use __builtin_trap() for gcc/clang.
        (NPP_SetWindow): Add early return if obj is nullptr.

2015-12-03  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] Test /webkit2/WebKitWebResource/get-data is flaky
        https://bugs.webkit.org/show_bug.cgi?id=151797

        Reviewed by Martin Robinson.

        Since we switched to use the network process to run the unit tests
        the test /webkit2/WebKitWebResource/get-data sometimes fails and
        sometimes passes. We are now also getting the notification for the
        css image. Since we wait for 3 resources, sometimes the css image
        is loaded before and then checkResourceData is called for it, but
        not handled. When the css image is the last one loaded the test
        passes. So, we just need to wait for the 4 resources.

        * TestWebKitAPI/Tests/WebKit2Gtk/TestResources.cpp:
        (testWebResourceGetData):

2015-12-03  David Kilzer  <ddkilzer@apple.com>

        DumpRenderTree: Use-after-free in createBitmapContext() in PixelDumpSupportMac.mm
        <http://webkit.org/b/151845>

        Reviewed by Simon Fraser.

        Fixes the following static analyzer warning:
            DumpRenderTree/mac/PixelDumpSupportMac.mm:67:9: warning: Use of memory after it is freed
                    WTFLogAlways("DumpRenderTree: CGBitmapContextCreate(%p, %llu, %llu, 8, %llu, %p, 0x%x) failed\n", buffer, pixelsHigh, pixelsWide, rowBytes, colorSpace.get(), kCGImageAlphaPremultipliedFirst | kCGBitmapByteOrder32Host);
                    ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

        * DumpRenderTree/mac/PixelDumpSupportMac.mm:
        (createBitmapContext): Free 'buffer' after using it in logging
        to fix the use-after-free.  Assign a value of nullptr to buffer
        so we don't return with it set to a freed address.

2015-12-03  Jer Noble  <jer.noble@apple.com>

        Expose WebCore's InvisibleAutoplayNotPermitted setting to WebKit & WebKit2
        https://bugs.webkit.org/show_bug.cgi?id=151830

        Reviewed by Anders Carlsson.

        Set invisibleAutoplayNotPermitted to NO by default both in WKTR and DRT.

        * DumpRenderTree/mac/DumpRenderTree.mm:
        (resetWebPreferencesToConsistentValues):
        * WebKitTestRunner/cocoa/TestControllerCocoa.mm:
        (WTR::initializeWebViewConfiguration):

2015-12-03  Anders Carlsson  <andersca@apple.com>

        Remove Objective-C GC support
        https://bugs.webkit.org/show_bug.cgi?id=151819
        rdar://problem/23746991

        Reviewed by Dan Bernstein.

        * asan/asan.xcconfig:

2015-12-02  Yusuke Suzuki  <utatane.tea@gmail.com>

        Allow nil for unspecified benchmark pathes
        https://bugs.webkit.org/show_bug.cgi?id=151784

        Reviewed by Filip Pizlo.

        `Pathname.new(nil)` will raise an error.
        Only generate Pathname if the benchmark path is specified.

        * Scripts/run-jsc-benchmarks:

2015-12-02  Brent Fulgham  <bfulgham@apple.com>

        [Win] Run non-http tests without Cygwin
        https://bugs.webkit.org/show_bug.cgi?id=151721

        Reviewed by Andy Estes.

        Support native 32-bit and 64-bit Python (and Perl) builds
        for running tests:

        1. Use "startswith('win')", rather than "== 'win32'" to support
        various Windows build types.
        2. Supply full path for some native Windows utilities, since the
        path environment does not always have the specified, and they are
        guaranteed to exist in those specific locations.
        3. Make sure native Windows Python test runs pass proper environment
        variables to run programs.
        4. Append 'exe' suffix when running Windows executables.
        5. Use the _winreg Python module on Windows, since the Cygwin 'regtool'
        command doesn't exist.
        
        * Scripts/update-webkit: Use Perl $^X command to refer to the path of
        the current Perl executable, rather than requiring a new path search.
        * Scripts/webkitpy/common/find_files_unittest.py:
        (TestWinNormalize.test_win): Use startswith('win').
        * Scripts/webkitpy/common/prettypatch_unittest.py:
        (test_pretty_diff_encodings): Ditto.
        * Scripts/webkitpy/common/system/executive.py:
        (Executive._should_close_fds): Ditto.
        (Executive.shell_command_for_script): Use startswith('win').
        (Executive.kill_process): Use full path to killall executable.
        (Executive.check_running_pid): Use startswith('win').
        (Executive.running_pids): Ditto.
        (Executive.kill_all): Ditto. Also use path to 'killall' executable when
        running under native Windows Python.
        (Executive._child_process_encoding): Use startswith('win').
        (Executive._should_encode_child_process_arguments): Ditto.
        (Executive.popen): Recognize proper script engine on Windows, since it
        does not support the shebang syntax.
        (Executive.run_in_parallel): Use startswith('win').
        * Scripts/webkitpy/common/system/executive_unittest.py:
        (never_ending_command): Ditto.
        (ExecutiveTest.test_run_command_with_unicode): Ditto.
        (ExecutiveTest.serial_test_kill_process): Ditto.
        (ExecutiveTest.serial_test_kill_all): Ditto.
        (ExecutiveTest.serial_test_check_running_pid): Ditto.
        (ExecutiveTest.serial_test_run_in_parallel): Ditto.
        (main): Ditto.
        * Scripts/webkitpy/common/system/file_lock.py:
        (FileLock._create_lock): Ditto.
        (FileLock._remove_lock): Ditto.
        * Scripts/webkitpy/common/system/filesystem_unittest.py:
        (RealFileSystemTest.test_chdir): Ditto.
        (RealFileSystemTest.test_chdir__notexists): Ditto.
        (RealFileSystemTest.test_maybe_make_directory__failure): Ditto.
        * Scripts/webkitpy/common/system/path_unittest.py:
        (AbspathTest.test_abspath_to_uri_win): Ditto.
        * Scripts/webkitpy/common/system/platforminfo.py:
        (PlatformInfo._determine_os_name): Ditto.
        * Scripts/webkitpy/common/system/user.py: Ditto.
        * Scripts/webkitpy/layout_tests/controllers/manager_unittest.py:
        (ManagerTest.integration_test_needs_servers): Ditto.
        * Scripts/webkitpy/layout_tests/servers/apache_http_server.py:
        (LayoutTestApacheHttpd.__init__): Handle upper and lower-case
        driver letters.
        (LayoutTestApacheHttpd._get_apache_config_file_path): Ditto.
        * Scripts/webkitpy/layout_tests/servers/apache_http_server_unittest.py:
        (TestLayoutTestApacheHttpd.test_start_cmd): Ditto.
        * Scripts/webkitpy/layout_tests/servers/http_server_base.py:
        (HttpServerBase._check_that_all_ports_are_available): Ditto.
        * Scripts/webkitpy/layout_tests/servers/http_server_unittest.py:
        (TestHttpServer.test_start_cmd): Ditto.
        * Scripts/webkitpy/port/base.py:
        (Port.to.setup_environ_for_server): Include 'COMSPEC', 'SYSTEMDRIVE',
        and 'SYSTEMROOT' in environment passed to test runners.
        (Port._apache_config_file_name_for_platform): Use startswith('win').
        (Port._build_path): Ditto.
        (Port._path_to_driver): Include 'exe' suffix when running under native
        Windows.
        * Scripts/webkitpy/port/driver.py:
        (Driver._setup_environ_for_driver): Explicitly make some environment
        variables strings.
        * Scripts/webkitpy/port/server_process.py:
        (ServerProcess.__init__): Use startswith('win').
        * Scripts/webkitpy/port/win.py:
        (WinPort): Use the win32 registry utilities on Windows, and appropriate
        registry key formats.
        (WinPort._ntsd_location): Revise tool search paths for Windows 10.
        (WinPort.read_registry_value): Revise to use _winreg library on Windows,
        and regtool on Cygwin.
        (WinPort.write_registry_value): Ditto.
        (WinPort.setup_crash_log_saving): Ditto.
        (WinPort.restore_crash_log_saving): Ditto.
        (WinPort.prevent_error_dialogs): Ditto.
        (WinPort.allow_error_dialogs): Ditto.
        (WinPort.find_system_pid): Revise to use Windows management
        infrastructure on native Windows, continue using 'ps' on Cygwin.
        (WinPort.read_registry_string): Deleted.
        (WinPort.write_registry_string): Deleted.
        * Scripts/webkitpy/test/main.py:
        (main): Use startswith('win').
        (Tester._parse_args): Ditto.

2015-12-01  Yusuke Suzuki  <utatane.tea@gmail.com>

        [ES6] Implement LLInt/Baseline Support for ES6 Generators and enable this feature
        https://bugs.webkit.org/show_bug.cgi?id=150792

        Reviewed by Saam Barati.

        * Scripts/webkitperl/FeatureList.pm:

2015-12-01  Commit Queue  <commit-queue@webkit.org>

        Unreviewed, rolling out r192914.
        https://bugs.webkit.org/show_bug.cgi?id=151734

        JSC tests for this change are failing on 32 and 64-bit bots
        (Requested by ryanhaddad on #webkit).

        Reverted changeset:

        "[ES6] Implement LLInt/Baseline Support for ES6 Generators and
        enable this feature"
        https://bugs.webkit.org/show_bug.cgi?id=150792
        http://trac.webkit.org/changeset/192914

2015-12-01  David Kilzer  <ddkilzer@apple.com>

        EventSenderProxy::swipeGestureWithWheelAndMomentumPhases() leaks an EventSenderSyntheticEvent
        <http://webkit.org/b/151726>

        Reviewed by Simon Fraser.

        * WebKitTestRunner/mac/EventSenderProxy.mm:
        (WTR::EventSenderProxy::swipeGestureWithWheelAndMomentumPhases):
        Deploy RetainPtr<EventSenderSyntheticEvent> to fix leak.

2015-12-01  Myles C. Maxfield  <mmaxfield@apple.com>

        Give String and AtomicString an existingHash() function
        https://bugs.webkit.org/show_bug.cgi?id=151717

        Reviewed by Andreas Kling.

        * TestWebKitAPI/Tests/WTF/AtomicString.cpp:
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/WTF/WTFString.cpp:
        (TestWebKitAPI::TEST):

2015-12-01  Yusuke Suzuki  <utatane.tea@gmail.com>

        [ES6] Implement LLInt/Baseline Support for ES6 Generators and enable this feature
        https://bugs.webkit.org/show_bug.cgi?id=150792

        Reviewed by Saam Barati.

        * Scripts/webkitperl/FeatureList.pm:

2015-12-01  Sam Weinig  <sam@webkit.org>

        Need completionHandler-based WebKit C SPI for alert, confirm, and prompt
        <rdar://problem/23320863>
        https://bugs.webkit.org/show_bug.cgi?id=151708

        Reviewed by Anders Carlsson.

        * WebKitTestRunner/TestController.cpp:
        (WTR::TestController::createOtherPage):
        (WTR::TestController::createWebViewWithOptions):
        Update for new WKPageUIClient.

2015-12-01  Anders Carlsson  <andersca@apple.com>

        Remove WebKit2.framework
        https://bugs.webkit.org/show_bug.cgi?id=151715

        Reviewed by Dan Bernstein.

        * TestWebKitAPI/Tests/WebKit2/StopLoadingDuringDidFailProvisionalLoad.cpp:
        * TestWebKitAPI/Tests/WebKit2/StopLoadingDuringDidFailProvisionalLoad_bundle.cpp:
        * TestWebKitAPI/Tests/WebKit2ObjC/CustomProtocolsInvalidScheme.mm:
        * TestWebKitAPI/Tests/WebKit2ObjC/CustomProtocolsTest.mm:
        * TestWebKitAPI/Tests/WebKit2ObjC/PreventImageLoadWithAutoResizing.mm:
        * TestWebKitAPI/Tests/WebKit2ObjC/UserContentTest.mm:
        * TestWebKitAPI/mac/TestBrowsingContextLoadDelegate.h:

2015-12-01  Joseph Pecoraro  <pecoraro@apple.com>

        Unreviewed common typo fix "occurance" => "occurrence".

        * Scripts/webkitpy/tool/commands/queries.py:
        (FindFlakyTests._print_statistics):

2015-11-30  Alex Christensen  <achristensen@webkit.org>

        Make ProcessModel always MultipleSecondaryProcesses
        https://bugs.webkit.org/show_bug.cgi?id=151662

        Reviewed by Antti Koivisto.

        * TestWebKitAPI/Tests/WebKit2/Geolocation.cpp:
        (TestWebKitAPI::TEST):
        * WebKitTestRunner/TestController.cpp:
        (WTR::TestController::generatePageConfiguration):

2015-11-30  Alex Christensen  <achristensen@webkit.org>

        Make usesNetworkProcess always true
        https://bugs.webkit.org/show_bug.cgi?id=151580

        Reviewed by Darin Adler.

        * TestWebKitAPI/Tests/WebKit2/Geolocation.cpp:
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/WebKit2/mac/GetPIDAfterAbortedProcessLaunch.cpp:
        (TestWebKitAPI::TEST):
        * WebKitTestRunner/TestController.cpp:
        (WTR::TestController::generatePageConfiguration):

2015-11-30  Carlos Garcia Campos  <cgarcia@igalia.com>

        Unreviewed. Skip GTK+ test /webkit2/WebKitWebView/editable/editable in Debug.

        Add a way to skip unit tests only for Debug or Release builds and
        skipt the test /webkit2/WebKitWebView/editable/editable only for Debug.

        * Scripts/run-gtk-tests:
        (SkippedTest):
        (SkippedTest.__init__):
        (SkippedTest.__str__):
        (SkippedTest.skip_entire_suite):
        (SkippedTest.skip_for_build_type):
        (TestRunner):
        (TestRunner.__init__):

2015-11-30  Carlos Garcia Campos  <cgarcia@igalia.com>

        Unreviewed. Fix a crash in GTK+ test /webkit2/WebKitWebView/custom-charset.

        It's an assert hit because we are reloading a view loaded with
        HTML data which is not supported. Use loadURI instead.

        * TestWebKitAPI/Tests/WebKit2Gtk/TestWebKitWebView.cpp:
        (testWebViewCustomCharset):

2015-11-30  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GLIB] Remove GMainLoopSource and GThreadSafeMainLoopSource
        https://bugs.webkit.org/show_bug.cgi?id=151633

        Reviewed by Csaba Osztrogonác.

        * TestWebKitAPI/PlatformGTK.cmake:
        * TestWebKitAPI/Tests/WTF/glib/GMainLoopSource.cpp: Removed.

2015-11-27  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] Remove the remaining uses of GMainLoopSource
        https://bugs.webkit.org/show_bug.cgi?id=151632

        Reviewed by Žan Doberšek.

        * TestWebKitAPI/Tests/WebKit2Gtk/TestResources.cpp:
        (testWebViewSyncRequestOnMaxConns):
        * TestWebKitAPI/gtk/WebKit2Gtk/WebViewTest.cpp:
        * WebKitTestRunner/InjectedBundle/TestRunner.cpp:
        (WTR::TestRunner::TestRunner):
        * WebKitTestRunner/InjectedBundle/TestRunner.h:
        * WebKitTestRunner/InjectedBundle/gtk/TestRunnerGtk.cpp:
        (WTR::TestRunner::invalidateWaitToDumpWatchdogTimer):
        (WTR::TestRunner::initializeWaitToDumpWatchdogTimerIfNeeded):
        * WebKitTestRunner/gtk/TestControllerGtk.cpp:
        (WTR::timeoutSource):
        (WTR::TestController::notifyDone):
        (WTR::TestController::platformRunUntil):

2015-11-27  Csaba Osztrogonác  <ossy@webkit.org>

        [cmake] Add testb3 to the build system
        https://bugs.webkit.org/show_bug.cgi?id=151619

        Reviewed by Gyuyoung Kim.

        * Scripts/build-jsc:

2015-11-27  Csaba Osztrogonác  <ossy@webkit.org>

        [jhbuild] Fix pixman build with clang
        https://bugs.webkit.org/show_bug.cgi?id=151441

        Reviewed by Carlos Garcia Campos.

        * efl/jhbuild.modules:
        * gtk/jhbuild.modules:

2015-11-26  David Kilzer  <ddkilzer@apple.com>

        Extract prependToEnvironmentVariableList
        <http://webkit.org/b/151536>

        Reviewed by Daniel Bates.

        Tests: webkitdirs_unittest/appendToEnvironmentVariableList.pl
               webkitdirs_unittest/prependToEnvironmentVariableList.pl

        * Scripts/webkitdirs.pm: Export appendToEnvironmentVariableList
        and prependToEnvironmentVariableList.
        (appendToEnvironmentVariableList): Simplify variable name.
        Switch to use $Config{path_sep}.
        (prependToEnvironmentVariableList): Add new method.
        (setupMacWebKitEnvironment): Switch to use
        prependToEnvironmentVariableList().
        (setupIOSWebKitEnvironment): Ditto.

        * Scripts/webkitperl/webkitdirs_unittest/appendToEnvironmentVariableList.pl: Added.
        * Scripts/webkitperl/webkitdirs_unittest/prependToEnvironmentVariableList.pl: Added.

2015-11-24  Gyuyoung Kim  <gyuyoung.kim@webkit.org>

        REGRESSION(r192053): MiniBrowser doesn't exit when clicking on the close-window button
        https://bugs.webkit.org/show_bug.cgi?id=151567

        Reviewed by Darin Adler.

        * MiniBrowser/efl/main.c: Call window_close() instead of ewk_view_try_close().
        (on_window_deletion):

2015-11-23  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] Use the network process unconditionally
        https://bugs.webkit.org/show_bug.cgi?id=151541

        Reviewed by Alex Christensen.

        Fix TestInspectorServer test. Do not assume we already have the
        title we want when the page has been loaded, since the title is
        changed afterwards. So, check if the title has already been set,
        and if not wait for it.

        * TestWebKitAPI/Tests/WebKit2Gtk/TestInspectorServer.cpp:
        (openRemoteDebuggingSession):

2015-11-23  Alex Christensen  <achristensen@webkit.org>

        Fix crash in ~WebProcessPool when using Geolocation with useNetworkProcess=true
        https://bugs.webkit.org/show_bug.cgi?id=151532

        Reviewed by Benjamin Poulain.

        * TestWebKitAPI/Tests/WebKit2/Geolocation.cpp:
        (TestWebKitAPI::GeolocationTransitionToHighAccuracyStateTracker::eventsChanged):
        (TestWebKitAPI::TEST):
        (TestWebKitAPI::GeolocationTransitionToLowAccuracyStateTracker::eventsChanged):
        (TestWebKitAPI::GeolocationTransitionToHighAccuracyStateTracker::GeolocationTransitionToHighAccuracyStateTracker): Deleted.
        (TestWebKitAPI::GeolocationTransitionToLowAccuracyStateTracker::GeolocationTransitionToLowAccuracyStateTracker): Deleted.
        Properly load about:blank in all WebViews to clean up.  Without this change, we had a 
        Geolocation provider stopping after its state tracker was destroyed with its stack frame,
        so it was calling a function on a test object that had gone out of scope.
        Also, call WKContextSetUsesNetworkProcess(context, true) to show what crash this fixed,
        but that will become the default soon and that call will be removed.

2015-11-22  David Kilzer  <ddkilzer@apple.com>

        run-webkit-tests: http server for imported W3C tests doesn't work with --layout-tests-directory switch
        <http://webkit.org/b/151542>

        Reviewed by Daniel Bates.

        * Scripts/webkitpy/layout_tests/servers/web_platform_test_server.py:
        (base_url): Use the Port object (already passed in) to give us
        the path to the LayoutTests directory, which already checks for a
        --layout-tests-directory command-line switch.
        (WebPlatformTestServer.__init__): Remove layout_test_results_dir
        argument since we can get this from the Port object already
        passed in via Port.results_directory().  Also switch to use
        Port.layout_tests_dir() to get the LayoutTests directory.

        * Scripts/webkitpy/layout_tests/servers/web_platform_test_server_unittest.py:
        (TestWebPlatformTestServer.test_custom_layout_tests_directory):
        Add test case for custom LayoutTests directory.
        (TestWebPlatformTestServer.test_previously_spawned_instance):
        Update Port object to set mock results directory as if it was
        set on the command-line.  Remove unneeded argument from
        WebPlatformTestServer constructor.
        (TestWebPlatformTestServer.test_corrupted_subserver_files): Ditto.

        * Scripts/webkitpy/port/base.py:
        (Port.to.start_web_platform_test_server): Remove unneeded
        argument from WebPlatformTestServer constuctor.

2015-11-22  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] Some unit tests fail when using the network process
        https://bugs.webkit.org/show_bug.cgi?id=151490

        Reviewed by Martin Robinson.

        Run the soup server in a separate thread in TestResources test to
        avoid deadlocks.

        This fixes /webkit2/WebKitWebView/sync-request-on-max-conns and
        /webkit2/WebKitWebResource/get-data when using the network process.

        * TestWebKitAPI/Tests/WebKit2Gtk/TestResources.cpp:
        (beforeAll): Create the WebKitTestServer with ServerRunInThread flag.
        * TestWebKitAPI/gtk/WebKit2Gtk/WebKitTestServer.cpp:
        (WebKitTestServer::WebKitTestServer): When ServerRunInThread is
        present, create a WorkQueue to run the server.
        (WebKitTestServer::run): Run the server in the work queue if it
        has been created.
        * TestWebKitAPI/gtk/WebKit2Gtk/WebKitTestServer.h: Convert server
        type into server options as flags.

2015-11-22  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] ImageDiff should normalize the diff image
        https://bugs.webkit.org/show_bug.cgi?id=151261

        Reviewed by Sergio Villar Senin.

        * ImageDiff/gtk/ImageDiff.cpp:
        (readPixbufFromStdin): Fix memory leak.
        (differenceImageFromDifferenceBuffer): Normalize diff buffer.
        (calculateDifference): Pass max distance to differenceImageFromDifferenceBuffer.

== Rolled over to ChangeLog-2015-11-21 ==
