2014-02-20  Dean Jackson  <dino@apple.com>

        Add an unresolved WebGLPolicy and an API to resolve it
        https://bugs.webkit.org/show_bug.cgi?id=129109

        Reviewed by Anders Carlsson.

        Add a new entry for resolveWebGLLoadPolicy.

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

2014-02-19  Gustavo Noronha Silva  <gustavo.noronha@collabora.com>

        [GTK] Add new ARM build slave for GTK+
        https://bugs.webkit.org/show_bug.cgi?id=128978

        Reviewed by Brent Fulgham.

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

2014-02-19  Zan Dobersek  <zdobersek@igalia.com>

        Remove the remaining Nix cruft under Tools
        https://bugs.webkit.org/show_bug.cgi?id=129003

        Reviewed by Csaba Osztrogonác.

        The Nix port was removed from the source tree so the remaining Nix-specific code
        in the utility scripts is not required anymore.

        * Scripts/run-nix-tests: Removed.
        * Scripts/update-webkitnix-libs: Removed.
        * Scripts/webkitpy/style/checker.py:
        * jhbuild/jhbuild-wrapper:
        (determine_platform):
        * nix/common.py: Removed.
        * nix/jhbuild.modules: Removed.
        * nix/jhbuildrc: Removed.

2014-02-18  Jinwoo Song  <jinwoo7.song@samsung.com>

        [EFL][MiniBrowser] Remove view_mode parameter in window_create()
        https://bugs.webkit.org/show_bug.cgi?id=128960

        Reviewed by Gyuyoung Kim.

        As view source code is removed in r164254, window_create() also should remove view_mode.

        * MiniBrowser/efl/main.c:
        (on_key_down):
        (on_window_create):
        (window_create):
        (elm_main):

2014-02-18  Diego Pino García  <dpino@igalia.com>

        [GTK] Minibrowser: Add shortcut to open Web Inspector
        https://bugs.webkit.org/show_bug.cgi?id=128813

        Reviewed by Anders Carlsson.

        Added shortcuts Ctrl+Shift+I and F12 for toggling Web Inspector.

        * MiniBrowser/gtk/BrowserWindow.c:
        (toggleWebInspector):
        (browser_window_init):

2014-02-18  Dan Bernstein  <mitz@apple.com>

        Stop using PLATFORM(MAC) except where it means “OS X but not iOS”
        https://bugs.webkit.org/show_bug.cgi?id=128952

        Reviewed by Anders Carlsson.

        * TestWebKitAPI/JavaScriptTest.h: Changed PLATFORM(MAC) to PLATFORM(COCOA) and changed to
        use OBJC_CLASS.
        * TestWebKitAPI/PlatformUtilities.h: Changed PLATFORM(MAC) to USE(FOUNDATION) and changed
        to use OBJC_CLASS.
        * TestWebKitAPI/Tests/WebKit2/SpacebarScrolling.cpp: Changed PLATFORM(MAC) to
        PLATFORM(COCOA).
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/WebKit2/WKPreferences.cpp:
        (TestWebKitAPI::TEST): Added expected default font-family values for iOS.
        * TestWebKitAPI/config.h: Changed PLATFORM(MAC) to PLATFORM(COCOA).
        * WebKitTestRunner/EventSenderProxy.h: Ditto.
        * WebKitTestRunner/InjectedBundle/AccessibilityController.cpp: Ditto.
        * WebKitTestRunner/InjectedBundle/AccessibilityController.h: Ditto.
        * WebKitTestRunner/InjectedBundle/AccessibilityTextMarker.cpp: Ditto.
        (WTR::AccessibilityTextMarker::platformTextMarker):
        * WebKitTestRunner/InjectedBundle/AccessibilityTextMarker.h: Ditto.
        * WebKitTestRunner/InjectedBundle/AccessibilityTextMarkerRange.cpp: Ditto.
        (WTR::AccessibilityTextMarkerRange::platformTextMarkerRange):
        * WebKitTestRunner/InjectedBundle/AccessibilityTextMarkerRange.h: Ditto.
        * WebKitTestRunner/InjectedBundle/AccessibilityUIElement.cpp: Ditto.
        * WebKitTestRunner/InjectedBundle/AccessibilityUIElement.h: Ditto.
        * WebKitTestRunner/InjectedBundle/InjectedBundlePage.cpp: Ditto.
        * WebKitTestRunner/InjectedBundle/TestRunner.h: Ditto.
        * WebKitTestRunner/PlatformWebView.h: Ditto.
        * WebKitTestRunner/TestController.cpp: Ditto.
        (WTR::TestController::resetStateToConsistentValues):
        (WTR::TestController::processDidCrash):
        * WebKitTestRunner/TestInvocation.cpp: Ditto.
        (WTR::updateThreadedScrollingForCurrentTest):
        (WTR::TestInvocation::dumpWebProcessUnresponsiveness):
        * WebKitTestRunner/cg/TestInvocationCG.cpp: Ditto.
        (WTR::computeMD5HashStringForContext):

2014-02-17  Dan Bernstein  <mitz@apple.com>

        Stop using PLATFORM(MAC) in DumpRenderTree except where it means “OS X but not iOS”
        https://bugs.webkit.org/show_bug.cgi?id=128950

        Reviewed by Anders Carlsson.

        Changed all PLATFORM(MAC) instances that were not excluding iOS to PLATFORM(COCOA).

        * DumpRenderTree/AccessibilityController.h:
        * DumpRenderTree/AccessibilityTextMarker.h:
        * DumpRenderTree/AccessibilityUIElement.cpp:
        * DumpRenderTree/AccessibilityUIElement.h:
        * DumpRenderTree/DumpRenderTree.h:
        * DumpRenderTree/cg/PixelDumpSupportCG.cpp:
        (computeMD5HashStringForBitmapContext):
        * DumpRenderTree/cg/PixelDumpSupportCG.h:
        (BitmapContext::~BitmapContext):
        * DumpRenderTree/config.h:

2014-02-17  Filip Pizlo  <fpizlo@apple.com>

        More ARM FTL glue
        https://bugs.webkit.org/show_bug.cgi?id=128948

        Reviewed by Sam Weinig.

        * Scripts/configure-llvm: Removed. This isn't really practical now that we require a separate build directory.
        * Scripts/copy-webkitlibraries-to-product-directory: Switch to using a separate build directory, and for setting a PATH before running LLVM's make.

2014-02-17  Brent Fulgham  <bfulgham@apple.com>

        [Win] There's another Windows SDK. Make sure we recognize it.
        https://bugs.webkit.org/show_bug.cgi?id=128932

        Reviewed by Tim Horton.

        * Scripts/webkitpy/port/win.py:
        (WinPort._ntsd_location):

2014-02-17  Ryosuke Niwa  <rniwa@webkit.org>

        webkitpy test fix on Mac after r164244.

        It's somewhat crazy that we're trying to run unittests for Windows on Mac but whatever.

        * Scripts/webkitpy/port/win.py:
        (WinPort._ntsd_location):

2014-02-17  Brent Fulgham  <bfulgham@apple.com>

        [Win] Fall back to Windows symbol servers when necessary
        https://bugs.webkit.org/show_bug.cgi?id=128926

        Reviewed by Ryosuke Niwa.

        * Scripts/webkitpy/port/win.py:
        (WinPort):
        (setup_crash_log_saving): Fall back to Microsoft Symbol Server when local symbols are
        not specified.

2014-02-17  László Langó  <llango.u-szeged@partner.samsung.com>

        Fix typos in Tools/efl/jhbuild.modules.
        https://bugs.webkit.org/show_bug.cgi?id=128908

        Reviewed by Csaba Osztrogonác.

        * efl/jhbuild.modules: 's/<deb /<dep /g'

2014-02-15  Ryuan Choi  <ryuan.choi@samsung.com>

        Build break when disabled ACCESSIBILITY since r162986
        https://bugs.webkit.org/show_bug.cgi?id=128880

        Unreviewed build fix.

        * WebKitTestRunner/InjectedBundle/AccessibilityUIElement.cpp:
        Added dummy implementations for newly added methods.
        (WTR::AccessibilityUIElement::rowHeaders):
        (WTR::AccessibilityUIElement::columnHeaders):
        (WTR::AccessibilityUIElement::ariaControlsElementAtIndex):

2014-02-15  Filip Pizlo  <fpizlo@apple.com>

        Vector with inline capacity should work with non-PODs
        https://bugs.webkit.org/show_bug.cgi?id=128864

        Reviewed by Michael Saboff.
        
        This test experiences really bizarre behavior on trunk without the rest of
        this fix. On my machine, it usually times out because it gets itself into an
        infinite loop of some kind. With the fix, it passes.

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

2014-02-15  Ryuan Choi  <ryuan.choi@samsung.com>

        [EFL][WK1] Do not include cairo header in the public headers
        https://bugs.webkit.org/show_bug.cgi?id=128779

        Reviewed by Gyuyoung Kim.

        * DumpRenderTree/PlatformEfl.cmake:
        * DumpRenderTree/efl/PixelDumpSupportEfl.cpp:
        (createBitmapContextFromWebView):
        Used ewk_view_screenshot_contents_get instead of ewk_view_paint.
        * EWebLauncher/main.c:
        (print_history): Replaced ewk_history_item_icon_surface_get to ewk_history_item_icon_object_add
        (on_key_down):
        * Scripts/webkitpy/style/checker.py:
        Added -runtime/ctype_function for EWebLauncher because EWebLauncher is sample
        and it does not use WTF.

2014-02-15  Samuel White  <samuel_white@apple.com>

        AX: Add ability to specify descendant type when using AXUIElementsForSearchPredicate.
        https://bugs.webkit.org/show_bug.cgi?id=128747

        Reviewed by Chris Fleizach.

        Updated uiElementCountForSearchPredicate and uiElementForSearchPredicate test methods to support 'immediate descendant only' searching.

        * DumpRenderTree/AccessibilityUIElement.cpp:
        (uiElementCountForSearchPredicateCallback):
        (uiElementForSearchPredicateCallback):
        * DumpRenderTree/AccessibilityUIElement.h:
        * DumpRenderTree/atk/AccessibilityUIElementAtk.cpp:
        (AccessibilityUIElement::uiElementCountForSearchPredicate):
        (AccessibilityUIElement::uiElementForSearchPredicate):
        * DumpRenderTree/ios/AccessibilityUIElementIOS.mm:
        (AccessibilityUIElement::uiElementCountForSearchPredicate):
        (AccessibilityUIElement::uiElementForSearchPredicate):
        * DumpRenderTree/mac/AccessibilityUIElementMac.mm:
        (searchPredicateParameterizedAttributeForSearchCriteria):
        (AccessibilityUIElement::uiElementCountForSearchPredicate):
        (AccessibilityUIElement::uiElementForSearchPredicate):
        * DumpRenderTree/win/AccessibilityUIElementWin.cpp:
        (AccessibilityUIElement::uiElementCountForSearchPredicate):
        (AccessibilityUIElement::uiElementForSearchPredicate):
        * WebKitTestRunner/InjectedBundle/AccessibilityUIElement.cpp:
        (WTR::AccessibilityUIElement::uiElementCountForSearchPredicate):
        (WTR::AccessibilityUIElement::uiElementForSearchPredicate):
        * WebKitTestRunner/InjectedBundle/AccessibilityUIElement.h:
        * WebKitTestRunner/InjectedBundle/Bindings/AccessibilityUIElement.idl:
        * WebKitTestRunner/InjectedBundle/atk/AccessibilityUIElementAtk.cpp:
        (WTR::AccessibilityUIElement::uiElementCountForSearchPredicate):
        (WTR::AccessibilityUIElement::uiElementForSearchPredicate):
        * WebKitTestRunner/InjectedBundle/ios/AccessibilityUIElementIOS.mm:
        (WTR::AccessibilityUIElement::uiElementCountForSearchPredicate):
        (WTR::AccessibilityUIElement::uiElementForSearchPredicate):
        * WebKitTestRunner/InjectedBundle/mac/AccessibilityUIElementMac.mm:
        (WTR::searchPredicateParameterizedAttributeForSearchCriteria):
        (WTR::AccessibilityUIElement::uiElementCountForSearchPredicate):
        (WTR::AccessibilityUIElement::uiElementForSearchPredicate):

2014-02-15  Ryosuke Niwa  <rniwa@webkit.org>

        CQ fix after r164105.

        * DumpRenderTree/mac/EventSendingController.mm:
        * WebKitTestRunner/mac/EventSenderProxy.mm:

2014-02-14  Ryosuke Niwa  <rniwa@webkit.org>

        Another build fix after r164149.

        * Scripts/webkitpy/port/port_testcase.py:
        (test_apache_config_file_name_for_platform):

2014-02-14  Ryosuke Niwa  <rniwa@webkit.org>

        Build fix after r164148.

        * Scripts/webkitpy/port/base.py:
        (Port._apache_config_file_name_for_platform):

2014-02-14  Ryosuke Niwa  <rniwa@webkit.org>

        run-webkit-tests doesn't work with Apache 2.4
        https://bugs.webkit.org/show_bug.cgi?id=128861

        Reviewed by Andreas Kling.

        Use apache<version>-httpd.conf like we do on Fedora and Debian.

        * Scripts/webkitpy/port/base.py:
        (Port._apache_config_file_name_for_platform):

2014-02-14  Brent Fulgham  <bfulgham@apple.com>

        [Win] Make tests more consistent with Mac platform
        https://bugs.webkit.org/show_bug.cgi?id=128848

        Reviewed by Simon Fraser.

        * DumpRenderTree/win/DumpRenderTree.cpp:
        (resetDefaultsToConsistentValues): Turn CSS regions on,
        turn mock scrollbars on, and allow screen font
        substitution.

2014-02-14  Mark Hahnenberg  <mhahnenberg@apple.com>

        Save ARGV in a local to avoid repeated lookups

        Rubber stamped by Joseph Pecoraro.

        * jsc-cli/jsc-cli/CLIInstance.m:
        (-[CLIInstance didReceiveArguments:atOffset:withLength:]):

2014-02-14  Mark Hahnenberg  <mhahnenberg@apple.com>

        jsc-cli should allow scripts to access argv
        https://bugs.webkit.org/show_bug.cgi?id=127486

        Reviewed by Oliver Hunt.

        * jsc-cli/jsc-cli.xcodeproj/project.pbxproj:
        * jsc-cli/jsc-cli/CLIInstance.h:
        * jsc-cli/jsc-cli/CLIInstance.m:
        (-[CLIInstance init]):
        (-[CLIInstance loadFile:]):
        (-[CLIInstance didReceiveArguments:atOffset:withLength:]):
        * jsc-cli/jsc-cli/JSRunLoopThread.h:
        * jsc-cli/jsc-cli/JSRunLoopThread.m:
        (-[JSRunLoopThread initWithContext:]):
        (-[JSRunLoopThread loadFile:]):
        (-[JSRunLoopThread start]):
        * jsc-cli/jsc-cli/main.m:
        (printUsage):
        (main):

2014-02-14  Andreas Kling  <akling@apple.com>

        Purge remaining ENABLE(SHADOW_DOM) cruft.
        <https://webkit.org/b/128827>

        Reviewed by Antti Koivisto.

        * DumpRenderTree/gtk/DumpRenderTree.cpp:
        (resetDefaultsToConsistentValues):
        * Scripts/webkitperl/FeatureList.pm:
        * WebKitTestRunner/InjectedBundle/InjectedBundle.cpp:
        (WTR::InjectedBundle::beginTesting):

2014-02-13  Brent Fulgham  <bfulgham@apple.com>

        Create some latched scrolling tests.
        https://bugs.webkit.org/show_bug.cgi?id=127606
        <rdar://problem/15911348>

        Reviewed by Simon Fraser.

        * DumpRenderTree/mac/EventSendingController.mm:
        (+[EventSendingController isSelectorExcludedFromWebScript:]): Update to recognize
        the new "mouseScrollByX:andY:withWheel:andMomentumPhases:" selector.
        (+[EventSendingController webScriptNameForSelector:]): Ditto.
        (-[EventSendingController mouseScrollByX:andY:withWheel:andMomentumPhases:]): Implement
        the new wheel event sender.
        * WebKitTestRunner/EventSenderProxy.h:
        * WebKitTestRunner/InjectedBundle/Bindings/EventSendingController.idl: Add declaration
        of new mouseScrollByWithWheelAndMomentumPhases method.
        * WebKitTestRunner/InjectedBundle/EventSendingController.cpp:
        (WTR::EventSendingController::mouseScrollByWithWheelAndMomentumPhases): Added
        * WebKitTestRunner/InjectedBundle/EventSendingController.h:
        * WebKitTestRunner/InjectedBundle/ios/EventSenderProxyIOS.mm:
        (WTR::EventSenderProxy::mouseScrollByWithWheelAndMomentumPhases): Add stub for iOS.
        * WebKitTestRunner/TestController.cpp:
        (WTR::TestController::didReceiveMessageFromInjectedBundle): Handle the new
        mouseScrollByWithWheelAndMomentumPhases message.
        (WTR::TestController::didReceiveSynchronousMessageFromInjectedBundle): Handle the
        new mouseScrollByWithWheelAndMomentumPhases.
        * WebKitTestRunner/efl/EventSenderProxyEfl.cpp:
        (WTR::EventSenderProxy::mouseScrollByWithWheelAndMomentumPhases): Provide stub that
        relays to the standard mouse wheel handler.
        * WebKitTestRunner/gtk/EventSenderProxyGtk.cpp:
        (WTR::EventSenderProxy::mouseScrollByWithWheelAndMomentumPhases): Ditto.
        * WebKitTestRunner/mac/EventSenderProxy.mm:
        (WTR::EventSenderProxy::mouseScrollByWithWheelAndMomentumPhases): Provide implementation
        of mouse wheel gesture method.

2014-02-13  David Farler  <dfarler@apple.com>

        DumpRenderTree fails to build: Perl support module building for OS X but linking for the simulator
        https://bugs.webkit.org/show_bug.cgi?id=128780

        Reviewed by Simon Fraser.

        * DumpRenderTree/ios/PerlSupport/IPhoneSimulatorNotification/Makefile.PL:
        Use `xcrun -find clang` instead of `xcrun --sdk $ENV{SDKROOT} -find clang,
        which will pick up SDKROOT=iphonesimulator from building the Xcode aggregate target.

2014-02-13  Commit Queue  <commit-queue@webkit.org>

        Unreviewed, rolling out r164073 and r164080.
        http://trac.webkit.org/changeset/164073
        http://trac.webkit.org/changeset/164080
        https://bugs.webkit.org/show_bug.cgi?id=128781

        Broke Mac builds (Requested by rniwa on #webkit).

        * DumpRenderTree/mac/EventSendingController.mm:
        (+[EventSendingController isSelectorExcludedFromWebScript:]):
        (+[EventSendingController webScriptNameForSelector:]):
        * WebKitTestRunner/EventSenderProxy.h:
        * WebKitTestRunner/InjectedBundle/Bindings/EventSendingController.idl:
        * WebKitTestRunner/InjectedBundle/EventSendingController.cpp:
        * WebKitTestRunner/InjectedBundle/EventSendingController.h:
        * WebKitTestRunner/InjectedBundle/ios/EventSenderProxyIOS.mm:
        * WebKitTestRunner/TestController.cpp:
        (WTR::TestController::didReceiveMessageFromInjectedBundle):
        (WTR::TestController::didReceiveSynchronousMessageFromInjectedBundle):
        * WebKitTestRunner/efl/EventSenderProxyEfl.cpp:
        * WebKitTestRunner/gtk/EventSenderProxyGtk.cpp:
        * WebKitTestRunner/mac/EventSenderProxy.mm:

2014-02-13  Brent Fulgham  <bfulgham@apple.com>

        Unreviewed build fix for Mountain Lion.

        * DumpRenderTree/mac/EventSendingController.mm: Provide definition
        for kCGScrollWheelEventScrollPhase if it isn't found in the
        system headers.

2014-02-04  Gustavo Noronha Silva  <gns@gnome.org>

        [GTK][CMake] Generate GObject DOM bindings .symbols files
        https://bugs.webkit.org/show_bug.cgi?id=126210

        Reviewed by Martin Robinson.

        * gtk/check-gdom-symbols: Added. Checks symbols compatibility.
        (should_update_symbols_file):

2014-02-13  Brent Fulgham  <bfulgham@apple.com>

        Create some latched scrolling tests.
        https://bugs.webkit.org/show_bug.cgi?id=127606
        <rdar://problem/15911348>

        Reviewed by Simon Fraser.

        * DumpRenderTree/mac/EventSendingController.mm:
        (+[EventSendingController isSelectorExcludedFromWebScript:]): Update to recognize
        the new "mouseScrollByX:andY:withWheel:andMomentumPhases:" selector.
        (+[EventSendingController webScriptNameForSelector:]): Ditto.
        (-[EventSendingController mouseScrollByX:andY:withWheel:andMomentumPhases:]): Implement
        the new wheel event sender.
        * WebKitTestRunner/EventSenderProxy.h:
        * WebKitTestRunner/InjectedBundle/Bindings/EventSendingController.idl: Add declaration
        of new mouseScrollByWithWheelAndMomentumPhases method.
        * WebKitTestRunner/InjectedBundle/EventSendingController.cpp:
        (WTR::EventSendingController::mouseScrollByWithWheelAndMomentumPhases): Added
        * WebKitTestRunner/InjectedBundle/EventSendingController.h:
        * WebKitTestRunner/InjectedBundle/ios/EventSenderProxyIOS.mm:
        (WTR::EventSenderProxy::mouseScrollByWithWheelAndMomentumPhases): Add stub for iOS.
        * WebKitTestRunner/TestController.cpp:
        (WTR::TestController::didReceiveMessageFromInjectedBundle): Handle the new
        mouseScrollByWithWheelAndMomentumPhases message.
        (WTR::TestController::didReceiveSynchronousMessageFromInjectedBundle): Handle the
        new mouseScrollByWithWheelAndMomentumPhases.
        * WebKitTestRunner/efl/EventSenderProxyEfl.cpp:
        (WTR::EventSenderProxy::mouseScrollByWithWheelAndMomentumPhases): Provide stub that
        relays to the standard mouse wheel handler.
        * WebKitTestRunner/gtk/EventSenderProxyGtk.cpp:
        (WTR::EventSenderProxy::mouseScrollByWithWheelAndMomentumPhases): Ditto.
        * WebKitTestRunner/mac/EventSenderProxy.mm:
        (WTR::EventSenderProxy::mouseScrollByWithWheelAndMomentumPhases): Provide implementation
        of mouse wheel gesture method.

2014-02-13  Antoine Quint  <graouts@webkit.org>

        Unreviewed. changing my email address.

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

2014-02-13  Alexey Proskuryakov  <ap@apple.com>

        [Mac] Add a WebKit1 SPI to get WebCrypto master key from a client
        https://bugs.webkit.org/show_bug.cgi?id=128725

        Reviewed by Anders Carlsson.

        * DumpRenderTree/mac/UIDelegate.mm: (-[UIDelegate webCryptoMasterKeyForWebView:]):
        Use the SPI to specify a key.

2014-02-13  Sergio Villar Senin  <svillar@igalia.com>

        Unreviewed. Moved myself to the list of reviewers.

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

2014-02-13  Tim Horton  <timothy_horton@apple.com>

        Speculative build fix after r163998.

        * DumpRenderTree/ios/PerlSupport/Makefile:

2014-02-12  Alexey Proskuryakov  <ap@apple.com>

        [WK2] Add a C API to get WebCrypto master key from a client
        https://bugs.webkit.org/show_bug.cgi?id=128702

        Reviewed by Anders Carlsson.

        * WebKitTestRunner/TestController.cpp:
        (WTR::copyWebCryptoMasterKey):
        (WTR::TestController::initialize):
        Return a hardcoded key.

2014-02-12  David Farler  <dfarler@apple.com>

        Upstream iOS old-run-webkit-tests for use with DumpRenderTree in the iOS Simulator
        https://bugs.webkit.org/show_bug.cgi?id=127694

        Reviewed by Simon Fraser.

        This is a short-term effort to get layout tests working in the iOS simulator again.

        * DumpRenderTree/DumpRenderTree.xcodeproj/project.pbxproj:
        Pass PLATFORM_NAME to the makefile.
        * DumpRenderTree/ios/PerlSupport/Makefile:
        Cleanup.
        * Scripts/old-run-webkit-tests:
        Added functions and some exceptions for the simulator.
        (installAndLaunchDumpRenderTreeAppUsingNotification):
        (openIPhoneSimulator):
        (quitDumpRenderTreeAppUsingNotification):
        (quitIPhoneSimulator):
        (simulatorSessionUUID):
        (openDiffTool):
        (buildDumpTool):
        (openDumpTool):
        (closeDumpTool):
        (dumpToolDidCrash):
        (expectedDirectoryForTest):
        (buildPlatformResultHierarchy):
        * Scripts/webkitdirs.pm:
        Support functions for old-run-webkit-tests.
        (determineIPhoneSimulatorVersion):
        (iPhoneSimulatorVersion):

2014-02-12  Mark Hahnenberg  <mhahnenberg@apple.com>

        Basic framework for a modern jsc CLI
        https://bugs.webkit.org/show_bug.cgi?id=127435

        Rubber stamped by Geoffrey Garen.

        * Scripts/build-jsc:
        * jsc-cli: Added.
        * jsc-cli/jsc-cli: Added.
        * jsc-cli/jsc-cli.xcodeproj: Added.
        * jsc-cli/jsc-cli.xcodeproj/project.pbxproj: Added.
        * jsc-cli/jsc-cli/CLIInstance.h: Added.
        * jsc-cli/jsc-cli/CLIInstance.m: Added.
        (-[CLIInstance init]):
        (-[CLIInstance loadFile:]):
        (-[CLIInstance run]):
        * jsc-cli/jsc-cli/JSModule.h: Added.
        * jsc-cli/jsc-cli/JSModule.m: Added.
        (coreModules):
        (isCoreModule):
        (classForModule):
        (coreModuleFullPath):
        (resolveModuleAsFile):
        (resolveModuleAsDirectory):
        (nodeModulePaths):
        (resolveAsNodeModule):
        (+[JSModule resolve:atPath:]):
        (globalModuleCache):
        (isCached):
        (cachedModule):
        (cacheModule):
        (+[JSModule require:atPath:]):
        (+[JSModule require:atPath:inContext:]):
        (-[JSModule platformObjectInContext:]):
        (-[JSModule initWithId:filename:context:]):
        (-[JSModule dealloc]):
        (-[JSModule didStartLoading]):
        (-[JSModule didFinishLoading]):
        (-[JSModule require:]):
        (-[JSModule exports]):
        * jsc-cli/jsc-cli/JSRunLoopThread.h: Added.
        * jsc-cli/jsc-cli/JSRunLoopThread.m: Added.
        (jsThreadMain):
        (+[JSRunLoopThread threadMain]):
        (-[JSRunLoopThread initWithFiles:andContext:]):
        (-[JSRunLoopThread startRunLoop]):
        (-[JSRunLoopThread start]):
        (-[JSRunLoopThread join]):
        (-[JSRunLoopThread didReceiveInput:]):
        (-[JSRunLoopThread performCallback:withError:]):
        (-[JSRunLoopThread performCallback:withArguments:]):
        (-[JSRunLoopThread didFinishRunLoopInitialization]):
        * jsc-cli/jsc-cli/ReadEvalPrintLoop.h: Added.
        * jsc-cli/jsc-cli/ReadEvalPrintLoop.m: Added.
        (-[ReadEvalPrintLoop initWithJSThread:]):
        (prompt):
        (escapeStringForOutput):
        (-[ReadEvalPrintLoop processNextInput]):
        (-[ReadEvalPrintLoop run]):
        * jsc-cli/jsc-cli/RunLoopThread.h: Added.
        * jsc-cli/jsc-cli/RunLoopThread.m: Added.
        (+[RunLoopThread threadMain]):
        (-[RunLoopThread init]):
        (-[RunLoopThread dealloc]):
        (-[RunLoopThread didFinishRunLoopInitialization]):
        (-[RunLoopThread start]):
        (-[RunLoopThread join]):
        * jsc-cli/jsc-cli/ScriptInputSource.h: Added.
        * jsc-cli/jsc-cli/ScriptInputSource.m: Added.
        (scriptInputSourceScheduleRoutine):
        (scriptInputSourcePerformRoutine):
        (scriptInputSourceCancelRoutine):
        (-[ScriptInputSource initWithContext:]):
        (-[ScriptInputSource dealloc]):
        (-[ScriptInputSource addToCurrentRunLoop]):
        (-[ScriptInputSource removeFromRemoteRunLoop]):
        (-[ScriptInputSource didReceiveScript:]):
        (-[ScriptInputSource didReceiveSignal]):
        (-[ScriptInputSource runScriptRemotely:]):
        (-[ScriptInputSource finishAsyncCallback:withResult:]):
        * jsc-cli/jsc-cli/main.m: Added.
        (main):

2014-02-12  Ryosuke Niwa  <rniwa@webkit.org>

        One more build fix after r163979.

        * Scripts/webkitpy/port/mac_unittest.py:
        (test_baseline_search_path):

2014-02-12  Ryosuke Niwa  <rniwa@webkit.org>

        Add a mac-wk1 platform directory and TestExpectations file
        https://bugs.webkit.org/show_bug.cgi?id=128676

        Build fix. Put mac-wk1 between mac-mountainlion and mac.

        * Scripts/webkitpy/port/mac.py:
        (MacPort.default_baseline_search_path):
        * Scripts/webkitpy/tool/commands/rebaseline_unittest.py:
        (TestRebaselineTest.test_baseline_directory):

2014-02-12  Brady Eidson  <beidson@apple.com>

        Add a mac-wk1 platform directory and TestExpectations file
        https://bugs.webkit.org/show_bug.cgi?id=128676

        Reviewed by Alexey Proskuryakov.

        * Scripts/webkitpy/port/mac.py:
        (MacPort.default_baseline_search_path): When running WK1 tests on Mac,
          make mac-wk1 be the frontmost search path.

2014-02-11  Oliver Hunt  <oliver@apple.com>

        Make it possible to implement JS builtins in JS
        https://bugs.webkit.org/show_bug.cgi?id=127887

        Reviewed by Michael Saboff.

        CMake updates

        * DumpRenderTree/CMakeLists.txt:
        * WebKitTestRunner/CMakeLists.txt:
        * WinCELauncher/CMakeLists.txt:

2014-02-11  Filip Pizlo  <fpizlo@apple.com>

        It should be possible to force copy-webkitlibraries-blahblah to copy things regardless of timestamp
        https://bugs.webkit.org/show_bug.cgi?id=128646

        Reviewed by Mark Rowe.

        * Scripts/copy-webkitlibraries-to-product-directory:
        (unpackIfNecessary):
        (dittoHeaders):

2014-02-11  Brian Burg  <bburg@apple.com>

        Web Replay: upstream replay input code generator and EncodedValue class
        https://bugs.webkit.org/show_bug.cgi?id=128215

        Reviewed by Joseph Pecoraro.

        Add an executable script to launch the replay input generator tests.
        Add a test harness for running the code generator tests, mostly taken
        from the bindings test harness (but simplified).

        * Scripts/run-input-generator-tests: Added.
        (main):
        * Scripts/webkitpy/replay/__init__.py: Added.
        * Scripts/webkitpy/replay/main.py: Added.
        (InputGeneratorTests):
        (InputGeneratorTests.__init__):
        (InputGeneratorTests.generate_from_json):
        (InputGeneratorTests.write_error_file):
        (InputGeneratorTests.detect_changes):
        (InputGeneratorTests.run_tests):
        (InputGeneratorTests.main):

2014-02-11  James Craig  <jcraig@apple.com>

        Web Inspector: AX: Accessibility Node Inspection
        https://bugs.webkit.org/show_bug.cgi?id=127447

        Reviewed by Chris Fleizach.

        Resolving build failure caused by r163891.

        * WebKitTestRunner/InjectedBundle/ios/AccessibilityUIElementIOS.mm:
        (WTR::AccessibilityUIElement::computedRoleString):

2014-02-11  Alex Christensen  <achristensen@webkit.org>

        Fixed pointer truncation on Win64.
        https://bugs.webkit.org/show_bug.cgi?id=128211

        Reviewed by Brent Fulgham.

        * DumpRenderTree/win/AccessibilityControllerWin.cpp:
        (AccessibilityController::rootElement):
        * DumpRenderTree/win/TestRunnerWin.cpp:
        (TestRunner::setWindowIsKey):
        Removed all casts from &HWND to OLE_HANDLE*.

2014-02-11  Samuel White  <samuel_white@apple.com>

        AX: Add text replacement activity support to NSAccessibilitySelectTextWithCriteriaParameterizedAttribute.
        https://bugs.webkit.org/show_bug.cgi?id=128397

        Reviewed by Chris Fleizach.

        Updated testing methods to accept a replacement string. This enables us to test text
        replacement support for the AXSelectTextWithCriteria parameterized attribute.

        * DumpRenderTree/AccessibilityUIElement.cpp:
        (selectTextWithCriteriaCallback):
        * DumpRenderTree/AccessibilityUIElement.h:
        * DumpRenderTree/atk/AccessibilityUIElementAtk.cpp:
        (AccessibilityUIElement::selectTextWithCriteria):
        * DumpRenderTree/ios/AccessibilityUIElementIOS.mm:
        (AccessibilityUIElement::selectTextWithCriteria):
        * DumpRenderTree/mac/AccessibilityUIElementMac.mm:
        (selectTextParameterizedAttributeForCriteria):
        (AccessibilityUIElement::selectTextWithCriteria):
        * DumpRenderTree/win/AccessibilityUIElementWin.cpp:
        (AccessibilityUIElement::selectTextWithCriteria):
        * WebKitTestRunner/InjectedBundle/AccessibilityUIElement.cpp:
        (WTR::AccessibilityUIElement::selectTextWithCriteria):
        * WebKitTestRunner/InjectedBundle/AccessibilityUIElement.h:
        * WebKitTestRunner/InjectedBundle/Bindings/AccessibilityUIElement.idl:
        * WebKitTestRunner/InjectedBundle/atk/AccessibilityUIElementAtk.cpp:
        (WTR::AccessibilityUIElement::selectTextWithCriteria):
        * WebKitTestRunner/InjectedBundle/ios/AccessibilityUIElementIOS.mm:
        (WTR::AccessibilityUIElement::selectTextWithCriteria):
        * WebKitTestRunner/InjectedBundle/mac/AccessibilityUIElementMac.mm:
        (WTR::selectTextParameterizedAttributeForCriteria):
        (WTR::AccessibilityUIElement::selectTextWithCriteria):

2014-02-11  David Kilzer  <ddkilzer@apple.com>

        [ASan] Fix build failures in Tools due to missing $(inherited) values
        <http://webkit.org/b/128485>

        Reviewed by Dean Jackson.

        * DumpRenderTree/mac/Configurations/DumpRenderTree.xcconfig:
        - Move $(inherited) from OTHER_LDFLAGS_macosx to OTHER_LDFLAGS.

        * DumpRenderTree/mac/Configurations/ImageDiff.xcconfig:
        * DumpRenderTree/mac/Configurations/LayoutTestHelper.xcconfig:
        - Add $(inherited) to OTHER_LDFLAGS.

        * WebKitTestRunner/Configurations/InjectedBundle.xcconfig:
        * WebKitTestRunner/Configurations/WebKitTestRunner.xcconfig:
        - Add $(inherited) to OTHER_LDFLAGS, or move from
          OTHER_LDFLAGS_BASE to OTHER_LDFLAGS.
        - Extract $(OTHER_LDFLAGS_BASE) from platform-specific settings
          into OTHER_LDFLAGS.

2014-02-11  James Craig  <jcraig@apple.com>

        Web Inspector: AX: Accessibility Node Inspection
        https://bugs.webkit.org/show_bug.cgi?id=127447

        Reviewed by Timothy Hatcher.

        New computedRoleString interfaces in DumpRenderTree/WebKitTestRunner
        to support LayoutTest coverage of AccessibilityObject::computedRoleString()

        * DumpRenderTree/AccessibilityUIElement.cpp:
        * DumpRenderTree/AccessibilityUIElement.h:
        * DumpRenderTree/atk/AccessibilityUIElementAtk.cpp:
        * DumpRenderTree/ios/AccessibilityUIElementIOS.mm:
        * DumpRenderTree/mac/AccessibilityUIElementMac.mm:
        * DumpRenderTree/win/AccessibilityUIElementWin.cpp:
        * WebKitTestRunner/InjectedBundle/AccessibilityUIElement.cpp:
        * WebKitTestRunner/InjectedBundle/AccessibilityUIElement.h:
        * WebKitTestRunner/InjectedBundle/Bindings/AccessibilityUIElement.idl:
        * WebKitTestRunner/InjectedBundle/ios/AccessibilityUIElementIOS.mm:
        * WebKitTestRunner/InjectedBundle/mac/AccessibilityUIElementMac.mm:

2014-02-11  Carlos Garcia Campos  <cgarcia@igalia.com>

        Unreviewed. Fix /webkit2/WebKitWebExtension/isolated-world after r163797.

        Use a global variable for the script result.

        * TestWebKitAPI/Tests/WebKit2Gtk/TestWebExtensions.cpp:
        (scriptDialogCallback):
        (testWebExtensionIsolatedWorld):

2014-02-10  Filip Pizlo  <fpizlo@apple.com>

        Make it possible to run tests with --llvmSimpleOpt=false
        https://bugs.webkit.org/show_bug.cgi?id=128571

        Reviewed by Mark Lam.
        
        This also makes it so all run functions for the FTL are safe to call with FTL disabled,
        because they do their own $enableFTL check.

        * Scripts/run-jsc-stress-tests:

2014-02-10  Gavin Barraclough  <barraclough@apple.com>

        Remove WKPageSetVisibilityState
        https://bugs.webkit.org/show_bug.cgi?id=128551

        Reviewed by Anders Carlsson.

        * TestWebKitAPI/Tests/mac/PageVisibilityStateWithWindowChanges.mm:
        (TestWebKitAPI::PageVisibilityStateWithWindowChanges::initializeView):
        (TestWebKitAPI::PageVisibilityStateWithWindowChanges::runTest):
            - visibilityState of offs-creen WKView is automatically prerender.
        * WebKitTestRunner/InjectedBundle/InjectedBundle.cpp:
        (WTR::InjectedBundle::setHidden):
        * WebKitTestRunner/InjectedBundle/InjectedBundle.h:
        * WebKitTestRunner/InjectedBundle/TestRunner.cpp:
        (WTR::TestRunner::setPageVisibility):
        (WTR::TestRunner::resetPageVisibility):
        * WebKitTestRunner/TestController.cpp:
        * WebKitTestRunner/TestController.h:
        * WebKitTestRunner/TestInvocation.cpp:
        (WTR::TestInvocation::didReceiveMessageFromInjectedBundle):
            - removed calls to WKPageSetVisibilityState.

2014-02-10  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GLIB] Add GUniqueOutPtr and use it instead of GOwnPtr
        https://bugs.webkit.org/show_bug.cgi?id=127554

        Reviewed by Gustavo Noronha Silva.

        Use GUniqueOutPtr instead of GOwnPtr.

        * DumpRenderTree/gtk/DumpRenderTree.cpp:
        * DumpRenderTree/gtk/EventSender.cpp:
        (createKeyPressEvent):
        * TestWebKitAPI/Tests/WTF/gobject/GUniquePtr.cpp:
        (TestWebKitAPI::returnOutChar):
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/WebKit2Gtk/TestCookieManager.cpp:
        * TestWebKitAPI/Tests/WebKit2Gtk/TestInspectorServer.cpp:
        (testInspectorServerPageList):
        (openRemoteDebuggingSession):
        (sendIncompleteRequest):
        * TestWebKitAPI/Tests/WebKit2Gtk/TestResources.cpp:
        * TestWebKitAPI/Tests/WebKit2Gtk/TestWebExtensions.cpp:
        (testWebExtensionWindowObjectCleared):
        (testWebExtensionIsolatedWorld):
        * TestWebKitAPI/Tests/WebKit2Gtk/TestWebKitFaviconDatabase.cpp:
        * TestWebKitAPI/Tests/WebKit2Gtk/TestWebKitWebView.cpp:
        (testWebViewRunJavaScript):
        (testWebViewSave):
        (testWebViewPageVisibility):
        * TestWebKitAPI/Tests/WebKit2Gtk/TestWebKitWebViewGroup.cpp:
        (isStyleSheetInjectedForURLAtPath):
        * TestWebKitAPI/Tests/WebKit2Gtk/TestWebViewEditor.cpp:
        * TestWebKitAPI/Tests/WebKit2Gtk/WebExtensionTest.cpp:
        * TestWebKitAPI/Tests/WebKit2Gtk/WebProcessTest.cpp:
        * TestWebKitAPI/Tests/gtk/InputMethodFilter.cpp:
        (TestWebKitAPI::TestInputMethodFilter::sendKeyEventToFilter):
        * TestWebKitAPI/gtk/PlatformWebViewGtk.cpp:
        (TestWebKitAPI::doKeyStroke):
        * TestWebKitAPI/gtk/WebKit2Gtk/TestMain.h:
        * TestWebKitAPI/gtk/WebKit2Gtk/WebKitTestBus.cpp:
        (WebKitTestBus::run):
        * TestWebKitAPI/gtk/WebKit2Gtk/WebViewTest.cpp:
        (resourceGetDataCallback):
        (WebViewTest::keyStroke):
        (onSnapshotReady):
        * WebKitTestRunner/gtk/EventSenderProxyGtk.cpp:
        (WTR::EventSenderProxy::keyDown):

2014-02-10  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] Add API to create a webview related to another one
        https://bugs.webkit.org/show_bug.cgi?id=128498

        Reviewed by Gustavo Noronha Silva.

        * MiniBrowser/gtk/BrowserWindow.c:
        (webViewCreate): Use webkit_web_view_new_with_related_view() when
        creating a new web view for window.open().
        * TestWebKitAPI/Tests/WebKit2Gtk/TestMultiprocess.cpp:
        (testMultiprocessWebViewCreateReadyClose): Add test case to check
        that window.open() works when creating the new WebView related to
        the existing one, and that no new web process is spawned when
        using webkit_web_view_new_with_related_view().
        (beforeAll):

2014-02-10  Eva Balazsfalvi  <balazsfalvi.eva@stud.u-szeged.hu>

        If not running on Mac, build-webkit should not print Safari related output
        https://bugs.webkit.org/show_bug.cgi?id=127169

        Reviewed by Darin Adler.

        * Scripts/build-webkit:
        (writeCongrats):
        * Scripts/webkitdirs.pm:
        (isAppleWebKit):
        (isAppleMacWebKit):
        (isAppleWinWebKit):
        (launcherName):

2014-02-10  Diego Pino Garcia  <dpino@igalia.com>

        [GTK] Minibrowser: During text search, make navigation through list of matched words circular
        https://bugs.webkit.org/show_bug.cgi?id=128463

        Reviewed by Carlos Garcia Campos.

        Initialize search options to WEBKIT_FIND_OPTIONS_WRAP_AROUND to make navigation
        circular.

        * MiniBrowser/gtk/BrowserSearchBar.c:
        (doSearch):

2014-02-10  Tamas Gergely  <tgergely.u-szeged@partner.samsung.com>

        Code cleanup: Remove BUILDING_ON / TARGETING definitions.
        https://bugs.webkit.org/show_bug.cgi?id=128242

        Reviewed by Brent Fulgham.

        The BUILDING_ON_* and TARGETING_* macros have not been used for a while.
        According to the FIXME: they are removed.

        * DumpRenderTree/config.h:

2014-02-10  Zan Dobersek  <zdobersek@igalia.com>

        Fix a few mistakes that landed with r163749.

        Rubber-stamped by Carlos Garcia Campos.

        * WebKitTestRunner/gtk/EventSenderProxyGtk.cpp:
        (WTR::EventSenderProxy::addTouchPoint): Avoid using the GUniquePtr<GdkEvent> after it's been moved
        into the event vector since moving it invalidates the variable.

2014-02-09  Carlos Garnacho  <carlosg@gnome.org>

        [GTK] Fix modifiers on EventSenderProxy::keyDown
        https://bugs.webkit.org/show_bug.cgi?id=128496

        Reviewed by Carlos Garcia Campos.

        * WebKitTestRunner/gtk/EventSenderProxyGtk.cpp:
        (WTR::EventSenderProxy::keyDown): do not attempt to doubly transform modifiers
        into GTK+ ones.

2014-02-09  Carlos Garnacho  <carlosg@gnome.org>

        [GTK] Enable touch features
        https://bugs.webkit.org/show_bug.cgi?id=98931

        Reviewed by Carlos Garcia Campos.

        * WebKitTestRunner/EventSenderProxy.h:
        * WebKitTestRunner/gtk/EventSenderProxyGtk.cpp:
        (WTR::updateEventCoordinates):
        (WTR::EventSenderProxy::createTouchEvent):
        (WTR::EventSenderProxy::addTouchPoint):
        (WTR::EventSenderProxy::updateTouchPoint):
        (WTR::EventSenderProxy::sendUpdatedTouchEvents):
        (WTR::EventSenderProxy::setTouchPointRadius):
        (WTR::EventSenderProxy::setTouchModifier): Implement touch event proxying.

2014-02-08  Andreas Kling  <akling@apple.com>

        Let Instruments time profiler run until tests finish.
        <https://webkit.org/b/128488>

        Pass "-T 0" to iprofiler to ensure that we get a time profile of the
        entire performance test run instead of just the first 10 seconds.

        Reviewed by Brady Eidson.

        * Scripts/webkitpy/common/system/profiler.py:
        (IProfiler.attach_to_pid):

2014-02-08  Rajaram Gaunker  <zimbabao@gmail.com>

        [GTK] Add stdlib include file to fix ImageDiff build with libc++
        https://bugs.webkit.org/show_bug.cgi?id=128454

        Reviewed by Darin Adler.

        * ImageDiff/gtk/ImageDiff.cpp:

2014-02-08  Diego Pino Garcia  <dpino@igalia.com>

        [GTK] Minibrowser: Matched words of a searched text are not highlighted after reopening search bar
        https://bugs.webkit.org/show_bug.cgi?id=128380

        Reviewed by Carlos Garcia Campos.

        When open the search bar, perform last search if there is any.

        * MiniBrowser/gtk/BrowserSearchBar.c:
        (browser_search_bar_open):

2014-02-08  Adrian Perez de Castro  <aperez@igalia.com>

        [GTK] Make process model names properly meaningful
        https://bugs.webkit.org/show_bug.cgi?id=128389

        Reviewed by Carlos Garcia Campos.

        The name WEBKIT_PROCESS_MODEL_ONE_SECONDARY_PROCESS_PER_WEB_VIEW
        is misleading because there are situations in which web views may
        share the same web process even when multi-process mode is enabled;
        for example when opening a related view and both interact using JS.

        * MiniBrowser/gtk/main.c:
        (main):
        Update usage of WebKitProcessModel enum values.
        * TestWebKitAPI/Tests/WebKit2Gtk/TestMultiprocess.cpp:
        (beforeAll):
        Ditto.

2014-02-08  Diego Pino Garcia  <dpino@igalia.com>

        [GTK] build-webkit script always generate-gtk-doc even if '--disable-gtk-doc' param is passed
        https://bugs.webkit.org/show_bug.cgi?id=128376

        Reviewed by Carlos Garcia Campos.

        * Scripts/webkitdirs.pm:
        (buildAutotoolsProject):

2014-02-06  Filip Pizlo  <fpizlo@apple.com>

        More FTL build scaffolding
        https://bugs.webkit.org/show_bug.cgi?id=128330

        Reviewed by Geoffrey Garen.

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

2014-02-07  Tim Horton  <timothy_horton@apple.com>

        Touch Minibrowser for a hopeful build fix.

        * MiniBrowser/mac/WK2BrowserWindowController.m:

2014-02-07  Krzysztof Czech  <k.czech@samsung.com>

        Build fix after r163632

        Unreviewed EFL build fix

        Added empty stub to WKTR to not break EFL build.

        * WebKitTestRunner/InjectedBundle/atk/AccessibilityUIElementAtk.cpp:
        (WTR::AccessibilityUIElement::selectTextWithCriteria):

2014-02-07  Samuel White  <samuel_white@apple.com>

        AX: Find and select text with respect to insertion point using accessibility API.
        https://bugs.webkit.org/show_bug.cgi?id=128026

        Reviewed by Chris Fleizach.

        Added method to AccessibilityUIElement to enable testing of accessibility text selection.

        * DumpRenderTree/AccessibilityUIElement.cpp:
        (selectTextWithCriteriaCallback):
        (AccessibilityUIElement::getJSClass):
        * DumpRenderTree/AccessibilityUIElement.h:
        * DumpRenderTree/atk/AccessibilityUIElementAtk.cpp:
        (AccessibilityUIElement::selectTextWithCriteria):
        * DumpRenderTree/ios/AccessibilityUIElementIOS.mm:
        (AccessibilityUIElement::selectTextWithCriteria):
        * DumpRenderTree/mac/AccessibilityUIElementMac.mm:
        (selectTextParameterizedAttributeForCriteria):
        (AccessibilityUIElement::selectTextWithCriteria):
        * DumpRenderTree/win/AccessibilityUIElementWin.cpp:
        (AccessibilityUIElement::selectTextWithCriteria):
        * WebKitTestRunner/InjectedBundle/AccessibilityUIElement.cpp:
        (WTR::AccessibilityUIElement::selectTextWithCriteria):
        * WebKitTestRunner/InjectedBundle/AccessibilityUIElement.h:
        * WebKitTestRunner/InjectedBundle/Bindings/AccessibilityUIElement.idl:
        * WebKitTestRunner/InjectedBundle/ios/AccessibilityUIElementIOS.mm:
        (WTR::AccessibilityUIElement::uiElementCountForSearchPredicate):
        (WTR::AccessibilityUIElement::uiElementForSearchPredicate):
        (WTR::AccessibilityUIElement::selectTextWithCriteria):
        * WebKitTestRunner/InjectedBundle/mac/AccessibilityUIElementMac.mm:
        (WTR::selectTextParameterizedAttributeForCriteria):
        (WTR::AccessibilityUIElement::selectTextWithCriteria):

2014-02-07  Manuel Rego Casasnovas  <rego@igalia.com>

        [GTK] Disable gtk-doc in EWS
        https://bugs.webkit.org/show_bug.cgi?id=128370

        Reviewed by Carlos Garcia Campos.

        Disable gtk-doc generation in EWS due to http://webkit.org/b/128369.

        * Scripts/webkitpy/common/config/ports.py:
        (GtkPort.build_webkit_command): Add --disable-gtk-doc arg.
        (GtkWK2Port.build_webkit_command): Ditto.
        * Scripts/webkitpy/common/config/ports_unittest.py:
        (DeprecatedPortTest.test_gtk_port): Ditto.
        (DeprecatedPortTest.test_gtk_wk2_port): Ditto.

2014-02-07  Jinwoo Song  <jinwoo7.song@samsung.com>

        [EFL][WK2] WebView should be able to configure to set fixed layout
        https://bugs.webkit.org/show_bug.cgi?id=128300

        Reviewed by Gyuyoung Kim.

        * MiniBrowser/efl/main.c:
        (window_create):
        (elm_main): Add command argument option to use fixed layout.

2014-02-06  Ryosuke Niwa  <rniwa@webkit.org>

        Fix DoYouEvenBench after r163429.

        * Scripts/webkitpy/performance_tests/perftest.py:

2014-02-06  Jozsef Berta  <jberta.u-szeged@partner.samsung.com>

        Add support for multiple sources for AutoInstaller
        https://bugs.webkit.org/show_bug.cgi?id=124848

        Reviewed by Ryosuke Niwa.

        The autoinstaller in the webkitpy currently fails if the download source of a package is unavailable.
        This patch adds support for multiple sources to the script. The sources are provided in three environment variables.
        If it exists, the script will look at a local cache. If not, it will try to download the package from the original url.
        If it fails, it gets a mirror from the corresponding environment variable.(One for sourceforge.org and one for pypi.python.org)

        * Scripts/webkitpy/common/system/autoinstall.py:
        (AutoInstaller._copy_unpackaged_files_from_local_cache):  If the package is not packaged in its original form,
        this method will copy it to the scratch directory. Otherwise it would be deleted from the cache, which we do not want.
        (AutoInstaller._prepare_package): If the package is not zipped or tarred, and the file is in the cache, the
        _copy_unpackaged_files_from_local_cache function is called.
        (AutoInstaller._parse_colon_separated_mirrors_from_env): This will read the mirrors from the environment variables if possible,
        and prepares them for further use.
        (AutoInstaller):
        (AutoInstaller._replace_domain_with_next_mirror): If the original download url fails, it is replaced by a mirror provided
        in the environment variables. The function identifies the original source, and replaces it with a mirror. If it can't be done,
        the return url will be None, indicating that no mirrors are provided, or none of them could be reached.
        (AutoInstaller._download_to_stream): The timeout for one try is now limited to 30 seconds. Without this, the script waited for
        roughly 4 minutes before retrying. After three failiures the script will try to switch to a mirror.
        (AutoInstaller._check_package_in_local_autoinstall_cache): This method searches the cache for the currently downloaded module.
        If it's found there, its path is returned.
        (AutoInstaller._download):  Before downloading the module, it is looked up in the cache. If it's not found there,
        the script will continue with the download, and cache the module.

2014-02-06  Benjamin Poulain  <benjamin@webkit.org>

        Remove run-test-webkit-api
        https://bugs.webkit.org/show_bug.cgi?id=118145

        Reviewed by Csaba Osztrogonác.

        Having two scripts doing the same thing is confusing. There are also cases failing
        on run-test-webkit-api since it does not restart a new process for each test.

        * Scripts/run-test-webkit-api: Removed.
        * Scripts/webkitdirs.pm:

2014-02-06  Commit Queue  <commit-queue@webkit.org>

        Unreviewed, rolling out r163530.
        http://trac.webkit.org/changeset/163530
        https://bugs.webkit.org/show_bug.cgi?id=128311

        It broke run-gtk-tests (Requested by Ossy on #webkit).

        * efl/common.py: Copied from Tools/gtk/jhbuildrc.
        (script_path):
        (top_level_path):
        * efl/jhbuildrc:
        * gtk/common.py:
        (script_path):
        (top_level_path):
        * gtk/find-make-dist-errors:
        (get_missing_headers):
        * gtk/generate-gtkdoc:
        (get_webkit2_options):
        (get_webkit1_options.src_path):
        (get_webkit1_options):
        (get_webkitdom_options.src_path):
        (get_webkitdom_options):
        * gtk/generate-inspector-gresource-manifest.py:
        * gtk/jhbuildrc:
        * jhbuild/jhbuildrc_common.py: Removed.
        * nix/common.py: Copied from Tools/nix/jhbuildrc.
        (script_path):
        (top_level_path):
        * nix/jhbuildrc:

2014-02-06  Denis Nomiyama  <d.nomiyama@samsung.com>

        Unreviewed. Add myself as a committer.

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

2014-02-06  Peter Szanka  <h868064@stud.u-szeged.hu>

        Extract common parts from jhbuildrc files.
        https://bugs.webkit.org/show_bug.cgi?id=125986

        Reviewed by Csaba Osztrogonác.

        * efl/common.py: Removed.
        * efl/jhbuildrc:
        * gtk/common.py:
        (binary_build_path):
        * gtk/find-make-dist-errors:
        (get_missing_headers):
        * gtk/generate-gtkdoc:
        (get_webkit2_options):
        (get_webkit1_options.src_path):
        (get_webkit1_options):
        (get_webkitdom_options.src_path):
        (get_webkitdom_options):
        * gtk/generate-inspector-gresource-manifest.py:
        * gtk/jhbuildrc:
        * jhbuild/jhbuildrc_common.py: Added.
        (script_path):
        (top_level_path):
        (init):
        * nix/common.py: Removed.
        * nix/jhbuildrc:

2014-02-06  Csaba Osztrogonác  <ossy@webkit.org>

        Unreviewed fix after r163520, remove Andrei from committers list, because
        he is reviewer now, and webkit-patch doesn't like duplicated entries.

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

2014-02-06  Andrei Bucur  <abucur@adobe.com>

        Adding myself as a reviewer.

        Unreviewed.

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

2014-02-05  Zan Dobersek  <zdobersek@igalia.com>

        Remove the WTF_COMPILER_SUPPORTS_CXX_GENERALIZED_INITIALIZERS macro
        https://bugs.webkit.org/show_bug.cgi?id=128267

        Reviewed by Andreas Kling.

        Remove the COMPILER_SUPPORTS(CXX_GENERALIZED_INITIALIZERS) as the underlying macro is also
        being removed since the feature is supported by all the compilers the project approves.

        * TestWebKitAPI/Tests/WTF/HashMap.cpp:
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/WTF/Vector.cpp:
        (TestWebKitAPI::TEST):

2014-02-05  Jinwoo Song  <jinwoo7.song@samsung.com>

        [EFL][WK2] Remove legacy behavior mode in MiniBrowser
        https://bugs.webkit.org/show_bug.cgi?id=128298

        Reviewed by Gyuyoung Kim.

        MiniBrowser is crashing when the legacy mode is set in creating webview.
        As EFL application cannot use this API for creating webview after r146265,
        it would be better to remove this invalid option.

        * MiniBrowser/efl/main.c:
        (window_create): Do not create webview with WKViewCreate API.
        (elm_main): Remove 'legacy' option.

2014-02-05  Andreas Kling  <akling@apple.com>

        Remove ENABLE(DIRECTORY_UPLOAD).
        <https://webkit.org/b/128275>

        Rubber-stamped by Ryosuke Niwa.

        * Scripts/webkitperl/FeatureList.pm:

2014-02-05  Filip Pizlo  <fpizlo@apple.com>

        Rename useExperimentalFTL to useFTLJIT.

        Rubber stamped by Mark Hahnenberg.

        * Scripts/run-jsc-stress-tests:

2014-02-05  Filip Pizlo  <fpizlo@apple.com>

        JSC on Mac should pull LLVM from prefix=/usr/local/LLVMForJavaScriptCore and not /usr/local
        https://bugs.webkit.org/show_bug.cgi?id=128269

        Reviewed by Mark Hahnenberg.

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

2014-02-05  Manuel Rego Casasnovas  <rego@igalia.com>

        Create CSS Grid Layout watchlist
        https://bugs.webkit.org/show_bug.cgi?id=128241

        Reviewed by Andreas Kling.

        Add Sergio Villar, Javier Fernandez and myself to it.

        Add Javier Fernandez as contributor.

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

2014-02-05  Alexey Proskuryakov  <ap@apple.com>

        Copying failing test paths from build.webkit.org/dashboard popovers also copies non-selectable links
        https://bugs.webkit.org/show_bug.cgi?id=128236

        Reviewed by Timothy Hatcher.

        Work around bug 80159 - copying should always respect user-select:none, but it doesn't yet.

        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Scripts/BuildbotTesterQueueView.js:
        When copying, temporarily make non-selectable parts invisible, and put text of
        the selection onto pasteboard. Since we immediately make everything visible again,
        there is even no blinking.

2014-02-05  Nick Diego Yamane  <nick.yamane@openbossa.org>

        Unreviewed. Add myself to contributors.json

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

2014-02-05  Sergio Correia  <sergio.correia@openbossa.org>

        Unreviewed. Add myself to contributor and watch lists

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

2014-02-05  Alberto Garcia  <berto@igalia.com>

        Unreviewed. Add myself to some watchlists.

        * Scripts/webkitpy/common/config/watchlist:

2014-02-05  Gabor Rapcsanyi  <rgabor@webkit.org>

        Fix WaitForSVNServer build step after r163372.

        Rubber-stamped by Csaba Osztrogonác.

        * BuildSlaveSupport/build.webkit.org-config/master.cfg:
        (WaitForSVNServer.evaluateCommand): add missing return SUCCESS

2014-02-05  Csaba Osztrogonác  <ossy@webkit.org>

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

        Reviewed by Sam Weinig.

        * Scripts/webkitperl/FeatureList.pm:
        * TestWebKitAPI/GNUmakefile.am:

2014-02-04  Andreas Kling  <akling@apple.com>

        Remove <iframe seamless> support.
        <https://webkit.org/b/128213>

        Rubber-stamped by Antti Koivisto.

        * DumpRenderTree/efl/DumpRenderTreeChrome.cpp:
        (DumpRenderTreeChrome::resetDefaultsToConsistentValues):
        * DumpRenderTree/gtk/DumpRenderTree.cpp:
        (resetDefaultsToConsistentValues):
        * DumpRenderTree/mac/DumpRenderTree.mm:
        (resetWebPreferencesToConsistentValues):
        * DumpRenderTree/win/DumpRenderTree.cpp:
        (resetDefaultsToConsistentValues):
        * Scripts/webkitperl/FeatureList.pm:
        * WebKitTestRunner/InjectedBundle/InjectedBundle.cpp:
        (WTR::InjectedBundle::beginTesting):

2014-02-04  Filip Pizlo  <fpizlo@apple.com>

        Fix build when the script is called from Xcode.

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

2014-02-04  Filip Pizlo  <fpizlo@apple.com>

        DFG PutByVal on typed arrays should detect OutOfBounds sooner
        https://bugs.webkit.org/show_bug.cgi?id=128162

        Reviewed by Mark Hahnenberg.
        
        Add a defautNoEagerRun, which is intended to be used for convergence tests.

        * Scripts/run-jsc-stress-tests:

2014-02-04  Filip Pizlo  <fpizlo@apple.com>

        export-llvm-build should work with git checkouts
        https://bugs.webkit.org/show_bug.cgi?id=128217

        Reviewed by Mark Hahnenberg.
        
        If svn export fails, just do ditto.

        * Scripts/export-llvm-build:

2014-02-04  Carlos Garnacho  <carlosg@gnome.org>

        [Automake] Add missing $(feature_defines) when generating InjectedBundle bindings
        https://bugs.webkit.org/show_bug.cgi?id=128170

        Reviewed by Carlos Garcia Campos.

        * WebKitTestRunner/GNUmakefile.am: Add missing $(feature_defines) when
        generating the InjectedBundle bindings. So the various ENABLE_* defines
        are available there.

2014-02-04  Carlos Garnacho  <carlosg@gnome.org>

        [GTK] Ensure generated events have given modifiers GDK understands
        https://bugs.webkit.org/show_bug.cgi?id=128171

        Reviewed by Carlos Garcia Campos.

        * WebKitTestRunner/gtk/EventSenderProxyGtk.cpp:
        (WTR::webkitModifiersToGDKModifiers): Move around
        (WTR::EventSenderProxy::createMouseButtonEvent):
        (WTR::EventSenderProxy::keyDown): Use webkitModifiersToGDKModifiers to
        translate WKEventModifiers.

2014-02-04  Gabor Rapcsanyi  <rgabor@webkit.org>

        Fine tuning the ARM EFL bots
        https://bugs.webkit.org/show_bug.cgi?id=128168

        Reviewed by Csaba Osztrogonác.

        * BuildSlaveSupport/build.webkit.org-config/config.json: Add custom SVN mirror.
        * BuildSlaveSupport/build.webkit.org-config/master.cfg:
        (WaitForSVNServer): Make it not to halt before the first repository checkout.
        (WaitForSVNServer.evaluateCommand):
        (Factory.__init__): Disable kill-old-processes step on EFL ARM bots, because these
        bots run on the same machine and they kill the processes of each other.

2014-02-03  Ryosuke Niwa  <rniwa@webkit.org>

        kill-old-processes doesn't kill plugin processes
        https://bugs.webkit.org/show_bug.cgi?id=128138

        Reviewed by Andreas Kling.

        Add plugin process names to the list of processes to kill.

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

2014-02-03  Dean Jackson  <dino@apple.com>

        Feature flag for shape-inside
        https://bugs.webkit.org/show_bug.cgi?id=128001

        Reviewed by Simon Fraser.

        Add CSS_SHAPE_INSIDE flag, and -css-shape-inside build
        flag.

        * Scripts/webkitperl/FeatureList.pm:

2014-02-03  Zoltan Horvath  <zoltan@webkit.org>

        Unreviewed. Reorder my e-mail addresses in contributors.json,
        so bugzilla will auto complete my actual bugzilla username.

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

2014-02-03  Daniel Bates  <dabates@apple.com>

        WebKit Bot Watcher's Dashboard: Defer subsequent resource loads from access-restricted build bot when
        iteration fails to load with HTTP 401 status code
        https://bugs.webkit.org/show_bug.cgi?id=128077

        Reviewed by Alexey Proskuryakov.

        Similar to the fix for <https://bugs.webkit.org/show_bug.cgi?id=127849>, we should only prompt for
        the HTTP credentials of a build bot so long as an earlier authentication request wasn't cancelled
        (i.e. failed with an HTTP 401 Unauthorized status code). Currently an authentication dialog will be
        presented for an iteration each time the update queue timer fires until a person successfully
        authenticates. Instead we should update the authentication status of the build bot on receiving an
        HTTP 401 response code such that we defer subsequent requests to load any resource from the access-
        restricted build bot when the queue update timer fires.

        A person must explicitly click the "unauthorized" status line shown for the queue associated with the
        iteration in the dashboard and authenticate successfully for the iteration to be loaded once an
        authentication request for an iteration is cancelled.

        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Scripts/BuildbotIteration.js:
        (BuildbotIteration.prototype.update): Early return if the associated Buildbot was given invalid credentials.
        Also notify the associated Buildbot and update the queue view when a load failed with an HTTP 401 status code.
        (BuildbotIteration.prototype.loadLayoutTestResults): Ditto.
        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Scripts/BuildbotQueueView.js:
        (BuildbotQueueView): Modified to call BuildbotQueueView.prototype._unauthorizedAccess instead of
        QueueView.prototype._updateSoon when event BuildbotQueue.Event.UnauthorizedAccess is received.
        (BuildbotQueueView.prototype._unauthorizedAccess): Added.

2014-02-03  Daniel Bates  <dabates@apple.com>

        WebKit Bot Watcher's Dashboard: Teach JSON.load() to interpret third argument as either an
        option dictionary or a failure callback
        https://bugs.webkit.org/show_bug.cgi?id=128080

        Reviewed by Alexey Proskuryakov.

        Currently JSON.load() takes a failure callback function as its third argument and
        an option dictionary as its fourth argument. So, a caller that wants to ignore errors
        and pass an option dictionary must pass null or a reference to an empty function for
        the value of third argument. Instead, we should make the third argument polymorphic for
        convenience. Then a caller can either pass a failure callback function or an option dictionary.

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

2014-02-03  Krzysztof Czech  <k.czech@samsung.com>

        [ATK] Expose aria-controls through ATK_RELATION_CONTROLLER_FOR
        https://bugs.webkit.org/show_bug.cgi?id=127908

        Reviewed by Chris Fleizach.

        Updated AccessibilityUIElement both in WKTR and DRT so that aria-controls support could be tested properly.
        Added empty stubs to not break mac builds.

        * DumpRenderTree/AccessibilityUIElement.cpp:
        (ariaControlsElementAtIndexCallback):
        (AccessibilityUIElement::getJSClass):
        * DumpRenderTree/AccessibilityUIElement.h:
        * DumpRenderTree/atk/AccessibilityUIElementAtk.cpp:
        (accessibilityElementAtIndex):
        (AccessibilityUIElement::disclosedRowAtIndex):
        (AccessibilityUIElement::ariaOwnsElementAtIndex):
        (AccessibilityUIElement::ariaFlowToElementAtIndex):
        (AccessibilityUIElement::ariaControlsElementAtIndex):
        * DumpRenderTree/ios/AccessibilityUIElementIOS.mm:
        (AccessibilityUIElement::ariaControlsElementAtIndex):
        * DumpRenderTree/mac/AccessibilityUIElementMac.mm:
        (AccessibilityUIElement::ariaControlsElementAtIndex):
        * DumpRenderTree/win/AccessibilityUIElementWin.cpp:
        (AccessibilityUIElement::ariaControlsElementAtIndex):
        * WebKitTestRunner/InjectedBundle/AccessibilityUIElement.h:
        * WebKitTestRunner/InjectedBundle/Bindings/AccessibilityUIElement.idl:
        * WebKitTestRunner/InjectedBundle/atk/AccessibilityUIElementAtk.cpp:
        (WTR::accessibilityElementAtIndex):
        (WTR::AccessibilityUIElement::linkedUIElementAtIndex):
        (WTR::AccessibilityUIElement::ariaOwnsElementAtIndex):
        (WTR::AccessibilityUIElement::ariaFlowToElementAtIndex):
        (WTR::AccessibilityUIElement::ariaControlsElementAtIndex):
        * WebKitTestRunner/InjectedBundle/ios/AccessibilityUIElementIOS.mm:
        (WTR::AccessibilityUIElement::ariaControlsElementAtIndex):
        * WebKitTestRunner/InjectedBundle/mac/AccessibilityUIElementMac.mm:
        (WTR::AccessibilityUIElement::ariaControlsElementAtIndex):

2014-02-02  Daniel Bates  <dabates@apple.com>

        WebKit Bot Watcher's Dashboard: Access restricted queue should only prompt for HTTP credentials once per page load
        https://bugs.webkit.org/show_bug.cgi?id=127849

        I inadvertently used the equality operator instead of the identity operator when comparing the
        value of the error HTTP status code with the numeric literal 401.

        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Scripts/BuildbotQueue.js:
        (BuildbotQueue.prototype.update):

2014-02-02  Daniel Bates  <dabates@apple.com>

        Attempt to fix production dashboard after <http://trac.webkit.org/changeset/163222>

        Actually pass option dictionary to JSON.load(); JSON.load() takes four arguments with the
        last-most argument being the option dictionary.

        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Scripts/BuildbotIteration.js:
        (BuildbotIteration.prototype.update):

2014-02-01  Filip Pizlo  <fpizlo@apple.com>

        JSC profiler's stub info profiling support should work again
        https://bugs.webkit.org/show_bug.cgi?id=128057

        Reviewed by Mark Lam.

        * Scripts/display-profiler-output: Just make sure that there's always a space between the origin stack dump and the top bytecode index.

2014-02-01  Filip Pizlo  <fpizlo@apple.com>

        JSC profiler should show reasons for jettison
        https://bugs.webkit.org/show_bug.cgi?id=128047

        Reviewed by Geoffrey Garen.
        
        Gave the tool a "log" command, that tells you all of the interesting things
        that happened to a piece of bytecode, from the standpoint of optimization.
        It's a great summary view for seeing how our tier-up machinery works.
        
        This uses a lot of information that was already available, plus the newly
        added jettisonReason field.

        * Scripts/display-profiler-output:

2014-01-31  Ryosuke Niwa  <rniwa@webkit.org>

        Remove inline member functions of FrameSelection that access m_selection
        https://bugs.webkit.org/show_bug.cgi?id=127986

        Reviewed by Enrica Casucci.

        * TestWebKitAPI/Configurations/Base.xcconfig:

2014-01-31  Anders Carlsson  <andersca@apple.com>

        Another attempt at fixing the build.

        * TestWebKitAPI/Configurations/Base.xcconfig:

2014-01-31  Oliver Hunt  <oliver@apple.com>

        Rollout r163195 and related patches

        * DumpRenderTree/CMakeLists.txt:
        * WebKitTestRunner/CMakeLists.txt:
        * WinCELauncher/CMakeLists.txt:

2014-01-31  Daniel Bates  <dabates@apple.com>

        Attempt to fix Production Dashboard after <http://trac.webkit.org/changeset/163213>
        (https://bugs.webkit.org/show_bug.cgi?id=127849)

        Reviewed by David Farler.

        Pass credentials when querying build bot iteration. 

        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Scripts/BuildbotIteration.js:
        (BuildbotIteration.prototype.update):
        (BuildbotIteration.prototype.loadLayoutTestResults):

2014-01-31  Anders Carlsson  <andersca@apple.com>

        Fix iOS build.

        * TestWebKitAPI/Configurations/Base.xcconfig:

2014-01-31  Simon Fraser  <simon.fraser@apple.com>

        WebKitTestRunner project doesn't show Mac as a valid destination architecture.
        
        Make sure that SUPPORTED_PLATFORMS is defined in Base.xcconfig.
        
        Also add BaseTarget.xcconfig to the project.

        * WebKitTestRunner/Configurations/Base.xcconfig:
        * WebKitTestRunner/WebKitTestRunner.xcodeproj/project.pbxproj:

2014-01-31  Daniel Bates  <dabates@apple.com>

        WebKit Bot Watcher's Dashboard: Access restricted queue should only prompt for HTTP credentials once per page load
        https://bugs.webkit.org/show_bug.cgi?id=127849

        Reviewed by Alexey Proskuryakov.

        Currently whenever the dashboard updates the status of a queue whose Buildbot requires authentication
        it will cause a browser to prompt for credentials once per update until valid credentials are provided.
        Instead we should keep track of Buildbots that respond with an HTTP 401 Unauthorized status code to avoid
        subsequently querying them and hence cause a browser to prompt for credentials. Together with an optional
        hint provided when instantiating a Buildbot object as to whether it requires authentication, we can make
        the dashboard prompt for HTTP credentials exactly once per page load for each queue whose associated
        Buildbot requires authentication.

        Queues whose Buildbot wasn't authenticated will show in the dashboard as "unauthorized". Clicking on
        this status message will cause the browser to prompt for credentials.

        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Scripts/Buildbot.js:
        (Buildbot): Initialize instance variable authenticationStatus to Buildbot.AuthenticationStatus.Unauthenticated.
        (Buildbot.prototype.get needsAuthentication): Added.
        (Buildbot.prototype.get authenticationStatus): Added.
        (Buildbot.prototype.get isAuthenticated): Added.
        (Buildbot.prototype.set isAuthenticated): Added.
        (Buildbot.prototype.updateQueues): Added.
        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Scripts/BuildbotBuilderQueueView.js:
        (BuildbotBuilderQueueView.prototype.update.appendBuilderQueueStatus): Modified to call
        BuildbotQueueView.prototype._appendUnauthorizedLineView() to update the view and show status of the queue as
        "unauthorized" if the Buildbot associated with the queue is either unauthenticated or was given invalid credentials.
        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Scripts/BuildbotQueue.js:
        (BuildbotQueue.prototype.update): Return immediately if the associated Buildbot requires authentication.
        Additionally, if the JSON load fails with an HTTP 401 Unauthorized access error (say, credentials were
        invalidated) then update the authentication status of the Buildbot to avoid subsequently prompting a
        person for credentials the next time the queue update timer fires.
        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Scripts/BuildbotQueueView.js:
        (BuildbotQueueView): Register as a listener for event BuildbotQueue.Event.UnauthorizedAccess on each queue
        so that the view can be updated to show status "unauthorized".
        (BuildbotQueueView.prototype._appendUnauthorizedLineView): Added.
        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Scripts/BuildbotTesterQueueView.js:
        (BuildbotTesterQueueView.prototype.update.appendBuilderQueueStatus):
        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Scripts/StatusLineView.js: Added new status, StatusLineView.Status.Unauthorized.
        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Styles/StatusLineView.css:
        (.status-line.unauthorized .bubble): Added.
        (.status-line.unauthorized .bubble.pictogram): Added.
        (.status-line.unauthorized .message): Added.

2014-01-31  Filip Pizlo  <fpizlo@apple.com>

        Unreviewed, really make --copy-libraries a no-able option.
        
        * Scripts/build-jsc:

2014-01-31  Filip Pizlo  <fpizlo@apple.com>

        Unreviewed, really add the --copy-libraries option.

        * Scripts/build-jsc:

2014-01-31  Filip Pizlo  <fpizlo@apple.com>

        Unreviewed, fix the script for older Rubies.

        * Scripts/export-llvm-build:

2014-01-31  Filip Pizlo  <fpizlo@apple.com>

        Having a custom LLVM checkout should always override all other ways of getting LLVM
        https://bugs.webkit.org/show_bug.cgi?id=128015

        Reviewed by Oliver Hunt.

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

2014-01-31  Daniel Bates  <dabates@apple.com>

        WebKit Bot Watcher's Dashboard: Teach JSON.load() to take optional failure callback function
        https://bugs.webkit.org/show_bug.cgi?id=127924

        Reviewed by Alexey Proskuryakov.

        Towards providing better error handling when a JSON load fails with a non-200 HTTP status
        code, we should teach JSON.load() to take an optional failure callback function and invoke
        it when either a load error or a JSON parsing error occurs.

        As a side benefit of having a failure callback function a caller can separate the error handling
        logic for a JSON load or parse error from the logic of handling a successful parsing of JSON content.

        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Scripts/BuildbotIteration.js:
        (BuildbotIteration.prototype.loadLayoutTestResults): Move JSON parser error logic into failure
        callback function.
        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Scripts/Utilities.js:
        (JSON.load): Modified to take optional failure callback function called failureCallback.

2014-01-29  Oliver Hunt  <oliver@apple.com>

        Make it possible to implement JS builtins in JS
        https://bugs.webkit.org/show_bug.cgi?id=127887

        Reviewed by Michael Saboff.

        CMake updates

        * DumpRenderTree/CMakeLists.txt:
        * WebKitTestRunner/CMakeLists.txt:
        * WinCELauncher/CMakeLists.txt:

2014-01-31  Filip Pizlo  <fpizlo@apple.com>

        Allow more flexibility for copy-webkitlibraries-to-product-directory
        https://bugs.webkit.org/show_bug.cgi?id=128010

        Reviewed by Oliver Hunt.
        
        It's now the case that copy-webkitlibraries-to-product-directory does nothing by
        default, but you can tell it to either copy WebKitSystemInterface (--wksi) or LLVM
        (--llvm). You can also tell it where to get LLVM from.

        * Scripts/build-jsc:
        * Scripts/build-webkit:
        * Scripts/copy-webkitlibraries-to-product-directory:

2014-01-31  David Farler  <dfarler@apple.com>

        DumpRenderTree iOS fails to link: missing rowHeaders and columnHeaders in AccessibilityUIElement
        https://bugs.webkit.org/show_bug.cgi?id=128004

        Reviewed by Chris Fleizach.

        * DumpRenderTree/ios/AccessibilityUIElementIOS.mm:
        (AccessibilityUIElement::columnHeaders): Stub added.
        (AccessibilityUIElement::rowHeaders): Stub added.

2014-01-31  Zoltan Horvath  <zoltan@webkit.org>

        Unreviewed. Update my contributors.json entry.

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

2014-01-31  Anders Carlsson  <andersca@apple.com>

        REGRESSION: WebKit2.PageLoadBasic API test is failing
        https://bugs.webkit.org/show_bug.cgi?id=127892

        Reviewed by Dan Bernstein.

        Re-enable test.

        * TestWebKitAPI/Tests/WebKit2/PageLoadBasic.cpp:

2014-01-31  Csaba Osztrogonác  <ossy@webkit.org>

        [jhbuild] Disable escape sequences in EWS output
        https://bugs.webkit.org/show_bug.cgi?id=127922

        Reviewed by Alexey Proskuryakov.

        * Scripts/webkitpy/common/system/environment.py:
        (Environment.disable_gcc_smartquotes):
        (Environment):
        (Environment.disable_jhbuild_VT100_output):
        * Scripts/webkitpy/tool/commands/download_unittest.py:
        * Scripts/webkitpy/tool/steps/build.py:
        (Build.build):

2014-01-30  Martin Robinson  <mrobinson@igalia.com>

        [GTK] [CMake] Add support for building against GTK+ 2
        https://bugs.webkit.org/show_bug.cgi?id=127959

        Reviewed by Anders Carlsson.

        * DumpRenderTree/PlatformGTK.cmake: Use the new API version variable and don't use GTK3 directly.
        * GtkLauncher/CMakeLists.txt: Ditto.
        * ImageDiff/PlatformGTK.cmake: Ditto.
        * TestWebKitAPI/Tests/WebKitGtk/CMakeLists.txt: Ditto.

2014-01-30  Anders Carlsson  <andersca@apple.com>

        Add webView:didFinishLoadingNavigation: delegate method
        https://bugs.webkit.org/show_bug.cgi?id=127976

        Reviewed by Dan Bernstein.

        * TestWebKitAPI/Tests/WebKit2Cocoa/Navigation.mm:
        (-[NavigationDelegate webView:didCommitNavigation:]):
        (-[NavigationDelegate webView:didFinishLoadingNavigation:]):

2014-01-30  Anders Carlsson  <andersca@apple.com>

        Add a webView:didCommitNavigation: delegate method
        https://bugs.webkit.org/show_bug.cgi?id=127972

        Reviewed by Dan Bernstein.

        * TestWebKitAPI/Tests/WebKit2Cocoa/Navigation.mm:
        (-[NavigationDelegate webView:didStartProvisionalNavigation:]):
        (-[NavigationDelegate webView:didCommitNavigation:]):

2014-01-30  Anders Carlsson  <andersca@apple.com>

        Add a webView:didFailProvisionalNavigation:withError: delegate method
        https://bugs.webkit.org/show_bug.cgi?id=127968

        Reviewed by Dan Bernstein.

        * TestWebKitAPI/Tests/WebKit2Cocoa/Navigation.mm:
        (-[DidFailProvisionalNavigationDelegate webView:didStartProvisionalNavigation:]):
        (-[DidFailProvisionalNavigationDelegate webView:didFailProvisionalNavigation:withError:]):
        (TEST):

2014-01-30  Ryosuke Niwa  <rniwa@webkit.org>

        The test server build fixes.

        * TestResultServer/model/jsonresults.py:
        (JsonResults.merge):
        * TestResultServer/static-dashboards/flakiness_dashboard.js:

2014-01-30  Ryosuke Niwa  <rniwa@webkit.org>

        NRWT shouldn't say "Finished writing JSON files" if it failed to to so
        https://bugs.webkit.org/show_bug.cgi?id=127966

        Reviewed by Alexey Proskuryakov.

        Don't say "Finished writing JSON files" if we had failed to generate the JSON file.
        Also explicitly say this is for test results server as we're generating two JSON files.

        * Scripts/webkitpy/layout_tests/controllers/manager.py:
        (Manager._upload_json_files):
        * Scripts/webkitpy/layout_tests/layout_package/json_layout_results_generator.py:
        (JSONLayoutResultsGenerator.__init__): Don't generate JSON file implicitly inside the constructor.
        * Scripts/webkitpy/layout_tests/layout_package/json_results_generator.py:
        (JSONResultsGenerator.generate_json_output): Return a boolean indicating whether the generation
        had succeeded or not.

2014-01-30  Filip Pizlo  <fpizlo@apple.com>

        copy-webkitlibraries-to-product-directory should accept command-line arguments for extra work required for optional features rather than relying on environment variables
        https://bugs.webkit.org/show_bug.cgi?id=120221

        Reviewed by Mark Hahnenberg.

        * Scripts/build-jsc:
        * Scripts/build-webkit:
        * Scripts/copy-webkitlibraries-to-product-directory:

2014-01-30  Anders Carlsson  <andersca@apple.com>

        Add a webView:didStartProvisionalNavigation: delegate method
        https://bugs.webkit.org/show_bug.cgi?id=127965

        Reviewed by Dan Bernstein.

        * TestWebKitAPI/Tests/WebKit2Cocoa/Navigation.mm:
        (-[NavigationDelegate webView:didStartProvisionalNavigation:]):
        (TEST):

2014-01-30  Chris Fleizach  <cfleizach@apple.com>

        WebKitTestRunner fails to link - missing rowHeaders and columnHeaders
        https://bugs.webkit.org/show_bug.cgi?id=127917

        Reviewed by Andy Estes.

        * WebKitTestRunner/InjectedBundle/ios/AccessibilityUIElementIOS.mm:
        (WTR::AccessibilityUIElement::rowHeaders):
        (WTR::AccessibilityUIElement::columnHeaders):

2014-01-30  Martin Robinson  <mrobinson@igalia.com>

        [GTK] [CMake] Add a "make dist" target
        https://bugs.webkit.org/show_bug.cgi?id=116378

        Reviewed by Gustavo Noronha Silva.

        Added a script that reads a manifest file an produces a tarball. Also add
        the manifest.

        * gtk/make-dist.py: Added.
        * gtk/manifest.txt: Added.

2014-01-30  David Farler  <dfarler@apple.com>

        Move OTHER_LDFLAGS erasure to DumpRenderTreeLibrary.xcconfig.
        https://bugs.webkit.org/show_bug.cgi?id=127935

        Reviewed by Andy Estes.

        * DumpRenderTree/DumpRenderTree.xcodeproj/project.pbxproj:
        * DumpRenderTree/mac/Configurations/DumpRenderTreeLibrary.xcconfig:
        Move OTHER_LDFLAGS erasure to the static library's xcconfig.

2014-01-30  David Farler  <dfarler@apple.com>

        DumpRenderTree fails to build with ASAN: -fsanitize=address passed to static DRT target
        https://bugs.webkit.org/show_bug.cgi?id=127935

        Reviewed by Andy Estes.

        * DumpRenderTree/DumpRenderTree.xcodeproj/project.pbxproj:
        Clear OTHER_LDFLAGS at the project level for the static library target.
        No other linker flags were inherited from DebugRelease.

2014-01-30  David Farler  <dfarler@apple.com>

        package-root shouldn't prefix simulator roots with the SDK path
        http://bugs.webkit.org/show_bug.cgi?id=127923

        Reviewed by Dan Bernstein.

        * Scripts/package-root: Don't add an install path prefix.

2014-01-30  Gabor Rapcsanyi  <rgabor@webkit.org>

        Add ARM EFL Linux builder bots to Apple buildmaster
        https://bugs.webkit.org/show_bug.cgi?id=127472

        Reviewed by Csaba Osztrogonác.

        There is no ARM buildslaves after removing the Qt builders.

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

2014-01-30  Andy Estes  <aestes@apple.com>

        REGRESSION (r163037): WebKit2.PageLoadBasic API test failing on Mountain Lion
        https://bugs.webkit.org/show_bug.cgi?id=127934

        Disable the failing test on Mountain Lion.

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

2014-01-30  Anders Carlsson  <andersca@apple.com>

        Add WKNavigationDelegate class
        https://bugs.webkit.org/show_bug.cgi?id=127927

        Reviewed by Dan Bernstein.

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

2014-01-30  David Farler  <dfarler@apple.com>

        Enable iOS Tools builds by default
        https://bugs.webkit.org/show_bug.cgi?id=127919

        Reviewed by Andy Estes.

        * Makefile:
        Build all the tools except MiniBrowser on iOS
        * Scripts/build-webkit:
        Ditto.
        Build WebKitTestRunnerApp target on iOS.

2014-01-30  David Farler  <dfarler@apple.com>

        Make TestWebKitAPI build and run for iOS
        https://bugs.webkit.org/show_bug.cgi?id=127925

        Reviewed by Andy Estes.

        * TestWebKitAPI/Configurations/Base.xcconfig:
        - Don't warn on 64-32 bit conversion on x86_64 and arm64
        - Don't build mac/*
        * TestWebKitAPI/Configurations/TestWebKitAPI.xcconfig:
        - Link WebKit2 on all platforms

2014-01-30  David Farler  <dfarler@apple.com>

        package-root should copy ./usr from the build products directory
        https://bugs.webkit.org/show_bug.cgi?id=127878

        Reviewed by Daniel Bates.

        * Scripts/package-root:
        Copy ./usr in addition to the frameworks.

2014-01-30  Andrei Bucur  <abucur@adobe.com>

        Remove the ACCELERATED_COMPOSITING flag
        https://bugs.webkit.org/show_bug.cgi?id=127833

        Reviewed by Antti Koivisto.

        Remove the USE(ACCELERATED_COMPOSITING) conditionals from the code base and make AC
        mandatory.

        * DumpRenderTree/efl/DumpRenderTree.cpp:
        (initEcoreEvas):
        * EWebLauncher/main.c:
        (windowCreate):
        * MiniBrowser/efl/main.c:
        (elm_main):
        * TestWebKitAPI/efl/PlatformWebView.cpp:
        (TestWebKitAPI::initEcoreEvas):
        * WebKitTestRunner/cairo/TestInvocationCairo.cpp:
        (WTR::TestInvocation::dumpPixelsAndCompareWithExpected):
        * WebKitTestRunner/efl/PlatformWebViewEfl.cpp:
        (WTR::initEcoreEvas):

2014-01-29  Csaba Osztrogonác  <ossy@webkit.org>

        Remove ENABLE(JAVASCRIPT_DEBUGGER) leftovers
        https://bugs.webkit.org/show_bug.cgi?id=127845

        Reviewed by Joseph Pecoraro.

        * Scripts/webkitperl/FeatureList.pm:

2014-01-29  Anders Carlsson  <andersca@apple.com>

        -[WKWebView loadRequest:] should return a WKNavigation
        https://bugs.webkit.org/show_bug.cgi?id=127873

        Reviewed by Dan Bernstein.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WebKit2Cocoa/Navigation.mm: Added.
        (TEST):

2014-01-29  Tim Horton  <timothy_horton@apple.com>

        WebKit2 View Gestures (Swipe): Update rubberBandsAt{Left,Right} when WebKit swipe is enabled
        https://bugs.webkit.org/show_bug.cgi?id=127855
        <rdar://problem/15933878>

        Reviewed by Anders Carlsson.

        * MiniBrowser/mac/WK2BrowserWindowController.m:
        (-[WK2BrowserWindowController awakeFromNib]):
        Enable swipe in MiniBrowser for testing purposes.

2014-01-29  Daniel Bates  <dabates@apple.com>

        Fix JSONP requests made by the WebKit Bot Watcher's Dashboard following <http://trac.webkit.org/changeset/163034>
        (https://bugs.webkit.org/show_bug.cgi?id=127784)

        Use dot-notation instead of array index notation to access the dictionary value for key jsonpCallbackName
        in the specified options dictionary.

        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Scripts/Utilities.js:
        (JSON.load):

2014-01-29  Daniel Bates  <dabates@apple.com>

        WebKit Bot Watcher's Dashboard: Add support for using HTTP authentication with Buildbot
        https://bugs.webkit.org/show_bug.cgi?id=127784

        Reviewed by Alexey Proskuryakov.

        Implement support for querying a Buildbot that requires HTTP authentication to access it.

        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Scripts/Buildbot.js:
        (Buildbot): Add optional argument, options, to pass a dictionary of Buildbot options.
        For now, we only support a single option, needsAuthentication, to indicate whether the
        Buildbots requires HTTP authentication (defaults to false - HTTP authentication is
        not required).
        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Scripts/BuildbotIteration.js:
        (BuildbotIteration.prototype.loadLayoutTestResults): Modified to pass JSONP callback name
        to JSON.load() using the option dictionary.
        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Scripts/BuildbotQueue.js:
        (BuildbotQueue.prototype.update): Modified to pass withCredentials to JSON.load().
        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Scripts/Utilities.js:
        (JSON.load): Removed optional argument jsonpCallbackName and added optional argument options,
        which is a dictionary. The argument jsonpCallbackName is now specified as an entry in the
        options dictionary. Added boolean options withCredentials to toggle querying with HTTP
        authentication credentials.

2014-01-29  Alexey Proskuryakov  <ap@apple.com>

        build.webkit.org/dashboard links to an old failing build rather than the most recent
        https://bugs.webkit.org/show_bug.cgi?id=127765
        <rdar://problem/15795228>

        Reviewed by Timothy Hatcher.

        This patch changes builder view to not show how many failures there were in a row,
        because it is not very relevant, and complicates the UI. Instead, we just show the
        latest failing build and the latest successful one.

        The patch also removes commit history popovers from revisions that can not be correlated
        with any change. These popovers are only helpful in the first line, when there is
        another line for comparison below. In this case, it's useful to see what changed
        between the revisions, but even then, only if it was an actual failure, not a buildbot
        exception.

        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Scripts/BuildbotBuilderQueueView.js:
        (BuildbotBuilderQueueView.prototype.update.appendBuilderQueueStatus):
        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Scripts/BuildbotQueue.js:
        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Scripts/BuildbotQueueView.js:
        (BuildbotQueueView.prototype._presentPopoverForRevisionRange):
        (BuildbotQueueView.prototype._revisionPopoverContentForIteration):
        (BuildbotQueueView.prototype.revisionContentForIteration):
        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Scripts/BuildbotTesterQueueView.js:
        (BuildbotTesterQueueView.prototype.update.appendBuilderQueueStatus):

2014-01-29  Csaba Osztrogonác  <ossy@webkit.org>

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

        Reviewed by Mark Lam.

        * Scripts/webkitperl/FeatureList.pm:

2014-01-29  Krzysztof Czech  <k.czech@samsung.com>

        [ATK] Expose aria-describedby with ATK_RELATION_DESCRIBED_BY
        https://bugs.webkit.org/show_bug.cgi?id=121684

        Reviewed by Mario Sanchez Prada.

        Implementing helpText by using relation ATK_RELATION_DESCRIBED_BY.

        * DumpRenderTree/atk/AccessibilityUIElementAtk.cpp:
        (AccessibilityUIElement::helpText):
        * WebKitTestRunner/InjectedBundle/atk/AccessibilityUIElementAtk.cpp:
        (WTR::AccessibilityUIElement::helpText):

2014-01-27  Chris Fleizach  <cfleizach@apple.com>

        AX: Support @scope in HTML tables
        https://bugs.webkit.org/show_bug.cgi?id=127688

        Reviewed by Mario Sanchez Prada.

        Add support for rowHeaders and columnHeaders.

        * DumpRenderTree/AccessibilityUIElement.cpp:
        (convertElementsToObjectArray):
        (columnHeadersCallback):
        (rowHeadersCallback):
        (uiElementArrayAttributeValueCallback):
        (AccessibilityUIElement::columnHeaders):
        (AccessibilityUIElement::rowHeaders):
        (AccessibilityUIElement::getJSClass):
        * DumpRenderTree/AccessibilityUIElement.h:
        * DumpRenderTree/mac/AccessibilityUIElementMac.mm:
        (AccessibilityUIElement::rowHeaders):
        (AccessibilityUIElement::columnHeaders):
        * WebKitTestRunner/InjectedBundle/AccessibilityUIElement.h:
        * WebKitTestRunner/InjectedBundle/Bindings/AccessibilityUIElement.idl:
        * WebKitTestRunner/InjectedBundle/atk/AccessibilityUIElementAtk.cpp:
        (WTR::AccessibilityUIElement::uiElementArrayAttributeValue):
        (WTR::AccessibilityUIElement::rowHeaders):
        (WTR::AccessibilityUIElement::columnHeaders):
        * WebKitTestRunner/InjectedBundle/mac/AccessibilityUIElementMac.mm:
        (WTR::convertElementsToObjectArray):
        (WTR::AccessibilityUIElement::rowHeaders):
        (WTR::AccessibilityUIElement::columnHeaders):
        (WTR::AccessibilityUIElement::uiElementArrayAttributeValue):

2014-01-28  Daniel Bates  <dabates@apple.com>

        Teach Buildbot dashboard to parse alternative revision format
        https://bugs.webkit.org/show_bug.cgi?id=127561

        Reviewed by Alexey Proskuryakov.

        Add support for extracting the OpenSource and Internal revision numbers when Buildbot
        returns a dictionary for the value of property got_revision.

        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Scripts/BuildbotIteration.js:
        (isMultiCodebaseGotRevisionProperty): Added.
        (parseRevisionProperty): Added; parses Buildbot revision property, which can either be a
        string or a dictionary.
        (BuildbotIteration.prototype.update.): Modified to call parseRevisionProperty() to determine
        the OpenSource and Internal revision numbers.

2014-01-28  Adrian Perez de Castro  <aperez@igalia.com>

        [GTK] Add API to allow setting the process model in WebKitWebContext
        https://bugs.webkit.org/show_bug.cgi?id=125463

        Reviewed by Carlos Garcia Campos.

        Implements accessors in WebKitWebContext for the process model.
        The default behavior is unchanged, and a single web process is
        used. Using WEBKIT_PROCESS_MODEL_ONE_SECONDARY_PROCESS_PER_WEB_VIEW
        as the process model will make use one web process for each
        WebKitWebView. This also enables the network process. Setting
        the process model must be done as early as possible, before the
        very first web process is spawned.

        * MiniBrowser/gtk/main.c:
        (main):
        Enable multiple process mode if the MINIBROWSER_MULTIPROCESS
        environment variable is defined and not empty.
        * TestWebKitAPI/GNUmakefile.am:
        Add new TestMultiprocess test case.
        * TestWebKitAPI/Tests/WebKit2Gtk/CMakeLists.txt:
        Add new TestMultiprocess test case.
        * TestWebKitAPI/Tests/WebKit2Gtk/TestMultiprocess.cpp: Added.
        (loadChanged):
        (testMultipleSecondaryProcesses):
        (initializeWebExtensions):
        (beforeAll):
        (afterAll):
        * TestWebKitAPI/Tests/WebKit2Gtk/WebExtensionTest.cpp:
        (methodCallCallback):
        Implement the GetProcessIdentifier D-Bus method.
        (makeBusName):
        Choose a different bus name when the web extension is used
        from TestMultiprocess.
        (webkit_web_extension_initialize_with_user_data):
        Use makeBusName() to choose the bus name.

2014-01-28  Carlos Garcia Campos  <cgarcia@igalia.com>

        [SOUP] Remove soupURIToKURL
        https://bugs.webkit.org/show_bug.cgi?id=127104

        Reviewed by Martin Robinson.

        * TestWebKitAPI/GNUmakefile.am: Add soup cppflags to WebCore unit
        tests, because URL.h now includes GUniquePtrSoup.h.
        * TestWebKitAPI/CMakeLists.txt: Ditto.
        * WebKitTestRunner/PlatformEfl.cmake: Add soup cppflags to WTR,
        because URL.h now includes GUniquePtrSoup.h.

2014-01-27  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] Make webkit_uri_scheme_request_get_web_view() work with CustomProtocols
        https://bugs.webkit.org/show_bug.cgi?id=127614

        Reviewed by Gustavo Noronha Silva.

        * TestWebKitAPI/Tests/WebKit2Gtk/TestWebKitWebContext.cpp: Bring
        back the custom URI scheme WebView check.

2014-01-27  Tim Horton  <timothy_horton@apple.com>

        Revert yet one more tiny part of r162629 that didn't get reverted in r162883

        * WebKitTestRunner/TestController.cpp:
        (WTR::TestController::pluginLoadPolicy):
        * WebKitTestRunner/TestController.h:

2014-01-27  Tim Horton  <timothy_horton@apple.com>

        Revert one more tiny part of r162629 that didn't get reverted in r162883.

        ... which was also causing test failures!

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

2014-01-27  David Farler  <dfarler@apple.com>

        iOS DumpRenderTree.app dies loading fonts
        https://bugs.webkit.org/show_bug.cgi?id=127730

        Reviewed by Daniel Bates.

        * DumpRenderTree/mac/Configurations/DumpRenderTreeApp.xcconfig:
        - Add Ahem to the __DATA section
        * DumpRenderTree/mac/DumpRenderTree.mm:
        (activateFontsIOS):
        - Load "WeightWatcher100" instead.

2014-01-27  Alexey Proskuryakov  <ap@apple.com>

        [Mac] Extra logging output from run-safari --no-saved-state
        https://bugs.webkit.org/show_bug.cgi?id=127732

        Reviewed by Daniel Bates.

        * Scripts/webkitdirs.pm: (argumentsForRunAndDebugMacWebKitApp): Use an option that
        disables saved state without logging.

2014-01-27  Tim Horton  <timothy_horton@apple.com>

        Revert the parts of r162629 that add a new pluginLoadPolicy and the context menu item.

        We're leaving the parts that make us use PDFPlugin instead of showing the blocked
        plugin indicator intact, though.

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

2014-01-27  Andy Estes  <aestes@apple.com>

        Scrub WebKit API headers of WTF macros
        https://bugs.webkit.org/show_bug.cgi?id=127706

        Reviewed by David Kilzer.

        * Scripts/check-for-inappropriate-macros-in-external-headers: Modified
        the regex to require a '(' after the macro name in order to be
        considered a match. This prevents things like 'ENABLE_SOME_FEATURE'
        from being flagged as an ENABLE() macro.

2014-01-27  Commit Queue  <commit-queue@webkit.org>

        Unreviewed, rolling out r162846.
        http://trac.webkit.org/changeset/162846
        https://bugs.webkit.org/show_bug.cgi?id=127695

        "Broke the WebKit Bot Watcher's Dashboard; will fix offline"
        (Requested by dydz on #webkit).

        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Scripts/BuildbotIteration.js:
        (BuildbotIteration.prototype.update.):

2014-01-27  Daniel Bates  <dabates@apple.com>

        Add support for displaying results from multiple Buildbots on WebKit Bot Watcher's Dashboard
        https://bugs.webkit.org/show_bug.cgi?id=127564

        Reviewed by Alexey Proskuryakov.

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

2014-01-27  Daniel Bates  <dabates@apple.com>

        Teach Buildbot dashboard to parse alternative revision format
        https://bugs.webkit.org/show_bug.cgi?id=127561

        Reviewed by Alexey Proskuryakov.

        Add support for extracting the OpenSource and Internal revision numbers when Buildbot
        returns a dictionary for the value of property got_revision.

        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Scripts/BuildbotIteration.js:
        (parseRevisionProperty): Added; parses Buildbot revision property, which can either be a
        string or a dictionary.
        (BuildbotIteration.prototype.update.): Modified to call parseRevisionProperty() to determine
        the OpenSource and Internal revision numbers.

2014-01-27  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] Implement custom URI schemes with CustomProtocols
        https://bugs.webkit.org/show_bug.cgi?id=127091

        Reviewed by Gustavo Noronha Silva.

        Temporarily disable the WebKitWebView check until we figure out
        how to implement it with CustomProtocols.

        * TestWebKitAPI/Tests/WebKit2Gtk/TestWebKitWebContext.cpp:

2014-01-26  Alexey Proskuryakov  <ap@apple.com>

        REGRESSION(r127412): http/tests/misc/link-rel-icon-beforeload.html is broken.

        * DumpRenderTree/mac/TestRunnerMac.mm: (TestRunner::setIconDatabaseEnabled):
        Fixed an incorrect ifdef.

2014-01-26  Brendan Long  <b.long@cablelabs.com>

        [GTK] DumpRenderTree prints out suggesting to set WEBKIT_TOP_LEVEL when fonts are missing but doesn't use it.
        https://bugs.webkit.org/show_bug.cgi?id=110602

        Reviewed by Philippe Normand.

        * DumpRenderTree/gtk/DumpRenderTree.cpp:
        (getTopLevelPath): Use WEBKIT_TOP_LEVEL environment variable if it exists.
        (initializeFonts): Fix printing of expected font path (fontPath is guaranteed to be null here).

2014-01-24  Andy Estes  <aestes@apple.com>

        [iOS] Upstream changes in Tools/DumpRenderTree
        https://bugs.webkit.org/show_bug.cgi?id=127412

        Reviewed by Simon Fraser.

        Upstream all iOS changes. Added a new target called DumpRenderTree.app,
        which builds the DumpRenderTree static library into an app bundle as
        expected by the iOS Simulator.

        * DumpRenderTree/AccessibilityTextMarker.h:
        * DumpRenderTree/AccessibilityUIElement.h:
        * DumpRenderTree/DumpRenderTree.xcodeproj/project.pbxproj:
        * DumpRenderTree/DumpRenderTreeFileDraggingSource.h:
        * DumpRenderTree/DumpRenderTreePrefix.h:
        * DumpRenderTree/PixelDumpSupport.cpp:
        * DumpRenderTree/TestNetscapePlugIn/PluginObject.cpp:
        * DumpRenderTree/TestNetscapePlugIn/PluginObject.h:
        * DumpRenderTree/TestNetscapePlugIn/PluginObjectMac.mm:
        * DumpRenderTree/TestNetscapePlugIn/PluginTest.cpp:
        * DumpRenderTree/TestNetscapePlugIn/PluginTest.h:
        * DumpRenderTree/TestNetscapePlugIn/TestObject.cpp:
        * DumpRenderTree/TestNetscapePlugIn/TestObject.h:
        * DumpRenderTree/TestNetscapePlugIn/Tests/DocumentOpenInDestroyStream.cpp:
        * DumpRenderTree/TestNetscapePlugIn/Tests/EvaluateJSAfterRemovingPluginElement.cpp:
        * DumpRenderTree/TestNetscapePlugIn/Tests/GetUserAgentWithNullNPPFromNPPNew.cpp:
        * DumpRenderTree/TestNetscapePlugIn/Tests/NPRuntimeObjectFromDestroyedPlugin.cpp:
        * DumpRenderTree/TestNetscapePlugIn/Tests/NPRuntimeRemoveProperty.cpp:
        * DumpRenderTree/TestNetscapePlugIn/Tests/NullNPPGetValuePointer.cpp:
        * DumpRenderTree/TestNetscapePlugIn/Tests/PassDifferentNPPStruct.cpp:
        * DumpRenderTree/TestNetscapePlugIn/Tests/PluginScriptableNPObjectInvokeDefault.cpp:
        * DumpRenderTree/TestNetscapePlugIn/main.cpp:
        * DumpRenderTree/TestRunner.cpp:
        * DumpRenderTree/TestRunner.h:
        * DumpRenderTree/cg/ImageDiffCG.cpp:
        * DumpRenderTree/cg/PixelDumpSupportCG.cpp:
        * DumpRenderTree/ios/AccessibilityControllerIOS.mm:
        * DumpRenderTree/ios/AccessibilityUIElementIOS.mm:
        * DumpRenderTree/ios/DumpRenderTreeBrowserView.h: Added.
        * DumpRenderTree/ios/DumpRenderTreeBrowserView.mm: Added.
        * DumpRenderTree/ios/Info.plist: Added.
        * DumpRenderTree/ios/PerlSupport/DumpRenderTreeSupport.c: Added.
        * DumpRenderTree/ios/PerlSupport/DumpRenderTreeSupportPregenerated.pm: Added.
        * DumpRenderTree/ios/PerlSupport/DumpRenderTreeSupport_wrapPregenerated.c: Added.
        * DumpRenderTree/ios/PerlSupport/IPhoneSimulatorNotification/Changes: Added.
        * DumpRenderTree/ios/PerlSupport/IPhoneSimulatorNotification/IPhoneSimulatorNotification.xs: Added.
        * DumpRenderTree/ios/PerlSupport/IPhoneSimulatorNotification/MANIFEST: Added.
        * DumpRenderTree/ios/PerlSupport/IPhoneSimulatorNotification/Makefile.PL: Added.
        * DumpRenderTree/ios/PerlSupport/IPhoneSimulatorNotification/README: Added.
        * DumpRenderTree/ios/PerlSupport/IPhoneSimulatorNotification/lib/IPhoneSimulatorNotification.pm: Added.
        * DumpRenderTree/ios/PerlSupport/IPhoneSimulatorNotification/ppport.h: Added.
        * DumpRenderTree/ios/PerlSupport/IPhoneSimulatorNotification/t/IPhoneSimulatorNotification.t: Added.
        * DumpRenderTree/ios/PerlSupport/Makefile: Added.
        * DumpRenderTree/ios/PixelDumpSupportIOS.mm: Added.
        * DumpRenderTree/mac/AccessibilityNotificationHandler.mm:
        * DumpRenderTree/mac/AccessibilityTextMarkerMac.mm:
        * DumpRenderTree/mac/AppleScriptController.m:
        * DumpRenderTree/mac/Configurations/Base.xcconfig:
        * DumpRenderTree/mac/Configurations/DebugRelease.xcconfig:
        * DumpRenderTree/mac/Configurations/DumpRenderTree.xcconfig:
        * DumpRenderTree/mac/Configurations/DumpRenderTreeApp.xcconfig: Added.
        * DumpRenderTree/mac/Configurations/DumpRenderTreeLibrary.xcconfig:
        * DumpRenderTree/mac/Configurations/ImageDiff.xcconfig:
        * DumpRenderTree/mac/Configurations/LayoutTestHelper.xcconfig: Added.
        * DumpRenderTree/mac/Configurations/TestNetscapePlugIn.xcconfig:
        * DumpRenderTree/mac/DumpRenderTree.mm:
        * DumpRenderTree/mac/DumpRenderTreeDraggingInfo.h:
        * DumpRenderTree/mac/DumpRenderTreeDraggingInfo.mm:
        * DumpRenderTree/mac/DumpRenderTreeMac.h:
        * DumpRenderTree/mac/DumpRenderTreePasteboard.h:
        * DumpRenderTree/mac/DumpRenderTreePasteboard.m:
        * DumpRenderTree/mac/DumpRenderTreeWindow.h:
        * DumpRenderTree/mac/DumpRenderTreeWindow.mm:
        * DumpRenderTree/mac/EditingDelegate.h:
        * DumpRenderTree/mac/EventSendingController.h:
        * DumpRenderTree/mac/EventSendingController.mm:
        * DumpRenderTree/mac/FrameLoadDelegate.mm:
        * DumpRenderTree/mac/HistoryDelegate.h:
        * DumpRenderTree/mac/LayoutTestHelper.m:
        * DumpRenderTree/mac/MockGeolocationProvider.mm:
        * DumpRenderTree/mac/NavigationController.h:
        * DumpRenderTree/mac/ObjCPlugin.h:
        * DumpRenderTree/mac/ObjCPlugin.m:
        * DumpRenderTree/mac/ObjCPluginFunction.h:
        * DumpRenderTree/mac/PolicyDelegate.h:
        * DumpRenderTree/mac/ResourceLoadDelegate.h:
        * DumpRenderTree/mac/ResourceLoadDelegate.mm:
        * DumpRenderTree/mac/TestRunnerMac.mm:
        * DumpRenderTree/mac/TextInputController.h:
        * DumpRenderTree/mac/TextInputController.m:
        * DumpRenderTree/mac/UIDelegate.h:
        * DumpRenderTree/mac/UIDelegate.mm:

2014-01-25  Darin Adler  <darin@apple.com>

        Call deprecatedCharacters instead of characters at more call sites
        https://bugs.webkit.org/show_bug.cgi?id=127631

        Reviewed by Sam Weinig.

        * TestWebKitAPI/Tests/WTF/StringBuilder.cpp:
        (TestWebKitAPI::expectBuilderContent):
        (TestWebKitAPI::expectEmpty):
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/WTF/StringImpl.cpp:
        (TestWebKitAPI::TEST):
        Use the new name.

2014-01-25  Anders Carlsson  <andersca@apple.com>

        Modernize HashTable threading code
        https://bugs.webkit.org/show_bug.cgi?id=127621

        Reviewed by Darin Adler.

        Explicitly include headers that used to be brought in by HashTable.h

        * DumpRenderTree/JavaScriptThreading.cpp:

2014-01-24  Eric Carlson  <eric.carlson@apple.com>

        Unreviewed. Add Philip Jägenstedt to watch and contributor lists.

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

2014-01-23  David Farler  <dfarler@apple.com>

        Make WebKitTestRunner work with iOS
        https://bugs.webkit.org/show_bug.cgi?id=127448

        Reviewed by Simon Fraser.

        Combined patch from Simon below with some additional xcconfig cleanups,
        rebasing and stubbing out a couple of new functions that popped up
        since then.

        2013-12-03  Simon Fraser  <simon.fraser@apple.com>

                <rdar://problem/15515469> Get WebKitTestRunner working on iOS

                Get WebKitTestRunner limping on iOS. Main parts:
                - Stub out lots of accessibility-related functions.
                - Stub out EventSender
                - Create target to make a bundled app that runs in the simulator,
                  and copy the injected bundle library into it.
                - Make a UIWindow and WKView to load tests in

                It runs, load tests, and dumps results to output. More work will be
                required once we can execute it via the webkitpy scripts.

        * WebKitTestRunner/Configurations/Base.xcconfig:
        * WebKitTestRunner/Configurations/InjectedBundle.xcconfig:
        * WebKitTestRunner/Configurations/WebKitTestRunner.xcconfig:
        * WebKitTestRunner/InjectedBundle/EventSendingController.cpp:
        * WebKitTestRunner/InjectedBundle/ios/AccessibilityControllerIOS.mm: Added.
        (WTR::AccessibilityController::addNotificationListener):
        (WTR::AccessibilityController::removeNotificationListener):
        (WTR::AccessibilityController::platformName):
        (WTR::AccessibilityController::logAccessibilityEvents):
        (WTR::AccessibilityController::resetToConsistentState):
        (WTR::findAccessibleObjectById):
        (WTR::AccessibilityController::accessibleElementById):
        * WebKitTestRunner/InjectedBundle/ios/AccessibilityNotificationHandler.h: Added.
        * WebKitTestRunner/InjectedBundle/ios/AccessibilityTextMarkerIOS.mm: Copied from Tools/WebKitTestRunner/WebKitTestRunnerPrefix.h.
        (WTR::AccessibilityTextMarker::isEqual):
        * WebKitTestRunner/InjectedBundle/ios/AccessibilityUIElementIOS.mm: Added.
        (WTR::AccessibilityUIElement::AccessibilityUIElement):
        (WTR::AccessibilityUIElement::~AccessibilityUIElement):
        (WTR::AccessibilityUIElement::isEqual):
        (WTR::AccessibilityUIElement::getLinkedUIElements):
        (WTR::AccessibilityUIElement::getDocumentLinks):
        (WTR::AccessibilityUIElement::getChildren):
        (WTR::AccessibilityUIElement::getChildrenWithRange):
        (WTR::AccessibilityUIElement::childrenCount):
        (WTR::AccessibilityUIElement::elementAtPoint):
        (WTR::AccessibilityUIElement::indexOfChild):
        (WTR::AccessibilityUIElement::childAtIndex):
        (WTR::AccessibilityUIElement::linkedUIElementAtIndex):
        (WTR::AccessibilityUIElement::ariaOwnsElementAtIndex):
        (WTR::AccessibilityUIElement::ariaFlowToElementAtIndex):
        (WTR::AccessibilityUIElement::disclosedRowAtIndex):
        (WTR::AccessibilityUIElement::rowAtIndex):
        (WTR::AccessibilityUIElement::selectedChildAtIndex):
        (WTR::AccessibilityUIElement::selectedChildrenCount):
        (WTR::AccessibilityUIElement::selectedRowAtIndex):
        (WTR::AccessibilityUIElement::titleUIElement):
        (WTR::AccessibilityUIElement::parentElement):
        (WTR::AccessibilityUIElement::disclosedByRow):
        (WTR::AccessibilityUIElement::attributesOfLinkedUIElements):
        (WTR::AccessibilityUIElement::attributesOfDocumentLinks):
        (WTR::AccessibilityUIElement::attributesOfChildren):
        (WTR::AccessibilityUIElement::allAttributes):
        (WTR::AccessibilityUIElement::stringAttributeValue):
        (WTR::AccessibilityUIElement::numberAttributeValue):
        (WTR::AccessibilityUIElement::uiElementArrayAttributeValue):
        (WTR::AccessibilityUIElement::uiElementAttributeValue):
        (WTR::AccessibilityUIElement::boolAttributeValue):
        (WTR::AccessibilityUIElement::isAttributeSettable):
        (WTR::AccessibilityUIElement::isAttributeSupported):
        (WTR::AccessibilityUIElement::parameterizedAttributeNames):
        (WTR::AccessibilityUIElement::role):
        (WTR::AccessibilityUIElement::subrole):
        (WTR::AccessibilityUIElement::roleDescription):
        (WTR::AccessibilityUIElement::title):
        (WTR::AccessibilityUIElement::description):
        (WTR::AccessibilityUIElement::orientation):
        (WTR::AccessibilityUIElement::stringValue):
        (WTR::AccessibilityUIElement::language):
        (WTR::AccessibilityUIElement::helpText):
        (WTR::AccessibilityUIElement::x):
        (WTR::AccessibilityUIElement::y):
        (WTR::AccessibilityUIElement::width):
        (WTR::AccessibilityUIElement::height):
        (WTR::AccessibilityUIElement::clickPointX):
        (WTR::AccessibilityUIElement::clickPointY):
        (WTR::AccessibilityUIElement::intValue):
        (WTR::AccessibilityUIElement::minValue):
        (WTR::AccessibilityUIElement::maxValue):
        (WTR::AccessibilityUIElement::valueDescription):
        (WTR::AccessibilityUIElement::insertionPointLineNumber):
        (WTR::AccessibilityUIElement::isPressActionSupported):
        (WTR::AccessibilityUIElement::isIncrementActionSupported):
        (WTR::AccessibilityUIElement::isDecrementActionSupported):
        (WTR::AccessibilityUIElement::isEnabled):
        (WTR::AccessibilityUIElement::isRequired):
        (WTR::AccessibilityUIElement::isFocused):
        (WTR::AccessibilityUIElement::isSelected):
        (WTR::AccessibilityUIElement::isSelectedOptionActive):
        (WTR::AccessibilityUIElement::isIndeterminate):
        (WTR::AccessibilityUIElement::isExpanded):
        (WTR::AccessibilityUIElement::isChecked):
        (WTR::AccessibilityUIElement::hierarchicalLevel):
        (WTR::AccessibilityUIElement::classList):
        (WTR::AccessibilityUIElement::speak):
        (WTR::AccessibilityUIElement::ariaIsGrabbed):
        (WTR::AccessibilityUIElement::ariaDropEffects):
        (WTR::AccessibilityUIElement::lineForIndex):
        (WTR::AccessibilityUIElement::rangeForLine):
        (WTR::AccessibilityUIElement::rangeForPosition):
        (WTR::AccessibilityUIElement::boundsForRange):
        (WTR::AccessibilityUIElement::stringForRange):
        (WTR::AccessibilityUIElement::attributedStringForRange):
        (WTR::AccessibilityUIElement::attributedStringRangeIsMisspelled):
        (WTR::uiElementCountForSearchPredicate):
        (WTR::AccessibilityUIElement::uiElementCountForSearchPredicate):
        (WTR::AccessibilityUIElement::uiElementForSearchPredicate):
        (WTR::AccessibilityUIElement::attributesOfColumnHeaders):
        (WTR::AccessibilityUIElement::attributesOfRowHeaders):
        (WTR::AccessibilityUIElement::attributesOfColumns):
        (WTR::AccessibilityUIElement::attributesOfRows):
        (WTR::AccessibilityUIElement::attributesOfVisibleCells):
        (WTR::AccessibilityUIElement::attributesOfHeader):
        (WTR::AccessibilityUIElement::rowCount):
        (WTR::AccessibilityUIElement::columnCount):
        (WTR::AccessibilityUIElement::indexInTable):
        (WTR::AccessibilityUIElement::rowIndexRange):
        (WTR::AccessibilityUIElement::columnIndexRange):
        (WTR::AccessibilityUIElement::cellForColumnAndRow):
        (WTR::AccessibilityUIElement::horizontalScrollbar):
        (WTR::AccessibilityUIElement::verticalScrollbar):
        (WTR::AccessibilityUIElement::scrollToMakeVisible):
        (WTR::AccessibilityUIElement::selectedTextRange):
        (WTR::AccessibilityUIElement::setSelectedTextRange):
        (WTR::AccessibilityUIElement::increment):
        (WTR::AccessibilityUIElement::decrement):
        (WTR::AccessibilityUIElement::showMenu):
        (WTR::AccessibilityUIElement::press):
        (WTR::AccessibilityUIElement::setSelectedChild):
        (WTR::AccessibilityUIElement::accessibilityValue):
        (WTR::AccessibilityUIElement::documentEncoding):
        (WTR::AccessibilityUIElement::documentURI):
        (WTR::AccessibilityUIElement::url):
        (WTR::AccessibilityUIElement::addNotificationListener):
        (WTR::AccessibilityUIElement::removeNotificationListener):
        (WTR::AccessibilityUIElement::isFocusable):
        (WTR::AccessibilityUIElement::isSelectable):
        (WTR::AccessibilityUIElement::isMultiSelectable):
        (WTR::AccessibilityUIElement::isVisible):
        (WTR::AccessibilityUIElement::isOffScreen):
        (WTR::AccessibilityUIElement::isCollapsed):
        (WTR::AccessibilityUIElement::isIgnored):
        (WTR::AccessibilityUIElement::hasPopup):
        (WTR::AccessibilityUIElement::takeFocus):
        (WTR::AccessibilityUIElement::takeSelection):
        (WTR::AccessibilityUIElement::addSelection):
        (WTR::AccessibilityUIElement::removeSelection):
        (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::startTextMarkerForBounds):
        (WTR::AccessibilityUIElement::textMarkerForPoint):
        (WTR::AccessibilityUIElement::accessibilityElementForTextMarker):
        (WTR::AccessibilityUIElement::attributedStringForTextMarkerRangeContainsAttribute):
        (WTR::AccessibilityUIElement::indexForTextMarker):
        (WTR::AccessibilityUIElement::isTextMarkerValid):
        (WTR::AccessibilityUIElement::textMarkerForIndex):
        (WTR::AccessibilityUIElement::startTextMarker):
        (WTR::AccessibilityUIElement::endTextMarker):
        (WTR::AccessibilityUIElement::mathPostscriptsDescription):
        (WTR::AccessibilityUIElement::mathPrescriptsDescription):
        (WTR::AccessibilityUIElement::pathDescription):
        (WTR::AccessibilityUIElement::supportedActions):
        * WebKitTestRunner/InjectedBundle/ios/ActivateFontsIOS.mm: Copied from Tools/WebKitTestRunner/WebKitTestRunnerPrefix.h.
        (WTR::activateFonts):
        * WebKitTestRunner/InjectedBundle/ios/EventSenderProxyIOS.mm: Added.
        (WTR::EventSenderProxy::EventSenderProxy):
        (WTR::EventSenderProxy::~EventSenderProxy):
        (WTR::EventSenderProxy::updateClickCountForButton):
        (WTR::EventSenderProxy::mouseDown):
        (WTR::EventSenderProxy::mouseUp):
        (WTR::EventSenderProxy::mouseMoveTo):
        (WTR::EventSenderProxy::leapForward):
        (WTR::EventSenderProxy::keyDown):
        (WTR::EventSenderProxy::mouseScrollBy):
        (WTR::EventSenderProxy::continuousMouseScrollBy):
        (WTR::EventSenderProxy::addTouchPoint):
        (WTR::EventSenderProxy::updateTouchPoint):
        (WTR::EventSenderProxy::setTouchModifier):
        (WTR::EventSenderProxy::setTouchPointRadius):
        (WTR::EventSenderProxy::touchStart):
        (WTR::EventSenderProxy::touchMove):
        (WTR::EventSenderProxy::touchEnd):
        (WTR::EventSenderProxy::touchCancel):
        (WTR::EventSenderProxy::clearTouchPoints):
        (WTR::EventSenderProxy::releaseTouchPoint):
        (WTR::EventSenderProxy::cancelTouchPoint):
        * WebKitTestRunner/InjectedBundle/ios/InjectedBundleIOS.mm: Copied from Tools/WebKitTestRunner/WebKitTestRunnerPrefix.h.
        (WTR::InjectedBundle::platformInitialize):
        * WebKitTestRunner/InjectedBundle/ios/InjectedBundlePageIOS.mm: Copied from Tools/WebKitTestRunner/WebKitTestRunnerPrefix.h.
        (WTR::InjectedBundlePage::platformDidStartProvisionalLoadForFrame):
        * WebKitTestRunner/Makefile:
        * WebKitTestRunner/TestController.cpp:
        (WTR::TestController::initialize):
        * WebKitTestRunner/TestController.h:
        * WebKitTestRunner/TestInvocation.cpp:
        (WTR::TestInvocation::invoke):
        (WTR::TestInvocation::didReceiveSynchronousMessageFromInjectedBundle):
        * WebKitTestRunner/WebKitTestRunner.xcodeproj/project.pbxproj:
        * WebKitTestRunner/WebKitTestRunnerApp/AppDelegate.h: Added.
        * WebKitTestRunner/WebKitTestRunnerApp/AppDelegate.m: Added.
        (-[AppDelegate application:didFinishLaunchingWithOptions:]):
        (-[AppDelegate applicationWillResignActive:]):
        (-[AppDelegate applicationDidEnterBackground:]):
        (-[AppDelegate applicationWillEnterForeground:]):
        (-[AppDelegate applicationDidBecomeActive:]):
        (-[AppDelegate applicationWillTerminate:]):
        * WebKitTestRunner/WebKitTestRunnerApp/Images.xcassets/AppIcon.appiconset/Contents.json: Added.
        * WebKitTestRunner/WebKitTestRunnerApp/Images.xcassets/LaunchImage.launchimage/Contents.json: Added.
        * WebKitTestRunner/WebKitTestRunnerApp/WebKitTestRunnerApp-Info.plist: Added.
        * WebKitTestRunner/WebKitTestRunnerApp/WebKitTestRunnerApp-Prefix.pch: Added.
        * WebKitTestRunner/WebKitTestRunnerApp/en.lproj/InfoPlist.strings: Added.
        * WebKitTestRunner/WebKitTestRunnerApp/main.m: Added.
        (main):
        * WebKitTestRunner/WebKitTestRunnerAppTests-Info.plist: Added.
        * WebKitTestRunner/WebKitTestRunnerAppTests/WebKitTestRunnerAppTests-Info.plist: Added.
        * WebKitTestRunner/WebKitTestRunnerAppTests/WebKitTestRunnerAppTests.m: Added.
        (-[WebKitTestRunnerAppTests setUp]):
        (-[WebKitTestRunnerAppTests tearDown]):
        (-[WebKitTestRunnerAppTests testExample]):
        * WebKitTestRunner/WebKitTestRunnerAppTests/en.lproj/InfoPlist.strings: Added.
        * WebKitTestRunner/WebKitTestRunnerPrefix.h:
        * WebKitTestRunner/cg/TestInvocationCG.cpp:
        * WebKitTestRunner/iOS.xcconfig: Added.
        * WebKitTestRunner/ios/PlatformWebViewIOS.mm: Added.
        (-[TestRunnerWKView initWithFrame:contextRef:pageGroupRef:relatedToPage:useTiledDrawing:]):
        (-[TestRunnerWKView _shouldUseTiledDrawingArea]):
        (-[WebKitTestRunnerWindow isKeyWindow]):
        (-[WebKitTestRunnerWindow setFrameOrigin:]):
        (-[WebKitTestRunnerWindow setFrame:]):
        (-[WebKitTestRunnerWindow frameRespectingFakeOrigin]):
        (-[WebKitTestRunnerWindow backingScaleFactor]):
        (WTR::PlatformWebView::PlatformWebView):
        (WTR::PlatformWebView::resizeTo):
        (WTR::PlatformWebView::~PlatformWebView):
        (WTR::PlatformWebView::page):
        (WTR::PlatformWebView::focus):
        (WTR::PlatformWebView::windowFrame):
        (WTR::PlatformWebView::setWindowFrame):
        (WTR::PlatformWebView::didInitializeClients):
        (WTR::PlatformWebView::addChromeInputField):
        (WTR::PlatformWebView::removeChromeInputField):
        (WTR::PlatformWebView::makeWebViewFirstResponder):
        (WTR::PlatformWebView::windowSnapshotImage):
        (WTR::PlatformWebView::viewSupportsOptions):
        * WebKitTestRunner/ios/TestControllerIOS.mm: Added.
        (WTR::TestController::notifyDone):
        (WTR::TestController::platformInitialize):
        (WTR::TestController::platformDestroy):
        (WTR::TestController::initializeInjectedBundlePath):
        (WTR::TestController::initializeTestPluginDirectory):
        (WTR::TestController::platformRunUntil):
        (WTR::TestController::platformInitializeContext):
        (WTR::TestController::runModal):
        (WTR::TestController::platformLibraryPathForTesting):
        * WebKitTestRunner/ios/WebArchiveDumpSupportIOS.mm: Copied from Tools/WebKitTestRunner/WebKitTestRunnerPrefix.h.
        (createCFURLResponseFromResponseData):
        (supportedNonImageMIMETypes):
        * WebKitTestRunner/ios/mainIOS.mm: Copied from Tools/WebKitTestRunner/WebKitTestRunnerPrefix.h.
        (-[WebKitTestRunnerApp _runTestController]):
        (-[WebKitTestRunnerApp applicationDidFinishLaunching:]):
        (main):

2014-01-24  Enrique Ocaña González  <eocanha@igalia.com>

        [GTK] Put cache files in XDG_CACHE_HOME
        https://bugs.webkit.org/show_bug.cgi?id=123458

        Reviewed by Martin Robinson.

        * GtkLauncher/main.c:
        (createBrowser):

2014-01-23  Max Vujovic  <mvujovic@adobe.com>

        Remove CSS Custom Filters code and tests
        https://bugs.webkit.org/show_bug.cgi?id=127382

        Reviewed by Simon Fraser.

        * DumpRenderTree/gtk/DumpRenderTree.cpp:
        (resetDefaultsToConsistentValues):
        * DumpRenderTree/gtk/TestRunnerGtk.cpp:
        (TestRunner::overridePreference):

2014-01-23  Tim Horton  <timothy_horton@apple.com>

        PDFPlugin: Use PDFPlugin even if there's an external plugin installed, if it's blocked
        https://bugs.webkit.org/show_bug.cgi?id=127415
        <rdar://problem/12482452>

        Reviewed by Sam Weinig.

        Adopt the new page loader client plugin load callback.

        * WebKitTestRunner/TestController.cpp:
        (WTR::TestController::createWebViewWithOptions):
        (WTR::TestController::pluginLoadPolicy):
        * WebKitTestRunner/TestController.h:

2014-01-23  peavo@outlook.com  <peavo@outlook.com>

        [Curl] There is no way to specify cache folder.
        https://bugs.webkit.org/show_bug.cgi?id=125028

        Reviewed by Brent Fulgham.

        Enable disc cache in WinLauncher by setting cache folder location.

        * WinLauncher/WinLauncher.cpp:
        (getAppDataFolder): Added function to get app data folder.
        (setCacheFolder): Added function to set cache folder.
        (createCrashReport): Use new getAppDataFolder function.
        (wWinMain): Use function setCacheFolder to set cache folder location.

2014-01-23  Daniel Bates  <dabates@apple.com>

        build-webkit --sdk=iphonesimulator doesn't think it's building iOS
        https://bugs.webkit.org/show_bug.cgi?id=127379

        Reviewed by Simon Fraser.

        Teach build-webkit to recognize --sdk=X.

        Currently, build-webkit recognizes --sdk X to specify X as the Xcode SDK to use, which is also
        considered when determining the WebKit port to build. But build-webkit advertises --sdk=X in its
        help message. We should teach build-webkit to recognize both --sdk X and --sdk=X to make its handling
        of --sdk more consistent with the handling of other build-webkit options that take a value (e.g. --prefix).

        * Scripts/webkitdirs.pm:
        (checkForArgumentAndRemoveFromArrayRefGettingValue): Added.
        (checkForArgumentAndRemoveFromARGVGettingValue): Modified to call checkForArgumentAndRemoveFromArrayRefGettingValue().
        * Scripts/webkitperl/webkitdirs_unittest/checkForArgumentAndRemoveFromArrayRefGettingValue.pl: Added.

2014-01-23  Commit Queue  <commit-queue@webkit.org>

        Unreviewed, rolling out r162612.
        http://trac.webkit.org/changeset/162612
        https://bugs.webkit.org/show_bug.cgi?id=127488

        broke the build (Requested by mhahnenberg on #webkit).

        * Scripts/build-jsc:
        * jsc-cli/jsc-cli.xcodeproj/project.pbxproj: Removed.
        * jsc-cli/jsc-cli/CLIInstance.h: Removed.
        * jsc-cli/jsc-cli/CLIInstance.m: Removed.
        * jsc-cli/jsc-cli/JSModule.h: Removed.
        * jsc-cli/jsc-cli/JSModule.m: Removed.
        * jsc-cli/jsc-cli/JSRunLoopThread.h: Removed.
        * jsc-cli/jsc-cli/JSRunLoopThread.m: Removed.
        * jsc-cli/jsc-cli/ReadEvalPrintLoop.h: Removed.
        * jsc-cli/jsc-cli/ReadEvalPrintLoop.m: Removed.
        * jsc-cli/jsc-cli/RunLoopThread.h: Removed.
        * jsc-cli/jsc-cli/RunLoopThread.m: Removed.
        * jsc-cli/jsc-cli/ScriptInputSource.h: Removed.
        * jsc-cli/jsc-cli/ScriptInputSource.m: Removed.
        * jsc-cli/jsc-cli/main.m: Removed.

2014-01-23  Mark Hahnenberg  <mhahnenberg@apple.com>

        Basic framework for a modern jsc CLI
        https://bugs.webkit.org/show_bug.cgi?id=127435

        Reviewed by Geoffrey Garen.

        The most basic components of a modern jsc command line interface consist of the following:

        - A simple REPL to enter commands and receive results
        - The ability to define a module (which consists of various internal methods as well as a 
          set of externally visible methods)
        - The ability to load other modules at runtime
        - The ability to interact with the underlying platform to perform various "privileged" 
          functions (e.g. opening files, printing to the stdout, etc.)
        
        The basic architecture will look something like the following:
        - If the tool is run in REPL mode (i.e. no command line arguments), it will start the REPL 
          on the main thread and start a secondary thread with a run loop to handle various inputs 
          from the REPL thread.
        - If the tool is given a script to run, it will evaluate that script (and any scripts that 
          it might transitively load) within the run loop on the secondary thread while the main 
          thread blocks until it has completed.

        * Scripts/build-jsc:
        * jsc-cli: Added.
        * jsc-cli/jsc-cli: Added.
        * jsc-cli/jsc-cli.xcodeproj: Added.
        * jsc-cli/jsc-cli.xcodeproj/project.pbxproj: Added.
        * jsc-cli/jsc-cli/CLIInstance.h: Added.
        * jsc-cli/jsc-cli/CLIInstance.m: Added.
        (-[CLIInstance init]):
        (-[CLIInstance loadFile:]):
        (-[CLIInstance run]):
        * jsc-cli/jsc-cli/JSModule.h: Added.
        * jsc-cli/jsc-cli/JSModule.m: Added.
        (coreModules):
        (isCoreModule):
        (classForModule):
        (coreModuleFullPath):
        (resolveModuleAsFile):
        (resolveModuleAsDirectory):
        (nodeModulePaths):
        (resolveAsNodeModule):
        (+[JSModule resolve:atPath:]):
        (globalModuleCache):
        (isCached):
        (cachedModule):
        (cacheModule):
        (+[JSModule require:atPath:]):
        (+[JSModule require:atPath:inContext:]):
        (-[JSModule platformObjectInContext:]):
        (-[JSModule initWithId:filename:context:]):
        (-[JSModule dealloc]):
        (-[JSModule didStartLoading]):
        (-[JSModule didFinishLoading]):
        (-[JSModule require:]):
        (-[JSModule exports]):
        * jsc-cli/jsc-cli/JSRunLoopThread.h: Added.
        * jsc-cli/jsc-cli/JSRunLoopThread.m: Added.
        (jsThreadMain):
        (+[JSRunLoopThread threadMain]):
        (-[JSRunLoopThread initWithFiles:andContext:]):
        (-[JSRunLoopThread startRunLoop]):
        (-[JSRunLoopThread start]):
        (-[JSRunLoopThread join]):
        (-[JSRunLoopThread didReceiveInput:]):
        (-[JSRunLoopThread performCallback:withError:]):
        (-[JSRunLoopThread performCallback:withArguments:]):
        (-[JSRunLoopThread didFinishRunLoopInitialization]):
        * jsc-cli/jsc-cli/ReadEvalPrintLoop.h: Added.
        * jsc-cli/jsc-cli/ReadEvalPrintLoop.m: Added.
        (-[ReadEvalPrintLoop initWithJSThread:]):
        (prompt):
        (escapeStringForOutput):
        (-[ReadEvalPrintLoop processNextInput]):
        (-[ReadEvalPrintLoop run]):
        * jsc-cli/jsc-cli/RunLoopThread.h: Added.
        * jsc-cli/jsc-cli/RunLoopThread.m: Added.
        (+[RunLoopThread threadMain]):
        (-[RunLoopThread init]):
        (-[RunLoopThread dealloc]):
        (-[RunLoopThread didFinishRunLoopInitialization]):
        (-[RunLoopThread start]):
        (-[RunLoopThread join]):
        * jsc-cli/jsc-cli/ScriptInputSource.h: Added.
        * jsc-cli/jsc-cli/ScriptInputSource.m: Added.
        (scriptInputSourceScheduleRoutine):
        (scriptInputSourcePerformRoutine):
        (scriptInputSourceCancelRoutine):
        (-[ScriptInputSource initWithContext:]):
        (-[ScriptInputSource dealloc]):
        (-[ScriptInputSource addToCurrentRunLoop]):
        (-[ScriptInputSource removeFromRemoteRunLoop]):
        (-[ScriptInputSource didReceiveScript:]):
        (-[ScriptInputSource didReceiveSignal]):
        (-[ScriptInputSource runScriptRemotely:]):
        (-[ScriptInputSource finishAsyncCallback:withResult:]):
        * jsc-cli/jsc-cli/main.m: Added.
        (main):

2014-01-23  László Langó  <llango.u-szeged@partner.samsung.com>

        Remove a FIXME comment that is already fixed.
        https://bugs.webkit.org/show_bug.cgi?id=127468

        Reviewed by Csaba Osztrogonác.

        * Scripts/webkitpy/style/filereader.py:
        (TextFileReader.__init__):

2014-01-22  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GLIB] Use GUniquePtr instead of GOwnPtr
        https://bugs.webkit.org/show_bug.cgi?id=127431

        Reviewed by Martin Robinson.

        GUniquePtr is a template alias of std::unique_ptr with a custom
        deleter that replaces GOwnPtr. GOwnPtr is still used for the cases
        where the output pointer is needed, but it will also be replaced soon.

        * DumpRenderTree/atk/AccessibilityCallbacksAtk.cpp:
        (printAccessibilityEvent):
        (axObjectEventListener):
        * DumpRenderTree/atk/AccessibilityUIElementAtk.cpp:
        (indexRangeInTable):
        (AccessibilityUIElement::role):
        (AccessibilityUIElement::title):
        (AccessibilityUIElement::description):
        (AccessibilityUIElement::stringValue):
        (AccessibilityUIElement::language):
        (AccessibilityUIElement::lineForIndex):
        (AccessibilityUIElement::selectedTextRange):
        (AccessibilityUIElement::url):
        * DumpRenderTree/efl/AccessibilityControllerEfl.cpp:
        (AccessibilityController::accessibleElementById):
        * DumpRenderTree/gtk/AccessibilityControllerGtk.cpp:
        (AccessibilityController::accessibleElementById):
        * DumpRenderTree/gtk/DumpRenderTree.cpp:
        (getOutputDir):
        (getFontsPath):
        (initializeFonts):
        (dumpFramesAsText):
        (compareHistoryItems):
        (dumpHistoryItem):
        (soupURIToStringPreservingPassword):
        (resetDefaultsToConsistentValues):
        (temporaryDatabaseDirectory):
        (webViewTitleChanged):
        (webFrameLoadStatusNotified):
        (pathFromSoupURI):
        (convertWebResourceToURLPath):
        (urlSuitableForTestResult):
        (descriptionSuitableForTestResult):
        (willSendRequestCallback):
        (frameLoadEventCallback):
        * DumpRenderTree/gtk/EditingCallbacks.cpp:
        (dumpNodePath):
        (dumpRange):
        (shouldApplyStyle):
        * DumpRenderTree/gtk/EventSender.cpp:
        (contextClickCallback):
        (beginDragWithFilesCallback):
        * DumpRenderTree/gtk/TestRunnerGtk.cpp:
        (TestRunner::pathToLocalResource):
        (TestRunner::queueLoad):
        (TestRunner::removeOriginAccessWhitelistEntry):
        (TestRunner::setMockGeolocationPositionUnavailableError):
        (TestRunner::setIconDatabaseEnabled):
        (TestRunner::findString):
        (TestRunner::setDomainRelaxationForbiddenForURLScheme):
        (TestRunner::overridePreference):
        (TestRunner::addUserScript):
        (TestRunner::addUserStyleSheet):
        (TestRunner::setTextDirection):
        * DumpRenderTree/gtk/TextInputController.cpp:
        (setMarkedTextCallback):
        (insertTextCallback):
        (doCommandCallback):
        * DumpRenderTree/gtk/WorkQueueItemGtk.cpp:
        (LoadHTMLStringItem::invoke):
        * TestWebKitAPI/PlatformGTK.cmake:
        * TestWebKitAPI/Tests/WebKit2Gtk/DOMNodeTest.cpp:
        (WebKitDOMNodeTest::testTagNames):
        * TestWebKitAPI/Tests/WebKit2Gtk/TestBackForwardList.cpp:
        (testBackForwardListLimitAndCache):
        * TestWebKitAPI/Tests/WebKit2Gtk/TestContextMenu.cpp:
        (testContextMenuSmartSeparators):
        * TestWebKitAPI/Tests/WebKit2Gtk/TestCookieManager.cpp:
        * TestWebKitAPI/Tests/WebKit2Gtk/TestDownloads.cpp:
        (testDownloadLocalFile):
        (testDownloadLocalFileError):
        (addContentDispositionHTTPHeaderToResponse):
        (serverCallback):
        (testDownloadRemoteFileError):
        * TestWebKitAPI/Tests/WebKit2Gtk/TestInspectorServer.cpp:
        (startTestServer):
        (testInspectorServerPageList):
        (openRemoteDebuggingSession):
        * TestWebKitAPI/Tests/WebKit2Gtk/TestPrinting.cpp:
        (testPrintOperationPrint):
        * TestWebKitAPI/Tests/WebKit2Gtk/TestResources.cpp:
        (addCacheHTTPHeadersToResponse):
        (serverCallback):
        * TestWebKitAPI/Tests/WebKit2Gtk/TestSSL.cpp:
        (httpsServerCallback):
        (httpServerCallback):
        * TestWebKitAPI/Tests/WebKit2Gtk/TestUIClient.cpp:
        (testWebViewJavaScriptDialogs):
        (testWebViewWindowProperties):
        (testWebViewFileChooserRequest):
        * TestWebKitAPI/Tests/WebKit2Gtk/TestWebExtensions.cpp:
        (testWebExtensionWindowObjectCleared):
        (testWebExtensionIsolatedWorld):
        * TestWebKitAPI/Tests/WebKit2Gtk/TestWebKitAccessibility.cpp:
        (startTestServer):
        (checkAtspiAccessible):
        * TestWebKitAPI/Tests/WebKit2Gtk/TestWebKitFaviconDatabase.cpp:
        (serverCallback):
        (testClearDatabase):
        (testGetFaviconURI):
        (webkitFaviconDatabaseFinalizedCallback):
        * TestWebKitAPI/Tests/WebKit2Gtk/TestWebKitWebContext.cpp:
        (testWebContextGetPlugins):
        (testWebContextURIScheme):
        * TestWebKitAPI/Tests/WebKit2Gtk/TestWebKitWebView.cpp:
        (testWebViewRunJavaScript):
        (testWebViewMode):
        (testWebViewPageVisibility):
        * TestWebKitAPI/Tests/WebKit2Gtk/TestWebKitWebViewGroup.cpp:
        (isStyleSheetInjectedForURLAtPath):
        * TestWebKitAPI/Tests/WebKit2Gtk/TestWebViewEditor.cpp:
        (testWebViewEditorCutCopyPasteNonEditable):
        (testWebViewEditorCutCopyPasteEditable):
        (testWebViewEditorSelectAllNonEditable):
        (testWebViewEditorSelectAllEditable):
        * TestWebKitAPI/Tests/WebKit2Gtk/WebExtensionTest.cpp:
        (sendRequestCallback):
        (methodCallCallback):
        * TestWebKitAPI/gtk/PlatformUtilitiesGtk.cpp:
        (TestWebKitAPI::Util::createInjectedBundlePath):
        (TestWebKitAPI::Util::createURLForResource):
        * TestWebKitAPI/gtk/PlatformWebViewGtk.cpp:
        (TestWebKitAPI::doKeyStroke):
        (TestWebKitAPI::doMouseButtonEvent):
        (TestWebKitAPI::PlatformWebView::simulateMouseMove):
        * TestWebKitAPI/gtk/WebKit2Gtk/LoadTrackingTest.cpp:
        (loadFailedCallback):
        (LoadTrackingTest::loadURI):
        (LoadTrackingTest::loadHtml):
        (LoadTrackingTest::loadPlainText):
        (LoadTrackingTest::loadRequest):
        (LoadTrackingTest::reload):
        (LoadTrackingTest::goBack):
        (LoadTrackingTest::goForward):
        * TestWebKitAPI/gtk/WebKit2Gtk/LoadTrackingTest.h:
        * TestWebKitAPI/gtk/WebKit2Gtk/TestMain.cpp:
        (registerGResource):
        (removeNonEmptyDirectory):
        (main):
        * TestWebKitAPI/gtk/WebKit2Gtk/TestMain.h:
        (Test::getWebKit1TestResoucesDir):
        (Test::getResourcesDir):
        * TestWebKitAPI/gtk/WebKit2Gtk/WebKitTestBus.cpp:
        (WebKitTestBus::run):
        * TestWebKitAPI/gtk/WebKit2Gtk/WebKitTestServer.cpp:
        (WebKitTestServer::WebKitTestServer):
        (WebKitTestServer::getURIForPath):
        * TestWebKitAPI/gtk/WebKit2Gtk/WebProcessTestRunner.cpp:
        (WebProcessTestRunner::runTest):
        * TestWebKitAPI/gtk/WebKit2Gtk/WebViewTest.cpp:
        (resourceGetDataCallback):
        (WebViewTest::mainResourceData):
        (WebViewTest::mouseMoveTo):
        (WebViewTest::keyStroke):
        (WebViewTest::doMouseButtonEvent):
        * TestWebKitAPI/gtk/WebKit2Gtk/WebViewTest.h:
        * WebKitTestRunner/InjectedBundle/atk/AccessibilityControllerAtk.cpp:
        (WTR::AccessibilityController::accessibleElementById):
        * WebKitTestRunner/InjectedBundle/atk/AccessibilityNotificationHandlerAtk.cpp:
        * WebKitTestRunner/InjectedBundle/atk/AccessibilityUIElementAtk.cpp:
        (WTR::AccessibilityUIElement::role):
        (WTR::AccessibilityUIElement::title):
        (WTR::AccessibilityUIElement::description):
        (WTR::AccessibilityUIElement::stringValue):
        (WTR::AccessibilityUIElement::language):
        (WTR::AccessibilityUIElement::lineForIndex):
        (WTR::AccessibilityUIElement::selectedTextRange):
        (WTR::AccessibilityUIElement::url):
        * WebKitTestRunner/InjectedBundle/gtk/ActivateFontsGtk.cpp:
        (WTR::getOutputDir):
        (WTR::getFontsPath):
        (WTR::initializeFontConfigSetting):
        * WebKitTestRunner/InjectedBundle/gtk/InjectedBundleUtilities.cpp:
        (WTR::topLevelPath):
        * WebKitTestRunner/InjectedBundle/gtk/TestRunnerGtk.cpp:
        (WTR::TestRunner::pathToLocalResource):
        * WebKitTestRunner/gtk/TestControllerGtk.cpp:
        (WTR::TestController::initializeInjectedBundlePath):
        (WTR::TestController::initializeTestPluginDirectory):

2014-01-05  Martin Robinson  <mrobinson@igalia.com>

        [GTK] [CMake] run-webkit-tests should support the CMake build
        https://bugs.webkit.org/show_bug.cgi?id=126503

        Reviewed by Daniel Bates.

        Update run-launcher and gtk.py to work properly when dealing with the CMake port.
        run-webkit-tests does not need the --gtkcmake flag, but run-launcher does.

        * Scripts/run-launcher: Work properly with the gtkcmake flag.
        * Scripts/webkitpy/port/gtk.py:
        (GtkPort._is_cmake_build): Added this helper which looks for the CMakeCache
        file to detect a CMake build.
        (GtkPort._built_executables_path): Added this helper to locate the built executable path.
        (GtkPort._built_libraries_path): Added this helper to locate the built library path.
        (GtkPort._port_flag_for_scripts): Use --gtkcmake when appropriate.
        (GtkPort.setup_environ_for_server): The way CMake builds libraries differs from GTK+.
        (GtkPort._path_to_driver): Use the new helper.
        (GtkPort._path_to_image_diff): Use the new helper.
        (GtkPort._path_to_webcore_library): Use the new helper.
        (GtkPort.build_webkit_command): Use --gtkcmake when appropriate.

2014-01-22  Ryuan Choi  <ryuan.choi@samsung.com>

        [EFL] Remove unnecessary smart method since ewk_view_tiled removed
        https://bugs.webkit.org/show_bug.cgi?id=127417

        Reviewed by Gyuyoung Kim.

        * EWebLauncher/main.c:
        (on_key_down): Removed shortcut to test pre render.

2014-01-22  Myles C. Maxfield  <mmaxfield@apple.com>

        Remove CSS3_TEXT_DECORATION define
        https://bugs.webkit.org/show_bug.cgi?id=127333

        This is required for unprefixing the text-decoration-* CSS properties.

        Reviewed by Simon Fraser.

        * Configurations/FeatureDefines.xcconfig:

2014-01-22  Andy Estes  <aestes@apple.com>

        [iOS] Prepare for upstreaming DumpRenderTree changes
        https://bugs.webkit.org/show_bug.cgi?id=127412

        Reviewed by Simon Fraser.

        Unlike on Mac where DumpRenderTree is a command-line tool, on iOS it is
        an application bundle. Instead of upstreaming a separate target for the
        app that duplicates the 'Compile Sources' phase of the tool, separate
        out the compilation into a static library target that both the
        command-line tool and the app can link against. Also, perform some
        unrelated cleanup.

        * DumpRenderTree/DumpRenderTree.xcodeproj/project.pbxproj: Updated the
        project file format from 2.4- to 3.2-compatible. Removed the
        'Copy Headers' build phase and removed all files from the
        'Compile Sources' build phase of DumpRenderTree. Added some files that
        were missing from the project. Created a 'DumpRenderTree (Library)'
        target for building the static library and made the 'DumpRenderTree'
        target depend on it. Added a 'Compile Sources' build phase to this
        target that builds the same files the DumpRenderTree target used to.
        Created DumpRenderTreeMain.mm as the only source file of the
        DumpRenderTree target, since targets won't link a binary without at
        least one source file. Made DumpRenderTree (Library) use
        DumpRenderTreeLibrary.xcconfig and made LayoutTestHelper use
        BaseTarget.xcconfig (so that it doesn't try to link libDumpRenderTree.a).
        * DumpRenderTree/mac/Configurations/BaseTarget.xcconfig: Moved
        definitions of GCC_ENABLE_OBJC_EXCEPTIONS and GCC_PREFIX_HEADER from
        DumpRenderTree.xcconfig to here so that LayoutTestHelper can use them.
        * DumpRenderTree/mac/Configurations/DumpRenderTree.xcconfig: Passed
        -force_load $(BUILT_PRODUCTS_DIR)libDumpRenderTree.a to OTHER_LDFLAGS.
        This is needed to correctly link a static library containing an Objective-C
        category (see <https://developer.apple.com/library/mac/qa/qa1490/_index.html>).
        * DumpRenderTree/mac/Configurations/DumpRenderTreeLibrary.xcconfig: Added.
        * DumpRenderTree/mac/DumpRenderTree.mm:
        (DumpRenderTreeMain): Renamed from main.
        * DumpRenderTree/mac/DumpRenderTreeMac.h: Added declaration of DumpRenderTreeMain.
        * DumpRenderTree/mac/DumpRenderTreeMain.mm: Added.
        (main): Called DumpRenderTreeMain from main.

2014-01-15  Martin Robinson  <mrobinson@igalia.com>

        [GTK][CMake] build-webkit should try harder to avoid re-running cmake
        https://bugs.webkit.org/show_bug.cgi?id=127073

        Reviewed by Daniel Bates.

        * Scripts/build-webkit: Unify all the ports that call buildCMakeProjectOrExit with
        the new isCMakeBuild conditional. This allows us to share more code between ports.
        Pass the build arguments to the removeCMakeCache function.
        * Scripts/webkitdirs.pm:
        (runAutogenForAutotoolsProjectIfNecessary): Renamed mustReRunAutogen to cachedArgumentFileOutOfDate
        because it's now shared with the CMake build.
        (cachedArgumentFileOutOfDate): Renamed.
        (cmakeCachePath): Added this helper which gets the CMakeCache.txt path.
        (shouldRemoveCMakeCache): Tries to preserve current behavior for all ports, 
        except GTK+ which examines the OptionsGTK.cmake and OptionsCommon.cmake file
        as well as checking if build-webkit has been run with different arguments.
        (removeCMakeCache): Call shouldRemoveCMakeCache now.
        (generateBuildSystemFromCMakeProject): Exit early if CMakeCache.txt exists for GTK+.
        (isCMakeBuild): Added.

2014-01-22  Thiago de Barros Lacerda  <thiago.lacerda@openbossa.org>

        [EFL][GTK] Get EFL and GTK compiling with ACCESSIBILITY disabled
        https://bugs.webkit.org/show_bug.cgi?id=127119

        Reviewed by Mario Sanchez Prada.

        Guarding ACCESSIBILITY code in DumpRenderTree and WebKitTestRunner with HAVE(ACCESSIBILITY).

        * DumpRenderTree/efl/DumpRenderTreeChrome.cpp:
        * DumpRenderTree/gtk/AccessibilityControllerGtk.cpp:
        * DumpRenderTree/gtk/DumpRenderTree.cpp:
        (resetDefaultsToConsistentValues):
        (webViewWindowObjectCleared):
        (main):
        * WebKitTestRunner/InjectedBundle/AccessibilityController.cpp:
        (WTR::AccessibilityController::platformName):
        * WebKitTestRunner/InjectedBundle/AccessibilityUIElement.cpp:
        (WTR::AccessibilityUIElement::isIndeterminate):

2014-01-22  Carlos Garcia Campos  <cgarcia@igalia.com>


        [GTK] Add GUniquePtr
        https://bugs.webkit.org/show_bug.cgi?id=127170

        Reviewed by Gustavo Noronha Silva.

        Add unit tests for GUniquePtr.

        * TestWebKitAPI/GNUmakefile.am: Add new file to compilation.
        * TestWebKitAPI/Tests/WTF/gobject/GUniquePtr.cpp: Added.
        (log):
        (takeLogStr):
        (TestWebKitAPI::TEST):

2014-01-22  Jinwoo Song  <jinwoo7.song@samsung.com>

        Remove Nix files from Tools
        https://bugs.webkit.org/show_bug.cgi?id=127418

        Reviewed by Csaba Osztrogonác.

        * Scripts/build-webkit:
        * Scripts/update-webkit-libs-jhbuild:
        * Scripts/webkitdirs.pm:
        (determineArchitecture):
        (argumentsForConfiguration):
        (jscProductDir):
        (builtDylibPathForName):
        (isAppleWebKit):
        (launcherPath):
        (launcherName):
        (checkRequiredSystemConfig):
        (copyInspectorFrontendFiles):
        (jhbuildWrapperPrefixIfNeeded):
        (buildCMakeProjectOrExit):
        (cmakeBasedPortName):
        * Scripts/webkitpy/common/config/ports.py:
        (DeprecatedPort.port):
        (EflWK2Port.build_webkit_command):
        * Scripts/webkitpy/port/factory.py:
        (platform_options):
        (PortFactory):
        * Scripts/webkitpy/port/nix.py: Removed.
        * Scripts/webkitpy/port/nix_unittest.py: Removed.

2014-01-21  Benjamin Poulain  <benjamin@webkit.org>

        Add Ian and Ricky to the contributor list

        * Scripts/webkitpy/common/config/contributors.json:
        I am too old to remember all those email addresses :)

2014-01-21  David Farler  <dfarler@apple.com>

        Upstream package-root for iOS

        Reviewed by Daniel bates.

        * Scripts/package-root: Added.
        (usage):
        * Scripts/webkitdirs.pm:
        (XcodeSDKPath): Added function.

2014-01-21  Daniel Bates  <dabates@apple.com>

        [iOS] Tools/Makefile shouldn't build modules DumpRenderTree, gtest, or TestWebKitAPI
        https://bugs.webkit.org/show_bug.cgi?id=127368

        Reviewed by Tim Horton.

        Similar to the build-webkit change in <https://bugs.webkit.org/show_bug.cgi?id=127364>,
        we don't want to build DumpRenderTree, gtest, or TestWebKitAPI when running make in
        Tools.

        * Makefile:

2014-01-21  Daniel Bates  <dabates@apple.com>

        [iOS] Don't build DumpRenderTree, gtest, or TestWebKitAPI
        https://bugs.webkit.org/show_bug.cgi?id=127364

        Reviewed by Simon Fraser.

        For now, don't build DumpRenderTree and TestWebKitAPI for iOS as these
        projects fail to build because we need to upstream the relevant iOS changes.
        Also, don't build gtest, which is a dependency of TestWebKitAPI since we
        aren't building TestWebKitAPI.

        * Scripts/build-webkit:

2014-01-21  Raphael Kubo da Costa  <raphael.kubo.da.costa@intel.com>

        Unreviewed, remove myself from some watchlist entries.

        * Scripts/webkitpy/common/config/watchlist:

2014-01-21  Zalan Bujtas  <zalan@apple.com>

        Use 64 as the default value for the subpixel denominator.

        Reviewed by Simon Fraser.

        * lldb/lldb_webkit.py:
        (WebCoreLayoutUnitProvider.to_string):

2014-01-21  ChangSeok Oh  <changseok.oh@collabora.com>

        [GTK] Fix a c++11 compliance issue for fontconfig
        https://bugs.webkit.org/show_bug.cgi?id=127283

        Reviewed by Martin Robinson.

        fontconfig-2.8.0 is not compliant with C++11. So I propose to apply a
        hotfix until bumping fontconfig up.

        * gtk/jhbuild.modules:
        * gtk/patches/fontconfig-C-11-requires-a-space-between-literal-and-identifier.patch: Added.

2014-01-21  Peter Molnar  <pmolnar.u-szeged@partner.samsung.com>

        run-jsc-stress-tests should accept --child-processes option and WEBKIT_TEST_CHILD_PROCESSES env.var
        like run_webkit_test does
        https://bugs.webkit.org/show_bug.cgi?id=127349

        Reviewed by Csaba Osztrogonác.

        * Scripts/run-jsc-stress-tests:

2014-01-21  Adrian Perez de Castro  <aperez@igalia.com>

        [GTK] Allow passing extra data to web extensions
        https://bugs.webkit.org/show_bug.cgi?id=125990

        Reviewed by Carlos Garcia Campos.

        Allow passing additional information to the injected bundle. On top
        of the string containing the path to the web extensions directory,
        a GVariant can be set with additional data using
        webkit_web_context_set_web_extensions_initialization_user_data().
        Also, a new initialize-web-extensions signal is emitted before
        launching a new WebProcess to allow setting different user data
        for each process. The GVariant is serialized as a string, passed
        to the injected bundle, and the injected bundle deserializes back
        the data, which is passed to web extensions which define the
        webkit_web_extension_initialize_with_user_data() function (for
        backwards compatibility, webkit_web_extension_initialize() is
        used as a fallback.)

        * TestWebKitAPI/Tests/WebKit2Gtk/TestWebExtensions.cpp:
        (initializeWebExtensions): Handles the initialize-web-extensions
        signal, and sets the web extensions directory and the initialization
        user data.
        (testWebExtensionInitializationUserData): New test case for checking
        the user data passed on initialization to web extensions.
        * TestWebKitAPI/Tests/WebKit2Gtk/WebExtensionTest.cpp:
        (methodCallCallback): Added implementation for the
        GetInitializationUserData D-Bus method, used by
        testWebExtensionInitializationUserData().
        (webkit_web_extension_initialize_with_user_data): Define the
        initialization function with the additional user data parameter.

2014-01-21  Siddharth Mathur  <s.mathur@ieee.org>

        Change my email address in contributors.json.

        Unreviewed.

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

2014-01-21  Krzysztof Czech  <k.czech@samsung.com>

        [ATK] Expose aria-flowto through ATK_RELATION_FLOWS_TO
        https://bugs.webkit.org/show_bug.cgi?id=127291

        Reviewed by Mario Sanchez Prada.

        Implemented AccessibilityUIElement::ariaFlowToElementAtIndex method.

        * DumpRenderTree/atk/AccessibilityUIElementAtk.cpp:
        (AccessibilityUIElement::ariaFlowToElementAtIndex):
        * WebKitTestRunner/InjectedBundle/atk/AccessibilityUIElementAtk.cpp:
        (WTR::AccessibilityUIElement::ariaFlowToElementAtIndex):

2014-01-20  Zalan Bujtas  <zalan@apple.com>

        Force float division when calculating CSS px value.

        Reviewed by Simon Fraser.

        Note that in Python 3, this is the default behavior.

        * lldb/lldb_webkit.py:
        (WebCoreLayoutUnitProvider.to_string):

2014-01-20  Alexey Proskuryakov  <ap@apple.com>

        build.webkit.org/dashboard should display information about patches in EWS
        https://bugs.webkit.org/show_bug.cgi?id=127006

        Reviewed by Ryosuke Niwa.

        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/index.html:
        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Scripts/Bugzilla.js: Added.
        (Bugzilla.prototype.detailsURLForAttachment):
        Added a class for Bugzilla. So far, the only thing it can do is build patch URLs,
        which is needed when one wants to do something with a patch EWS is stuck on.

        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Scripts/Initialization.js:
        Create a Bugzilla instance.

        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Scripts/EWS.js:
        (EWS.prototype.jsonQueueLengthURL):
        (EWS.prototype.jsonQueueStatusURL):
        Build JSON ULRs here, not in EWSQueue, as this is how other classes are structured.

        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Scripts/EWSQueue.js:
        (EWSQueue.prototype.get statusPageURL): Changed to use a URL provided by EWS instead
        of second guessing.
        (EWSQueue.prototype.get chartsPageURL): Added.
        (EWSQueue.prototype.get loadedDetailedStatus): Tells whether we currently have
        additional data already loaded (it's reset with every update).
        (EWSQueue.prototype.get patches): Get patch queue.
        (EWSQueue.prototype.get bots): Get bots.
        (EWSQueue.prototype.update): Changed to use a specialized cheaper URL.
        (EWSQueue.prototype.loadDetailedStatus): Load and transform detailed status JSON.

        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Scripts/EWSQueueView.js:
        (EWSQueueView.prototype.update.appendQueue): Add a popover is there are any patches
        in the queue.
        (EWSQueueView.prototype.addLinkToRow): A helper to build the popover.
        (EWSQueueView.prototype.addTextToRow): Ditto.
        (EWSQueueView.prototype._addQueueHeadingToPopover): Ditto.
        (EWSQueueView.prototype._addBotsHeadingToPopover): Ditto.
        (EWSQueueView.prototype._addDividerToPopover): Ditto.
        (EWSQueueView.prototype._timeIntervalString): A helper to format a timestamp into a
        relative string.
        (EWSQueueView.prototype._popoverContentForEWSQueue): Build the popover.
        (EWSQueueView.prototype._presentPopoverForEWSQueue): Start loading data, and present
        it when done.

        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Styles/QueueView.css:
        Added rules for EWS popover. Removed a duplicate rule for build-logs-popover.
        Changed a few difficult to read padding styles to padding-left.

2014-01-20  Alexey Proskuryakov  <ap@apple.com>

        Fix webkitpy tests.

        * Scripts/webkitpy/common/net/web_mock.py: (MockBrowser.set_handle_robots):
        Added a mock implementation, as we now call this function.

2014-01-20  Darin Adler  <darin@apple.com>

        Update style checker and tests to deal with override instead of OVERRIDE
        https://bugs.webkit.org/show_bug.cgi?id=127175

        Reviewed by Anders Carlsson.

        * Scripts/webkitpy/style/checkers/cpp.py:
        (check_braces): Use override instead of OVERRIDE.
        * Scripts/webkitpy/style/checkers/cpp_unittest.py:
        (CppStyleTest.test_brace_at_begin_of_line): Ditto.

2014-01-20  Alexey Proskuryakov  <ap@apple.com>

        EWS should provide better information to Dashboard via JSON
        https://bugs.webkit.org/show_bug.cgi?id=127265

        Reviewed by Ryosuke Niwa.

        * QueueStatusServer/app.yaml: Updated version.

        * QueueStatusServer/main.py:
        * QueueStatusServer/handlers/queuelengthjson.py:
        Added a way to cheaply get only the queue length, which is all the dashboard
        needs unless a popover is opened.

        * QueueStatusServer/handlers/queuestatusjson.py: Updated to return more information
        that we will need. Changed some field names to be more meaningful. Fixed bot listing
        to understand that a bot can be reprurposed and used in a different queue.

2014-01-20  Alexey Proskuryakov  <ap@apple.com>

        Make uploading results to EWS work despite robots.txt
        https://bugs.webkit.org/show_bug.cgi?id=127296

        Reviewed by Ryosuke Niwa.

        * Scripts/webkitpy/common/net/statusserver.py: (StatusServer.__init__): Disable
        checking robots.txt.

        * Scripts/webkitpy/common/net/bugzilla/bugzilla.py: (Bugzilla._get_browser):
        Removed a comment saying that we would want to stop doing this. Not checking
        robots.txt is more efficient than checking it.

2014-01-19  Ryuan Choi  <ryuan.choi@samsung.com>

        [EFL][WK1] Remove and refactor the APIs which use single and base keyword
        https://bugs.webkit.org/show_bug.cgi?id=127214

        Reviewed by Gyuyoung Kim.

        Followed the changes of API.

        * DumpRenderTree/efl/DumpRenderTreeView.cpp:
        (drtViewAdd):
        * EWebLauncher/main.c:
        (windowCreate):

2014-01-19  Eunmi Lee  <eunmi15.lee@samsung.com>

        [EFL][WK2] Add touch events option to MiniBrowser.
        https://bugs.webkit.org/show_bug.cgi?id=127262

        Reviewed by Gyuyoung Kim.

        As a default, touch events are disabled and mouse events are enabled.
        If touch events option sets to true, touch events are enabled and mouse
        events are disabled.

        * MiniBrowser/efl/main.c:
        (window_create):
        (elm_main):

2014-01-19  Zalan Bujtas  <zalan@apple.com>

        Pretty print LayoutUnit, LayoutPoint, and LayoutSize in lldb and gdb.
        https://bugs.webkit.org/show_bug.cgi?id=126080

        Reviewed by Sam Weinig.

        This changes the output of printing LayoutUnits to be in px but it also
        preserves the original LayoutUnit value.

        This will lead to lldb output like: (and it works even when subpixel is disabled)

        (const WebCore::LayoutRect) $0 = {
            m_location = { x = 2.25px (144), y = 1px (64)}
            m_size = { width = 13.75px (880), height = 20px (1280) }


        And gdb output like:

        m_frameRect = {
            m_location = LayoutPoint(0px (0), 0px(0)),
            m_size = LayoutSize(8px (512), 5px (320))
        }

        This patch is based on patch by bjonesbe@adobe.com and for Blink by cbiesinger@chromium.org.

        * gdb/webkit.py:
        (WebCoreLayoutUnitPrinter):
        (WebCoreLayoutUnitPrinter.__init__):
        (WebCoreLayoutUnitPrinter.to_string):
        (WebCoreLayoutSizePrinter):
        (WebCoreLayoutSizePrinter.__init__):
        (WebCoreLayoutSizePrinter.to_string):
        (WebCoreLayoutPointPrinter):
        (WebCoreLayoutPointPrinter.__init__):
        (WebCoreLayoutPointPrinter.to_string):
        (add_pretty_printers):
        * lldb/lldb_webkit.py:
        (__lldb_init_module):
        (WebCoreLayoutUnit_SummaryProvider):
        (WebCoreLayoutSize_SummaryProvider):
        (WebCoreLayoutPoint_SummaryProvider):
        (WebCoreLayoutUnitProvider):
        (WebCoreLayoutUnitProvider.__init__):
        (WebCoreLayoutUnitProvider.to_string):
        (WebCoreLayoutSizeProvider):
        (WebCoreLayoutSizeProvider.__init__):
        (WebCoreLayoutSizeProvider.get_width):
        (WebCoreLayoutSizeProvider.get_height):
        (WebCoreLayoutPointProvider):
        (WebCoreLayoutPointProvider.__init__):
        (WebCoreLayoutPointProvider.get_x):
        (WebCoreLayoutPointProvider.get_y):

2014-01-18  Alexey Proskuryakov  <ap@apple.com>

        Add robots.txt to http://webkit-queues.appspot.com
        https://bugs.webkit.org/show_bug.cgi?id=127240

        * QueueStatusServer/app.yaml: Added required "upload" attribute for robots.txt.

2014-01-18  Alexey Proskuryakov  <ap@apple.com>

        Add robots.txt to http://webkit-queues.appspot.com
        https://bugs.webkit.org/show_bug.cgi?id=127240

        Reviewed by Ryosuke Niwa.

        * QueueStatusServer/app.yaml: Added robots.txt as a static file. Updated version.

        * QueueStatusServer/robots.txt: Added.

2014-01-18  Alberto Garcia  <berto@igalia.com>

        Tools/Scripts/test-webkitperl fails: 'tempdir' can't be called as a method
        https://bugs.webkit.org/show_bug.cgi?id=127217

        Reviewed by Daniel Bates.

        The syntax File::Temp->tempdir() was explicitly made invalid
        following <https://github.com/Perl-Toolchain-Gang/File-Temp/commit/c8920b2161ab6900a09e02b9410e0e4c3d74f565>
        which was included in File::Temp v2.30, shipped with Perl v5.18.0.

        Use File::Temp::tempdir() instead.

        * Scripts/webkitperl/VCSUtils_unittest/parseDiffWithMockFiles.pl:

2014-01-18  Alexey Proskuryakov  <ap@apple.com>

        build.webkit.org/dashboard should have image diff links in test results popovers
        https://bugs.webkit.org/show_bug.cgi?id=127188

        Reviewed by Timothy Hatcher.

        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Scripts/Buildbot.js:
        (Buildbot.prototype.layoutTestImagesURLForIteration):
        (Buildbot.prototype.layoutTestImageDiffURLForIteration):
        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Scripts/BuildbotIteration.js:
        (BuildbotIteration.prototype.loadLayoutTestResults):
        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Scripts/BuildbotTesterQueueView.js:
        (BuildbotTesterQueueView.prototype._popoverContentForLayoutTestRegressions.addFailureInfoLink):
        (BuildbotTesterQueueView.prototype._popoverContentForLayoutTestRegressions.addFailureInfoText):
        (BuildbotTesterQueueView.prototype._popoverContentForLayoutTestRegressions):

2014-01-18  Anders Carlsson  <andersca@apple.com>

        Remove ENABLE_THREADED_HTML_PARSER defines everywhere
        https://bugs.webkit.org/show_bug.cgi?id=127225

        Reviewed by Andreas Kling.

        This concludes the removal of over 8.8 million lines of threaded parser code.

        * Scripts/webkitperl/FeatureList.pm:

2014-01-17  Alexey Proskuryakov  <ap@apple.com>

        build.webkit.org/dashboard should have diff links in test results popovers
        https://bugs.webkit.org/show_bug.cgi?id=126986

        Reviewed by Tim Horton.

        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Scripts/Buildbot.js:
        (Buildbot.prototype.layoutTestCrashLogURLForIteration):
        (Buildbot.prototype.layoutTestStderrURLForIteration):
        (Buildbot.prototype.layoutTestDiffURLForIteration):
        (Buildbot.prototype.layoutTestPrettyDiffURLForIteration):
        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Scripts/BuildbotIteration.js:
        (BuildbotIteration.prototype.loadLayoutTestResults):
        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Scripts/BuildbotTesterQueueView.js:
        (BuildbotTesterQueueView.prototype._popoverContentForLayoutTestRegressions):

2014-01-17  Matthew Hanson  <matthew_hanson@apple.com>

        Add the bare minimum support for branches to the bot-watchers dashboard
        https://bugs.webkit.org/show_bug.cgi?id=127124

        This patch simply introduces the notion of branches into the bot-watchers dashboard.
        Subsequent patches will build functionality on top of this simple bit of infrastructure.

        Reviewed by Timothy Hatcher.

        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Scripts/BuildbotQueue.js:
        (BuildbotQueue): store the branch property in the BuildbotQueue constructor
        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Scripts/Dashboard.js:
        Initialize the Dashboard.Branch object

2014-01-17  Chris Fleizach  <cfleizach@apple.com>

        platform/mac/accessibility/aria-multiline.html sometimes asserts in AccessibilityController::removeNotificationListener
        https://bugs.webkit.org/show_bug.cgi?id=127141

        Reviewed by Alexey Proskuryakov.

        Make sure to reset the notification handler each time.

        * DumpRenderTree/AccessibilityController.cpp:
        (AccessibilityController::resetToConsistentState):
        * DumpRenderTree/AccessibilityController.h:
        * DumpRenderTree/atk/AccessibilityControllerAtk.cpp:
        (AccessibilityController::platformResetToConsistentState):
        * DumpRenderTree/ios/AccessibilityControllerIOS.mm:
        (AccessibilityController::platformResetToConsistentState):
        * DumpRenderTree/mac/AccessibilityControllerMac.mm:
        (AccessibilityController::~AccessibilityController):
        (AccessibilityController::platformResetToConsistentState):
        (AccessibilityController::removeNotificationListener):
        * DumpRenderTree/win/AccessibilityControllerWin.cpp:
        (AccessibilityController::platformResetToConsistentState):

2014-01-17  Alberto Garcia  <berto@igalia.com>

        [GTK] Test /webkit/download/not-found fails in GTK Linux 64-bit Release bot
        https://bugs.webkit.org/show_bug.cgi?id=82329

        Reviewed by Carlos Garcia Campos.

        Unskip, this is working fine now.

        * Scripts/run-gtk-tests:
        (TestRunner):

2014-01-17  Alberto Garcia  <berto@igalia.com>

        [GTK] Test /webkit/webview/icon-uri times out in GTK Linux 64-bit Release bot
        https://bugs.webkit.org/show_bug.cgi?id=82328

        Reviewed by Carlos Garcia Campos.

        This was caused by the icon database being corrupted in the
        Release bot. After removing it the test works fine so it can be
        run again.

        * Scripts/run-gtk-tests:
        (TestRunner):

2014-01-16  Alexey Proskuryakov  <ap@apple.com>

        Test results popovers at http://build.webkit.org/dashboard should link to stderr
        https://bugs.webkit.org/show_bug.cgi?id=126929

        Reviewed by Timothy Hatcher.

        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Scripts/Buildbot.js:
        (Buildbot.prototype.layoutTestCrashLogURLForIteration): Renamed for consistency.
        (Buildbot.prototype.layoutTestStderrURLForIteration): Added.

        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Scripts/BuildbotIteration.js:
        (BuildbotIteration.prototype.loadLayoutTestResults): Store has_stderr attribute.

        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Scripts/BuildbotTesterQueueView.js:
        (BuildbotTesterQueueView.prototype._popoverContentForLayoutTestRegressions):
        Add a link to stderr output if present.

        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Styles/QueueView.css:
        (.test-results-popover .additional-link): Style with light grey (will use the same style
        for diff links).

2014-01-16  Ryosuke Niwa  <rniwa@webkit.org>

        Automate DoYouEvenBench
        https://bugs.webkit.org/show_bug.cgi?id=124497

        Reviewed by Geoffrey Garen.

        * Scripts/webkitpy/performance_tests/perftest.py:
        (PerfTestMetric.__init__): Added the aggregator name as an argument.
        (PerfTestMetric.aggregator): Added.
        (PerfTest._metrics_regex): Made the subtest name match non-greedy so that the metric names will be
        won't be eagerly parsed as a part of the subtest name. e.g. "Time" and "Total" in "a:Time:Total"
        should be parsed as the metric and the aggregator respectively.
        (PerfTest._run_with_driver): Pass in the aggregator name.
        (PerfTest._ensure_metrics): Ditto. Also split the subtest name by / as required by DoYouEvenBench
        which generates subtests of subtests within a single test file.

        * Scripts/webkitpy/performance_tests/perftest_unittest.py:
        (test_parse_output_with_subtests_and_total): Added.

        * Scripts/webkitpy/performance_tests/perftestsrunner.py:
        (_generate_results_dict): Add the aggregator name to the JSON when one is available.

        * Scripts/webkitpy/performance_tests/perftestsrunner_integrationtest.py:
        (TestWithSubtestsData): Added a sub test with an aggregator and a sub-sub test.

2014-01-16  Chris Fleizach  <cfleizach@apple.com>

        platform/mac/accessibility/aria-multiline.html sometimes asserts in AccessibilityController::removeNotificationListener
        https://bugs.webkit.org/show_bug.cgi?id=127141

        Reviewed by Alexey Proskuryakov.

        Don't assert that the notification handler needs to be cleaned up. Deallocing the controller should be enough to clean up as it is.

        * DumpRenderTree/mac/AccessibilityControllerMac.mm:
        (AccessibilityController::~AccessibilityController):

2014-01-16  Ryosuke Niwa  <rniwa@webkit.org>

        EWS shouldn't comment on Bugzilla for failing builds or style errors
        https://bugs.webkit.org/show_bug.cgi?id=127079

        Reviewed by Anders Carlsson.

        Since patch authors and reviewers could retrieve this information from bubbles,
        we shouldn't spam the Bugzilla with useless comments.

        We still post style errors but not python paths we used since it's a pure noise.

        * Scripts/webkitpy/tool/commands/earlywarningsystem.py:
        (AbstractEarlyWarningSystem._post_reject_message_on_bug):
        * Scripts/webkitpy/tool/commands/queues.py:
        (StyleQueue.review_patch):

2014-01-15  Roger Fong  <roger_fong@apple.com>

        Add support for handling WebGL load policies.
        https://bugs.webkit.org/show_bug.cgi?id=126935
        <rdar://problem/15790448>.

        Reviewed by Timothy Horton.

        * WebKitTestRunner/TestController.cpp: Update WKPageLoaderClient to V4.
        (WTR::TestController::createWebViewWithOptions):

2014-01-16  Peter Molnar  <pmolnar.u-szeged@partner.samsung.com>

        Remove workaround for compilers not supporting explicit override control
        https://bugs.webkit.org/show_bug.cgi?id=127111

        Reviewed by Anders Carlsson.

        Now all compilers support explicit override control, this workaround can be removed.

        * DumpRenderTree/gtk/fonts/fonts.conf:
        * Scripts/do-webcore-rename:
        Removed this rename operation from the list of contemplated future renames.
        * TestWebKitAPI/Tests/WebKit2/DidAssociateFormControls_Bundle.cpp:
        * TestWebKitAPI/Tests/WebKit2/InjectedBundleFrameHitTest_Bundle.cpp:
        * TestWebKitAPI/Tests/WebKit2/WillLoad_Bundle.cpp:
        * TestWebKitAPI/Tests/WebKit2ObjC/CustomProtocolsInvalidScheme_Bundle.cpp:
        * TestWebKitAPI/Tests/mac/PageVisibilityStateWithWindowChanges.mm:

2014-01-16  Oliver Hunt  <oliver@apple.com>

        Stop run-jsc from consuming stderr output
        https://bugs.webkit.org/show_bug.cgi?id=127115

        Reviewed by Mark Lam.

        Simple patch to make run-jsc easier to deal with

        * Scripts/run-jsc:

2014-01-16  Eva Balazsfalvi  <balazsfalvi.eva@stud.u-szeged.hu>

        Tools/gtk/generate-feature-defines-files doesn't work with older versions of python
        https://bugs.webkit.org/show_bug.cgi?id=126323

        Reviewed by Csaba Osztrogonác.

        * gtk/generate-feature-defines-files:

2014-01-16  Michał Pakuła vel Rutka  <m.pakula@samsung.com>

        [EFL][WK2] Implement TestController::setHidden
        https://bugs.webkit.org/show_bug.cgi?id=127036

        Reviewed by Gyuyoung Kim.

        WebKitTestRunner needs TestController::setHidden implementation to
        properly handle page visibility API layout tests after r161105.

        * WebKitTestRunner/efl/TestControllerEfl.cpp:
        (WTR::TestController::setHidden):

2014-01-16  Zan Dobersek  <zdobersek@igalia.com>

        [GTK][MiniBrowser] The progress entry reset callback can be fired after the BrowserWindow is destroyed
        https://bugs.webkit.org/show_bug.cgi?id=127083

        Reviewed by Carlos Garcia Campos.

        When the load progress reaches 1.0 (i.e. 100%), a timeout callback is set up in webViewLoadProgressChanged.
        The progress entry is then reset back to 0 in that callback and the timeout source is removed.

        The callback can be fired after the relevant BrowserWindow and its progress entry are destroyed, causing
        assertion failures in gtk_entry_set_progress_fraction due to an invalid GtkEntry object. To avoid that,
        To avoid that, the ID of the timeout source is stored on the BrowserWindow and is destroyed when the
        BrowserWindow object is being finalized, preventing the callback from firing.

        * MiniBrowser/gtk/BrowserWindow.c:
        (resetEntryProgress):
        (webViewLoadProgressChanged):
        (browserWindowFinalize):

2014-01-15  Alexey Proskuryakov  <ap@apple.com>

        DumpRenderTree doesn't disable web preferences autosave
        https://bugs.webkit.org/show_bug.cgi?id=127062

        Reviewed by Dan Bernstein.

        * DumpRenderTree/mac/DumpRenderTree.mm: (prepareConsistentTestingEnvironment):
        Do it.

2014-01-15  Dean Jackson  <dino@apple.com>

        Improve filter-build-webkit, especially for iOS builds
        https://bugs.webkit.org/show_bug.cgi?id=81046

        Reviewed by Joseph Pecoraro.

        Lots of updates to the filtering rules, mostly from the
        iOS build output. Other highlights include:
        - ignoring escape sequences for color ouput
        - detecting escaped spaces in file name regexps

        * Scripts/filter-build-webkit:
        (shouldIgnoreLine):

2014-01-15  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] Web process sometimes crashes when printing in synchronous mode
        https://bugs.webkit.org/show_bug.cgi?id=126979

        Reviewed by Gustavo Noronha Silva.

        * Scripts/run-gtk-tests:
        (TestRunner): Unskip
        /webkit2/WebKitPrintOperation/close-after-print.

2014-01-15  ChangSeok Oh  <changseok.oh@collabora.com>

        [EFL] Change test font installed path to webkitgtk-font-tests
        https://bugs.webkit.org/show_bug.cgi?id=126723

        Reviewed by Gyuyoung Kim.

        I'd like to change the test fonts installed directory from 'webkitgtk-test-fonts-0.0.3'
        to 'webkitgtk-test-fonts'. webkitgtk-test-fonts-0.0.3 doesn't match the path
        hard-coded in FontManagement.cpp#105

        * DumpRenderTree/PlatformEfl.cmake:
        * WebKitTestRunner/PlatformEfl.cmake:
        * efl/jhbuild.modules:

2014-01-14  Ryosuke Niwa  <rniwa@webkit.org>

        Make DoYouEvenBench runnable by run-perf-tests
        https://bugs.webkit.org/show_bug.cgi?id=127030

        Reviewed by Andreas Kling.

        Ignore console messages spit out by DoYouEvenBench and support aggregator names such as
        ":Total" to appear at the end of a test name. We don't do anything with it for now.

        * Scripts/webkitpy/performance_tests/perftest.py:
        (PerfTest._metrics_regex): Handle aggregator names such as ":Total". We'll pass it down
        to the JSON in a follow up patch for the perf dashboard.
        (PerfTest._lines_to_ignore_in_parser_result): Added lines to ignore for DoYouEvenBench.

2014-01-14  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] UI process crashes when the web process crashes while printing
        https://bugs.webkit.org/show_bug.cgi?id=126977

        Reviewed by Gustavo Noronha Silva.

        Add new test case to check that closing the window right after
        printing works. It's skipped for now, because this patch only
        fixes the UI process crash, but not the web process one.

        * Scripts/run-gtk-tests:
        (TestRunner): Skip
        /webkit2/WebKitPrintOperation/close-after-print.
        * TestWebKitAPI/Tests/WebKit2Gtk/TestPrinting.cpp:
        (testPrintOperationPrintPrinter):
        (findPrintToFilePrinter):
        (testPrintOperationPrint):
        (testPrintOperationErrors):
        (testPrintOperationCloseAfterPrint):
        (beforeAll):

2014-01-14  Brent Fulgham  <bfulgham@apple.com>

        [WIN] Set MSBuild environment variable to avoid long-lived processes locking log files
        https://bugs.webkit.org/show_bug.cgi?id=127002

        Reviewed by David Kilzer.

        * Scripts/webkitdirs.pm:
        (setupAppleWinEnv): Export MSBUILDDISABLENODEREUSE=1 to the environment.

2014-01-14  Commit Queue  <commit-queue@webkit.org>

        Unreviewed, rolling out r162000.
        http://trac.webkit.org/changeset/162000
        https://bugs.webkit.org/show_bug.cgi?id=127009

        API versioning is wrong (Requested by rfong on #webkit).

        * MiniBrowser/mac/WK2BrowserWindowController.m:
        (-[WK2BrowserWindowController awakeFromNib]):
        * WebKitTestRunner/TestController.cpp:
        (WTR::TestController::createOtherPage):
        (WTR::TestController::createWebViewWithOptions):

2014-01-13  Roger Fong  <roger_fong@apple.com>

        Add support for handling WebGL load policies.
        https://bugs.webkit.org/show_bug.cgi?id=126935
        <rdar://problem/15790448>.

        Reviewed by Brent Fulgham.

        * MiniBrowser/mac/WK2BrowserWindowController.m:
        (-[WK2BrowserWindowController awakeFromNib]):
        * WebKitTestRunner/TestController.cpp:
        (WTR::TestController::createWebViewWithOptions):

2014-01-14  Zan Dobersek  <zdobersek@igalia.com>

        [GTK] Skip FontConfig initialization in WebKitTestRunner if requested
        https://bugs.webkit.org/show_bug.cgi?id=120110

        Reviewed by Martin Robinson.

        Skip the FontConfig settings initialization in WebKitTestRunner if the
        WEBKIT_SKIP_WEBKITTESTRUNNER_FONTCONFIG_INITIALIZATION environment variable is set.
        This is useful when profiling the WebKitTestRunner execution, where at the startup
        this step takes considerable amount of time and disturbs the profiling output.

        * WebKitTestRunner/InjectedBundle/gtk/ActivateFontsGtk.cpp:
        (WTR::initializeFontConfigSetting):

2014-01-14  Brian J. Burg  <burg@cs.washington.edu>

        Add ENABLE(WEB_REPLAY) feature flag to the build system
        https://bugs.webkit.org/show_bug.cgi?id=126949

        Reviewed by Joseph Pecoraro.

        * Scripts/webkitperl/FeatureList.pm:

2014-01-14  László Langó  <llango.u-szeged@partner.samsung.com>

        REGRESSION (r160085): check-webkit-style: utf8' codec can't decode byte 0x89 in position 0: invalid start byte.
        https://bugs.webkit.org/show_bug.cgi?id=126702

        Reviewed by Alexey Proskuryakov.

        Resolve regression and remove a FIXME comment that is already fixed.

        * Scripts/webkitpy/common/system/filesystem.py:
        (FileSystem.open_text_file_for_reading):
        * Scripts/webkitpy/common/system/filesystem_unittest.py:
        (RealFileSystemTest.test_read_and_write_file):
        * Scripts/webkitpy/style/filereader.py:
        (TextFileReader._read_lines):
        * Scripts/webkitpy/style/filereader_unittest.py:
        (TextFileReaderTest.test_count_delete_only_file):
        (TextFileReaderTest):
        (TextFileReaderTest.test_process_malformed_file):

2014-01-02  Brian Holt  <brian.holt@samsung.com>

        [GTK] Parse Valgrind xml leak files
        https://bugs.webkit.org/show_bug.cgi?id=119446

        Reviewed by Alejandro G. Castro.

        Parse the xml files generated by Valgrind to yield useful
        information about the memory leaks.

        * Scripts/webkitpy/port/gtk.py:
        (GtkPort.__init__):
        (GtkPort.setup_test_run): Clear the previous output files before new
        run.
        (GtkPort.print_leaks_summary):

        * Scripts/webkitpy/port/leakdetector_valgrind.py: Added.
        Parse the xml files generated by Valgrind and summarise leaks
        into an easily understandable list.
        (get_text_of):
        (get_CDATA_of):
        (gather_frames):
        (ValgrindError):
        (ValgrindError.__init__):
        (ValgrindError.__str__):
        (ValgrindError.unique_string):
        (ValgrindError.error_hash):
        (ValgrindError.__hash__):
        (ValgrindError.__eq__):
        (LeakDetectorValgrind):
        (LeakDetectorValgrind.__init__):
        (LeakDetectorValgrind._parse_leaks_output):
        (LeakDetectorValgrind.leaks_files_in_results_directory):
        (LeakDetectorValgrind.clean_leaks_files_from_results_directory):
        (LeakDetectorValgrind.parse_and_print_leaks_detail):

        * Scripts/webkitpy/port/leakdetector_valgrind_unittest.py: Added.
        (make_mock_valgrind_output):
        (make_mock_incomplete_valgrind_output):
        (make_mock_valgrind_results):
        (make_mock_valgrind_results_incomplete):
        (make_mock_valgrind_results_empty):
        (make_mock_valgrind_results_misformatted):
        (mock_run_cppfilt_command):
        (LeakDetectorValgrindTest):
        (LeakDetectorValgrindTest.test_parse_and_print_leaks_detail_pass):
        (LeakDetectorValgrindTest.test_parse_and_print_leaks_detail_incomplete):
        (LeakDetectorValgrindTest.test_parse_and_print_leaks_detail_empty):
        (LeakDetectorValgrindTest.test_parse_and_print_leaks_detail_misformatted):
        (LeakDetectorValgrindTest.test_parse_and_print_leaks_detail_pass):
        (LeakDetectorValgrindTest.test_parse_and_print_leaks_detail_incomplete):
        (LeakDetectorValgrindTest.test_parse_and_print_leaks_detail_empty):
        (LeakDetectorValgrindTest.test_parse_and_print_leaks_detail_misformatted):

2014-01-13  Lucas Forschler  <lforschler@apple.com>

        Update the LLINT CLoop Bot build infrastructure
        https://bugs.webkit.org/show_bug.cgi?id=126604
        
        Unreviewed.
        
        * BuildSlaveSupport/build.webkit.org-config/config.json:
        * BuildSlaveSupport/build.webkit.org-config/master.cfg:
        (CompileLLINTCLoop):
        (RunLLINTCLoopTests):
        (BuildAndTestLLINTCLoopFactory):
        (BuildAndTestLLINTCLoopFactory.__init__):

2014-01-13  Jinwoo Song  <jinwoo7.song@samsung.com>

        [EFL][WK2] Disable failing API tests
        https://bugs.webkit.org/show_bug.cgi?id=126960

        Reviewed by Gyuyoung Kim.

        Disable WKViewUserViewportToContents test until bug 126261 is resolved.

        * TestWebKitAPI/Tests/WebKit2/CoordinatedGraphics/WKViewUserViewportToContents.cpp:
        (TestWebKitAPI::TEST):

2014-01-13  Daniel Batyai  <dbatyai.u-szeged@partner.samsung.com>

        Remove wdiff
        https://bugs.webkit.org/show_bug.cgi?id=124766

        Reviewed by Ryosuke Niwa.

        * Scripts/webkitpy/common/net/resultsjsonparser_unittest.py:
        (ResultsJSONParserTest):
        * Scripts/webkitpy/layout_tests/controllers/test_result_writer.py:
        (TestResultWriter):
        (TestResultWriter.create_text_diff_and_write_result):
        * Scripts/webkitpy/layout_tests/models/test_run_results.py:
        (summarize_results):
        * Scripts/webkitpy/layout_tests/run_webkit_tests_integrationtest.py:
        (RunTest.test_output_diffs):
        * Scripts/webkitpy/port/base.py:
        (Port.__init__):
        (Port.driver_stop_timeout):
        (Port.check_image_diff):
        (Port.repository_paths):
        (Port._path_to_lighttpd_php):
        * Scripts/webkitpy/port/base_unittest.py:
        (PortTest.test_default_child_processes):
        (PortTest.test_pretty_patch_script_error):
        * Scripts/webkitpy/port/port_testcase.py:
        (PortTestCase.test_diff_image_crashed):
        * Scripts/webkitpy/port/test.py:
        (TestPort.operating_system):

2014-01-13  Martin Robinson  <mrobinson@igalia.com>

        Build fix for the GTK+ CMake port

        * TestWebKitAPI/PlatformGTK.cmake: The WKConnection test is no longer with us.

2014-01-13  Adrian Perez de Castro  <aperez@igalia.com>

        [GTK] Add cast in call to g_object_add_weak_pointer in MiniBrowser
        https://bugs.webkit.org/show_bug.cgi?id=126881

        Reviewed by Carlos Garcia Campos.

        * MiniBrowser/gtk/BrowserWindow.c:
        (browser_window_new):
        Explicitly cast GtkWindow** to gpointer* in call to
        g_object_add_weak_pointer to avoid compiler warnings.

2014-01-13  Peter Molnar  <pmolnar.u-szeged@partner.samsung.com>

        Remove parsing of old-run-webkit-tests output from master.cfg
        https://bugs.webkit.org/show_bug.cgi?id=126690

        Reviewed by Csaba Osztrogonác.

        * BuildSlaveSupport/build.webkit.org-config/master.cfg:
        Removed parsing of ORWT output, as it is not used anymore.
        * BuildSlaveSupport/build.webkit.org-config/mastercfg_unittest.py:
        Updated unit tests accordingly.

2014-01-13  Commit Queue  <commit-queue@webkit.org>

        Unreviewed, rolling out r161808.
        http://trac.webkit.org/changeset/161808
        https://bugs.webkit.org/show_bug.cgi?id=126874

        This patch make several files to be always regenerated on
        every make (Requested by KaL on #webkit).

        * WebKitTestRunner/GNUmakefile.am:

2014-01-13  Adrian Perez de Castro  <aperez@igalia.com>

        [GTK] Make MiniBrowser windows non-transient by default
        https://bugs.webkit.org/show_bug.cgi?id=126840

        Reviewed by Carlos Garcia Campos.

        Instead of making new browser windows transient as soon as they are
        created, save the pointer to the parent window and set the transient
        state later on when handling the "run-as-modal" signal. This makes
        it easier to use the MiniBrowser to do tests involving multiple
        windows, and will be useful as well when multi-web-process mode is
        enabled for the GTK port.

        * MiniBrowser/gtk/BrowserWindow.c:
        (webViewRunAsModal): Set the parent window using
        gtk_window_set_transient_for() using the saved parent
        window.
        (browser_window_new): Save the parent window using
        g_object_set_data() instead of making the new window
        transient immediately.

2014-01-12  Sergio Correia  <sergio.correia@openbossa.org>

        [EFL][WK2] Make API tests work again
        https://bugs.webkit.org/show_bug.cgi?id=126769

        Reviewed by Gyuyoung Kim.

        The EFL and WK2 test binaries are currently being generated at *TestWebKitAPI/
        [E]WebKit2, respectively, and this causes problems because the logic to find
        where WebProcess is to look in the same directory of the running process and
        then proceed to use LIBEXECDIR (typically /usr/loca/bin).

        This patch introduces a WEBKIT_EXEC_PATH environment variable, inspired in the
        Gtk port, which allows us to look for WebProcess initially in this directory,
        if it's defined.

        * TestWebKitAPI/efl/main.cpp:
        (main): Define WEBKIT_EXEC_PATH to be used by WebKit2 API tests.

2014-01-12  Daniel Bates  <dabates@apple.com>

        [iOS] Fix the build

        For now, ensure we build WebKit System Interface before we build WebKit.
        We'll remove this constraint and the constraint to build WebKit Additions
        in a subsequent commit.

        * Scripts/build-webkit:

2014-01-12  Carlos Garcia Campos  <cgarcia@igalia.com>

        Unreviewed. Fix make distcheck.

        * gtk/GNUmakefile.am: Add generate-inspector-gresource-manifest.py
        to EXTRA_DIST.

2014-01-12  Tobias Mueller  <tobiasmue@gnome.org>

        --disable-dependency-tracking causes build failure due to missing directories
        https://bugs.webkit.org/show_bug.cgi?id=94488

        Reviewed by Gustavo Noronha Silva.

        Autotools build fix: Ensure output directory existing
        before generating DerivedSources. This allows for
        --disable-dependency-tracking to be run.


        * WebKitTestRunner/GNUmakefile.am: Added a new target of the directory in which files are meant to be stored.

2014-01-12  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] Fix return value of WebKitDownload::created-destination
        https://bugs.webkit.org/show_bug.cgi?id=126741

        Reviewed by Martin Robinson.

        * TestWebKitAPI/Tests/WebKit2Gtk/TestDownloads.cpp: Fix return
        value of several callbacks.

2014-01-11  Sam Weinig  <sam@webkit.org>

        Add support for null StringViews
        https://bugs.webkit.org/show_bug.cgi?id=126827

        Reviewed by Anders Carlsson.

        Add new test for StringView.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WTF/StringView.cpp: Added.
        (TestWebKitAPI::TEST):

2014-01-10  Benjamin Poulain  <bpoulain@apple.com>

        Remove the BlackBerry port from trunk
        https://bugs.webkit.org/show_bug.cgi?id=126715

        Reviewed by Anders Carlsson.

        * DumpRenderTree/DumpRenderTree.h:
        * DumpRenderTree/PixelDumpSupport.cpp:

2014-01-10  Daniel Bates  <dabates@apple.com>

        [iOS] Fix project build order

        Ensure we build WebKitAdditions before WebCore (if applicable). Also, we don't
        build WebInspectorUI, Tools/MiniBrowser, or Tools/WebKitTestRunner on iOS at the
        time of writing.

        * Scripts/build-webkit:

2014-01-10  Mario Sanchez Prada  <mario.prada@samsung.com>

        Move platformName property from testRunner to accessibilityController
        https://bugs.webkit.org/show_bug.cgi?id=126689

        Reviewed by Chris Fleizach.

        Move the platformName property from the testRunner into
        accessibilityController, since this is a concept that has only be
        used by accessibility tests since it got added, and also because
        the real intention was not to distinguish among "ports" (mac, win,
        gtk, efl) but between platforms (atk, mac, win).

        This change will be very useful to merge GTK's roles-exposed.html
        and Mac's role-subrole-roledescription.html into one single test,
        since we will be specifying in the test itself which elements are
        supported in which accessibility "platform". In this context,
        being able to check accessibilityController.platformName directly
        against a list of supported accessibility platforms (e.g. "atk,mac")
        will certainly maintain the code cleaner and simpler.

        * DumpRenderTree/TestRunner.h:
        (TestRunner::platformName): Removed.
        * DumpRenderTree/TestRunner.cpp:
        (getPlatformNameCallback): Removed.
        (TestRunner::staticValues): Removed platformName
        * DumpRenderTree/efl/TestRunnerEfl.cpp:
        (TestRunner::platformName): Removed.
        * DumpRenderTree/gtk/TestRunnerGtk.cpp:
        (TestRunner::platformName): Removed.
        * DumpRenderTree/mac/TestRunnerMac.mm:
        (TestRunner::platformName): Removed.
        * DumpRenderTree/win/TestRunnerWin.cpp:
        (TestRunner::platformName): Removed.

        * DumpRenderTree/AccessibilityController.h:
        (AccessibilityController::platformName): Added.
        * DumpRenderTree/AccessibilityController.cpp:
        (getPlatformNameCallback): Added.
        (AccessibilityController::getJSClass): Added platformName.
        * DumpRenderTree/atk/AccessibilityControllerAtk.cpp:
        (AccessibilityController::platformName): Added, returning "atk".
        * DumpRenderTree/mac/AccessibilityControllerMac.mm:
        (AccessibilityController::platformName): Ditto, returning "mac".
        * DumpRenderTree/ios/AccessibilityControllerIOS.mm:
        (AccessibilityController::platformName): Ditto, returning "ios".
        * DumpRenderTree/win/AccessibilityControllerWin.cpp:
        (AccessibilityController::platformName): Ditto, returning "win".

        * WebKitTestRunner/InjectedBundle/Bindings/TestRunner.idl:
        (platformName): Removed.
        * WebKitTestRunner/InjectedBundle/TestRunner.h:
        (TestRunner::platformName): Removed.
        * WebKitTestRunner/InjectedBundle/efl/TestRunnerEfl.cpp:
        (TestRunner::platformName): Removed.
        * WebKitTestRunner/InjectedBundle/gtk/TestRunnerGtk.cpp:
        (TestRunner::platformName): Removed.
        * WebKitTestRunner/InjectedBundle/mac/TestRunnerMac.mm:
        (TestRunner::platformName): Removed.
        * WebKitTestRunner/InjectedBundle/win/TestRunnerWin.cpp:
        (TestRunner::platformName): Removed.

        * WebKitTestRunner/InjectedBundle/AccessibilityController.h:
        (WTR:AccessibilityController::platformName): Added.
        * WebKitTestRunner/InjectedBundle/Bindings/AccessibilityController.idl:
        (platformName): Added.
        * WebKitTestRunner/InjectedBundle/atk/AccessibilityControllerAtk.cpp:
        (WTR::AccessibilityController::platformName): Added, returning "atk".
        * WebKitTestRunner/InjectedBundle/mac/AccessibilityControllerMac.mm:
        (WTR::AccessibilityController::platformName): Added, returning "mac".

2014-01-10  Benjamin Poulain  <bpoulain@apple.com>

        Remove the BlackBerry port from trunk
        https://bugs.webkit.org/show_bug.cgi?id=126715

        Reviewed by Anders Carlsson.

        * Scripts/webkitpy/common/config/watchlist:

2014-01-09  Benjamin Poulain  <bpoulain@apple.com>

        Remove the BlackBerry files outside WebCore
        https://bugs.webkit.org/show_bug.cgi?id=126715

        Reviewed by Anders Carlsson.

        * DumpRenderTree/blackberry: Removed.

2014-01-10  Simon Fraser  <simon.fraser@apple.com>

        Remove knowledge of Blackberry from build scripts
        https://bugs.webkit.org/show_bug.cgi?id=126766

        Reviewed by Anders Carlsson.
        
        Remove isBlackBerry() and references to it, and rmeove
        blackberry-related stuff from the watchlist.

        * Scripts/build-webkit:
        * Scripts/webkit-build-directory:
        * Scripts/webkitdirs.pm:
        (determineBaseProductDir):
        (argumentsForConfiguration):
        (builtDylibPathForName):
        (isAppleWebKit):
        (buildCMakeProjectOrExit):
        (cmakeBasedPortArguments):
        (cmakeBasedPortName):
        * Scripts/webkitperl/FeatureList.pm:
        * Scripts/webkitpy/common/config/watchlist:

2014-01-10  Daniel Bates  <dabates@apple.com>

        [iOS] Fix up simulator build and enable default features

        Rubber-stamped by Joseph Pecoraro.

        * Scripts/webkitdirs.pm:
        (determineArchitecture):
        (determinePassedArchitecture):
        * Scripts/webkitperl/FeatureList.pm: Also expose command line option to toggle ENABLE_PLUGIN_PROXY_FOR_VIDEO (enabled
        by default only in iOS).

2014-01-10  Daniel Bates  <dabates@apple.com>

        [iOS] Upstream WebCore and Tools miscellaneous changes
        https://bugs.webkit.org/show_bug.cgi?id=126698

        Reviewed by David Kilzer.

        * Scripts/check-for-inappropriate-objc-class-names:
        * Scripts/check-for-webkit-framework-include-consistency:

2014-01-09  Dan Bernstein  <mitz@apple.com>

        [Cocoa] Promote WKBackForwardList{,Item}.h to public
        https://bugs.webkit.org/show_bug.cgi?id=126707

        Reviewed by Sam Weinig.

        * Scripts/check-for-webkit-framework-include-consistency: Account for stale private headers
        left behind in the build products directory after a private header is made public.

2014-01-09  Carlos Garcia Campos  <cgarcia@igalia.com>

        [SOUP] Partial file left on disk after a download fails or is cancelled in WebKit2
        https://bugs.webkit.org/show_bug.cgi?id=126686

        Reviewed by Martin Robinson.

        Test that partial files are not left on disk after a download has
        been cancelled after the destination has been decided. To make
        sure the download is cancelled after the destination has been
        decided and before the operation finishes, we cancel the download
        in the destination decided callback, and we use an infinite
        resource that writes chunks to the response body and never
        completes the body.

        * TestWebKitAPI/Tests/WebKit2Gtk/TestDownloads.cpp:
        (addContentDispositionHTTPHeaderToResponse): Helper function to
        add the Content-Disposition to the response headers.
        (writeNextChunkIdle): Write next chunk to response body.
        (writeNextChunk): Write next chunk in an idle to avoid flooding
        the network with the inifnite resource.
        (serverCallback): Add an inifinite resource.
        (testDownloadRemoteFileError): Check that partial file is not
        present after the download has been cancelled.

2014-01-09  Roland Takacs  <rtakacs@inf.u-szeged.hu>

        Move myself to the committers list.

        Unreviewed.

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

2014-01-08  Seokju Kwon  <seokju@webkit.org>

        [GTK] Unreviewed build fix after r161522.

        * TestWebKitAPI/GNUmakefile.am: Remove WKConnection.cpp and WKConnection_Bundle.cpp.

2014-01-08  Gergo Balogh  <geryxyz@inf.u-szeged.hu>

        Missleading style error when mixing system and non-system header include lines.
        https://bugs.webkit.org/show_bug.cgi?id=126564

        Reviewed by Ryosuke Niwa.

        * Scripts/webkitpy/style/checkers/cpp.py:
        (check_include_line):
        * Scripts/webkitpy/style/checkers/cpp_unittest.py:
        (OrderOfIncludesTest.test_check_alphabetical_include_order):
        (OrderOfIncludesTest.test_public_primary_header):

2014-01-08  Seokju Kwon  <seokju@webkit.org>

        [EFL] Unreviewed build fix after r161522.

        * TestWebKitAPI/CMakeLists.txt:
        * TestWebKitAPI/PlatformEfl.cmake:

2014-01-08  Anders Carlsson  <andersca@apple.com>

        Remove WKConnectionRef tests
        https://bugs.webkit.org/show_bug.cgi?id=126666

        Reviewed by Dan Bernstein.

        The WKConnectionRef is poorly designed but thankfully not used anywhere. 
        Remove the API tests as a first step towards killing the entire thing.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WebKit2/WKConnection.cpp: Removed.
        * TestWebKitAPI/Tests/WebKit2/WKConnection_Bundle.cpp: Removed.

2014-01-08  Commit Queue  <commit-queue@webkit.org>

        Unreviewed, rolling out r161512.
        http://trac.webkit.org/changeset/161512
        https://bugs.webkit.org/show_bug.cgi?id=126655

        Broke webkitpy tests (Requested by ap on #webkit).

        * Scripts/webkitpy/port/gtk.py:
        (GtkPort.__init__):
        (GtkPort.setup_test_run):
        (GtkPort._port_specific_expectations_files):
        * Scripts/webkitpy/port/leakdetector_valgrind.py: Removed.
        * Scripts/webkitpy/port/leakdetector_valgrind_unittest.py: Removed.

2014-01-08  Commit Queue  <commit-queue@webkit.org>

        Unreviewed, rolling out r161517.
        http://trac.webkit.org/changeset/161517
        https://bugs.webkit.org/show_bug.cgi?id=126659

        The fix didn't completely remove the problem and is now
        standing in the way of the rollout of the offending patch
        (Requested by zdobersek on #webkit).

        * Scripts/webkitpy/port/gtk.py:
        (GtkPort.__init__):

2014-01-08  Zan Dobersek  <zdobersek@igalia.com>

        Unreviewed. Attempting to fix webkitpy tests after r161512.

        * Scripts/webkitpy/port/gtk.py:
        (GtkPort.__init__): Construct LeakDetectorValgrin only if leak detection is enabled.

2014-01-08  Brian Holt  <brian.holt@samsung.com>

        [GTK] Parse Valgrind xml leak files
        https://bugs.webkit.org/show_bug.cgi?id=119446

        Reviewed by Alejandro G. Castro.

        Parse the xml files generated by Valgrind to yield useful
        information about the memory leaks.

        * Scripts/webkitpy/port/gtk.py:
        (GtkPort.__init__):
        (GtkPort.setup_test_run): Clear the previous output files before new
        run.
        (GtkPort.print_leaks_summary):

        * Scripts/webkitpy/port/leakdetector_valgrind.py: Added.
        Parse the xml files generated by Valgrind and summarise leaks
        into an easily understandable list.
        (get_text_of):
        (get_CDATA_of):
        (gather_frames):
        (ValgrindError):
        (ValgrindError.__init__):
        (ValgrindError.__str__):
        (ValgrindError.unique_string):
        (ValgrindError.error_hash):
        (ValgrindError.__hash__):
        (ValgrindError.__eq__):
        (LeakDetectorValgrind):
        (LeakDetectorValgrind.__init__):
        (LeakDetectorValgrind._parse_leaks_output):
        (LeakDetectorValgrind.leaks_files_in_results_directory):
        (LeakDetectorValgrind.clean_leaks_files_from_results_directory):
        (LeakDetectorValgrind.parse_and_print_leaks_detail):

        * Scripts/webkitpy/port/leakdetector_valgrind_unittest.py: Added.
        (make_mock_valgrind_output):
        (make_mock_incomplete_valgrind_output):
        (make_mock_valgrind_results):
        (make_mock_valgrind_results_incomplete):
        (make_mock_valgrind_results_empty):
        (make_mock_valgrind_results_misformatted):
        (LeakDetectorValgrindTest):
        (LeakDetectorValgrindTest.test_parse_and_print_leaks_detail_pass):
        (LeakDetectorValgrindTest.test_parse_and_print_leaks_detail_incomplete):
        (LeakDetectorValgrindTest.test_parse_and_print_leaks_detail_empty):
        (LeakDetectorValgrindTest.test_parse_and_print_leaks_detail_misformatted):
        (LeakDetectorValgrindTest.test_parse_and_print_leaks_detail_pass):
        (LeakDetectorValgrindTest.test_parse_and_print_leaks_detail_incomplete):
        (LeakDetectorValgrindTest.test_parse_and_print_leaks_detail_empty):
        (LeakDetectorValgrindTest.test_parse_and_print_leaks_detail_misformatted):

2014-01-08  Commit Queue  <commit-queue@webkit.org>

        Unreviewed, rolling out r161427.
        http://trac.webkit.org/changeset/161427
        https://bugs.webkit.org/show_bug.cgi?id=126645

        Emits a stye error on any newly added files (Requested by ap
        on #webkit).

        * Scripts/webkitpy/style/checkers/cpp.py:
        (check_style):
        (CppChecker):
        * Scripts/webkitpy/style/checkers/cpp_unittest.py:
        (WebKitStyleTest.test_other):

2014-01-08  Peter Molnar  <pmolnar.u-szeged@partner.samsung.com>

        Remove run-webkit-tests wrapper script as all platform are using NRWT now.
        https://bugs.webkit.org/show_bug.cgi?id=126580

        Reviewed by Csaba Osztrogonác.

        * BuildSlaveSupport/build.webkit.org-config/master.cfg:
        (RunWebKitTests): Passing --debug-rwt-logging here instead of the
        run-webkit-tests script.
        * Scripts/new-run-webkit-tests: Renamed to run-webkit-tests.
        * Scripts/run-webkit-tests: Removed, as it was just a temporary hack.

2014-01-08  Peter Molnar  <pmolnar.u-szeged@partner.samsung.com>

        Update the list of non-committer u-szeged contributors
        https://bugs.webkit.org/show_bug.cgi?id=126640

        Reviewed by Csaba Osztrogonác.

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

2014-01-08  Alberto Garcia  <berto@igalia.com>

        Fix some compilation warnings
        https://bugs.webkit.org/show_bug.cgi?id=126635

        Reviewed by Csaba Osztrogonác.

        * GtkLauncher/main.c:
        (createWindow): This function is not supposed to receive any
        parameter, yet we are passing one.

2014-01-08  Brian Holt  <brian.holt@samsung.com>

        [GTK][WK2] unskip passing unit tests
        https://bugs.webkit.org/show_bug.cgi?id=126637

        Reviewed by Carlos Garcia Campos.

        Unskip TestResources and TestAuthentication unit tests since they
        are passing both under Xvfb and X.

        * Scripts/run-gtk-tests:
        (TestRunner):

2014-01-08  Alberto Garcia  <berto@igalia.com>

        REGRESSION(r160304): [GTK] Disable libtool fast install
        https://bugs.webkit.org/show_bug.cgi?id=126381

        Reviewed by Gustavo Noronha Silva.

        Disable the libtool fast-install mode in developer/test builds.

        In this mode binaries are generated ready to be used directly from
        the build tree. Otherwise they would need to be relinked when they
        are executed, which can take a lot of resources, particularly in
        debug builds.

        * Scripts/webkitdirs.pm:
        (runAutogenForAutotoolsProjectIfNecessary):

2014-01-08  Zan Dobersek  <zdobersek@igalia.com>

        Unreviewed GTK gardening.

        * Scripts/run-gtk-tests:
        (TestRunner): Skipping the snapshot test case from the TestWebKitWebView test suite.
        The test is failing due to issues with Xvfb, with the problem being handled in bug #120404.

2014-01-07  Lucas Forschler  <lforschler@apple.com>

        Add buildbot infrasctructure for building and testing JSC cloop
        https://bugs.webkit.org/show_bug.cgi?id=126604

        Reviewed by Geoffrey Garen.

        * BuildSlaveSupport/build.webkit.org-config/config.json:
        * BuildSlaveSupport/build.webkit.org-config/master.cfg:
        (CompileCLOOP):
        (RunCLOOPTests):
        (RunCLOOPTests.countFailures):
        (BuildAndTestCLOOP):

2014-01-07  Brian Burg  <bburg@apple.com>

        Unreviewed. Add myself as a committer.

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

2014-01-07  Alexey Proskuryakov  <ap@apple.com>

        Popovers at build.webkit.org/dashboard could have titles
        https://bugs.webkit.org/show_bug.cgi?id=126495

        Reviewed by Timothy Hatcher.

        Added titles to all popovers except for pending revisions one, which I would like
        to improve more (probably add an ETA).

        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Scripts/BuildbotBuilderQueueView.js:
        (BuildbotBuilderQueueView.prototype._presentPopoverFailureLogs): Moved code for 
        adding a title to base class.

        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Scripts/BuildbotQueueView.js:
        (BuildbotQueueView.prototype._presentPopoverForPendingCommits): Moved code for inserting
        a divider to a separate function.
        (BuildbotQueueView.prototype._presentPopoverForRevisionRange): Added a title.
        (BuildbotQueueView.prototype._presentNoChangePopover): Updated the text to match
        title from above function.
        (BuildbotQueueView.prototype._revisionPopoverContentForIteration): Renamed "contentElement"
        variable to "content" to match all other code.
        (BuildbotQueueView.prototype._addIterationHeadingToPopover): Added.
        (BuildbotQueueView.prototype._addDividerToPopover): Added.

        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Scripts/BuildbotTesterQueueView.js:
        (BuildbotTesterQueueView.prototype._popoverContentForLayoutTestRegressions): Add a title.
        (BuildbotTesterQueueView.prototype._presentPopoverForLayoutTestRegressions): Ditto.
        (BuildbotTesterQueueView.prototype._presentPopoverForMultipleFailureKinds): Ditto.

        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Styles/QueueView.css:

2014-01-07  Alexey Proskuryakov  <ap@apple.com>

        There should be a delay when quickly switching to a different popover at build.webkit.org/dashboard
        https://bugs.webkit.org/show_bug.cgi?id=126472

        Reviewed by Timothy Hatcher.

        Added a delay when quickly switching to a different popover, making it easier to
        move mouse pointer from active element to its popover without accidentally opening
        a different popover.

        Used this code to add a delay before creating a popover. This doesn't change UI
        behavior, as there was alerady a delay before it became visible, but it avoids
        flooding buildbot server with http requests when quickly moving the mouse over
        dashboard page.

        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Scripts/Popover.js:
        Fixed a case where popover could get stuck. If content was updated while fade-out
        transition was already in place, the transition was removed for no good reason.

        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Scripts/PopoverTracker.js:
        (PopoverTracker._onblur): While at it, also taught popovers to disappear on window blur.

        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Styles/Popover.css:
        (.popover.step-in): Now that PopoverTracker has a 200ms delay of its own, reduced
        popover delay from 1s to 800ms.

2014-01-07  Alexey Proskuryakov  <ap@apple.com>

        Improve display of failed builds at build.webkit.org/dashboard
        https://bugs.webkit.org/show_bug.cgi?id=126542
        <rdar://problem/15753550>

        Reviewed by Timothy Hatcher.

        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Scripts/BuildbotBuilderQueueView.js:
        Instead of hardcoding step name, look for the first step that failed.
        While at it, added a popover with more links. There are multiple, and it's good
        to have a choice of which one to look at in each situation.

        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Scripts/BuildbotIteration.js:
        (BuildbotIteration.prototype.get successful): Being successful is not the opposite
        of having failed. Many iterations are interrupted for whatever reason internal to
        Buildbot, and these are suppoed to be orange, not red.
        (BuildbotIteration.prototype.get productive): Changed to exclude inerrupted iterations,
        not only WillRetry ones.
        (BuildbotIteration.prototype.get failed): Changed to only include iterations that
        actually failed, more likely indicating a problem with code base.
        (BuildbotIteration.prototype.get firstFailedStepName):
        (BuildbotIteration.prototype.failureLogURL): Expose informaiton about failure.
        (BuildbotIteration.prototype.get failureLogs): Ditto.
        (BuildbotIteration.prototype.update): Store complete results for the failed step.
        Not every failure stops the iteration, so we could have multiple failed steps,
        but let's see if seeing just the first one will be enough.

        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Scripts/BuildbotQueue.js:
        (BuildbotQueue.prototype.get firstRecentUnsuccessfulIteration): Updated to work in
        terms of successful iterations.
        (BuildbotQueue.prototype.get mostRecentSuccessfulIteration): Ditto.

        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Scripts/BuildbotTesterQueueView.js:
        (BuildbotTesterQueueView.prototype.update.appendBuilderQueueStatus): Updated to work in
        terms of successful iterations.

        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Scripts/WebKitBuildbot.js:
        Removed code to create a path to build output, we now take it from results JSON.

        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Styles/QueueView.css:
        Added styles for the new popover.

2014-01-07  Gergo Balogh  <geryxyz@inf.u-szeged.hu>

        defined constants should use all uppercase names with words separated by underscores.
        https://bugs.webkit.org/show_bug.cgi?id=126055

        Reviewed by Alexey Proskuryakov.

        * Scripts/webkitpy/style/checkers/cpp.py:
        (check_style):
        (CppChecker):
        * Scripts/webkitpy/style/checkers/cpp_unittest.py:
        (WebKitStyleTest.test_define_constants):

2014-01-07  Brian Holt  <brian.holt@samsung.com>

        Unreviewed. Add myself as a committer.

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

2014-01-07  Csaba Osztrogonác  <ossy@webkit.org>

        Remove the WinCE buildbot from build.webkit.org
        https://bugs.webkit.org/show_bug.cgi?id=126517

        Reviewed by Alexey Proskuryakov.

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

2014-01-07  Krzysztof Czech  <k.czech@samsung.com>

        [EFL] Change ATK version to 2.11.4
        https://bugs.webkit.org/show_bug.cgi?id=126573

        Reviewed by Gyuyoung Kim.

        ATK 2.11.4 introduces some new roles, that are already being used by WebKit.

        * efl/jhbuild.modules:

2014-01-07  Alberto Garcia  <berto@igalia.com>

        [GTK][EFL] Use function jhbuildWrapperPrefixIfNeeded to run launcher
        https://bugs.webkit.org/show_bug.cgi?id=117275

        Reviewed by Carlos Garcia Campos.

        If we are not using the internal jhbuild we must not use the
        jhbuild-wrapper script, else it will try to download and install
        it.

        * Scripts/run-launcher:

2014-01-07  Krzysztof Czech  <k.czech@samsung.com>

        [ATK] Expose aria-checked mixed state as ATK_STATE_INDETERMINATE
        https://bugs.webkit.org/show_bug.cgi?id=125855

        Reviewed by Mario Sanchez Prada.

        Added new function isIndeterminate for testing aria-checked mixed state.
        I provided respective, but empty function in mac port. Mac testing it differently.

        * DumpRenderTree/AccessibilityUIElement.cpp:
        (getIsIndeterminate):
        (AccessibilityUIElement::getJSClass):
        * DumpRenderTree/AccessibilityUIElement.h:
        * DumpRenderTree/atk/AccessibilityUIElementAtk.cpp:
        (AccessibilityUIElement::isIndeterminate):
        * DumpRenderTree/ios/AccessibilityUIElementIOS.mm: Added empty function.
        (AccessibilityUIElement::isIndeterminate):
        * DumpRenderTree/mac/AccessibilityUIElementMac.mm: Added empty function.
        (AccessibilityUIElement::isIndeterminate):
        * DumpRenderTree/win/AccessibilityUIElementWin.cpp: Added empty function.
        (AccessibilityUIElement::isIndeterminate):
        * WebKitTestRunner/InjectedBundle/AccessibilityUIElement.h:
        * WebKitTestRunner/InjectedBundle/Bindings/AccessibilityUIElement.idl:
        * WebKitTestRunner/InjectedBundle/atk/AccessibilityUIElementAtk.cpp:
        (WTR::AccessibilityUIElement::isIndeterminate):
        * WebKitTestRunner/InjectedBundle/mac/AccessibilityUIElementMac.mm:
        (WTR::AccessibilityUIElement::isIndeterminate):

2014-01-06  Mark Rowe  <mrowe@apple.com>

        <https://webkit.org/b/126560> Fix incorrectness in use of some AppKit enums

        Reviewed by Ryosuke Niwa.

        * DumpRenderTree/mac/DumpRenderTree.mm:
        (-[DRTMockScroller rectForPart:]): Move to using an if with early return instead of a switch
        with a single case. This avoids the potential for warnings about unhandled cases.
        * WebKitTestRunner/mac/PlatformWebViewMac.mm:
        (WTR::PlatformWebView::PlatformWebView): Cast the argument to NSBackingStoreType.

2014-01-04  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] Move all GTK/GObject unit tests to Tools/TestWebKitAPI
        https://bugs.webkit.org/show_bug.cgi?id=126342

        Reviewed by Gustavo Noronha Silva.

        * CMakeLists.txt: Include the new unit tests subdirectories.
        * Scripts/run-gtk-tests: Update to refer to the new build locations.
        * Scripts/webkitpy/style/checker.py: Update the style checker.
        * Scripts/webkitpy/style/checker_unittest.py:
        * TestWebKitAPI/GNUmakefile.am:
        * TestWebKitAPI/Tests/WebKit2Gtk/AccessibilityTestServer.cpp: Renamed from Source/WebKit2/UIProcess/API/gtk/tests/AccessibilityTestServer.cpp.
        * TestWebKitAPI/Tests/WebKit2Gtk/CMakeLists.txt: Added.
        * TestWebKitAPI/Tests/WebKit2Gtk/DOMDOMWindowTest.cpp: Added.
        * TestWebKitAPI/Tests/WebKit2Gtk/DOMNodeTest.cpp: Renamed from Source/WebKit2/UIProcess/API/gtk/tests/DOMNodeTest.cpp.
        * TestWebKitAPI/Tests/WebKit2Gtk/FrameTest.cpp: Renamed from Source/WebKit2/UIProcess/API/gtk/tests/FrameTest.cpp.
        * TestWebKitAPI/Tests/WebKit2Gtk/InspectorTestServer.cpp: Renamed from Source/WebKit2/UIProcess/API/gtk/tests/InspectorTestServer.cpp.
        * TestWebKitAPI/Tests/WebKit2Gtk/LoadTrackingTest.cpp: Renamed from Source/WebKit2/UIProcess/API/gtk/tests/LoadTrackingTest.cpp.
        * TestWebKitAPI/Tests/WebKit2Gtk/LoadTrackingTest.h: Renamed from Source/WebKit2/UIProcess/API/gtk/tests/LoadTrackingTest.h.
        * TestWebKitAPI/Tests/WebKit2Gtk/TestAuthentication.cpp: Renamed from Source/WebKit2/UIProcess/API/gtk/tests/TestAuthentication.cpp.
        * TestWebKitAPI/Tests/WebKit2Gtk/TestBackForwardList.cpp: Renamed from Source/WebKit2/UIProcess/API/gtk/tests/TestBackForwardList.cpp.
        * TestWebKitAPI/Tests/WebKit2Gtk/TestContextMenu.cpp: Renamed from Source/WebKit2/UIProcess/API/gtk/tests/TestContextMenu.cpp.
        * TestWebKitAPI/Tests/WebKit2Gtk/TestCookieManager.cpp: Renamed from Source/WebKit2/UIProcess/API/gtk/tests/TestCookieManager.cpp.
        * TestWebKitAPI/Tests/WebKit2Gtk/TestDOMDOMWindow.cpp: Added.
        * TestWebKitAPI/Tests/WebKit2Gtk/TestDOMNode.cpp: Renamed from Source/WebKit2/UIProcess/API/gtk/tests/TestDOMNode.cpp.
        * TestWebKitAPI/Tests/WebKit2Gtk/TestDownloads.cpp: Renamed from Source/WebKit2/UIProcess/API/gtk/tests/TestDownloads.cpp.
        * TestWebKitAPI/Tests/WebKit2Gtk/TestFrame.cpp: Renamed from Source/WebKit2/UIProcess/API/gtk/tests/TestFrame.cpp.
        * TestWebKitAPI/Tests/WebKit2Gtk/TestInspector.cpp: Renamed from Source/WebKit2/UIProcess/API/gtk/tests/TestInspector.cpp.
        * TestWebKitAPI/Tests/WebKit2Gtk/TestInspectorServer.cpp: Renamed from Source/WebKit2/UIProcess/API/gtk/tests/TestInspectorServer.cpp.
        * TestWebKitAPI/Tests/WebKit2Gtk/TestLoaderClient.cpp: Renamed from Source/WebKit2/UIProcess/API/gtk/tests/TestLoaderClient.cpp.
        * TestWebKitAPI/Tests/WebKit2Gtk/TestMain.cpp: Renamed from Source/WebKit2/UIProcess/API/gtk/tests/TestMain.cpp.
        * TestWebKitAPI/Tests/WebKit2Gtk/TestMain.h: Renamed from Source/WebKit2/UIProcess/API/gtk/tests/TestMain.h.
        * TestWebKitAPI/Tests/WebKit2Gtk/TestPrinting.cpp: Renamed from Source/WebKit2/UIProcess/API/gtk/tests/TestPrinting.cpp.
        * TestWebKitAPI/Tests/WebKit2Gtk/TestResources.cpp: Renamed from Source/WebKit2/UIProcess/API/gtk/tests/TestResources.cpp.
        * TestWebKitAPI/Tests/WebKit2Gtk/TestSSL.cpp: Renamed from Source/WebKit2/UIProcess/API/gtk/tests/TestSSL.cpp.
        * TestWebKitAPI/Tests/WebKit2Gtk/TestUIClient.cpp: Renamed from Source/WebKit2/UIProcess/API/gtk/tests/TestUIClient.cpp.
        * TestWebKitAPI/Tests/WebKit2Gtk/TestWebExtensions.cpp: Renamed from Source/WebKit2/UIProcess/API/gtk/tests/TestWebExtensions.cpp.
        * TestWebKitAPI/Tests/WebKit2Gtk/TestWebKitAccessibility.cpp: Renamed from Source/WebKit2/UIProcess/API/gtk/tests/TestWebKitAccessibility.cpp.
        * TestWebKitAPI/Tests/WebKit2Gtk/TestWebKitFaviconDatabase.cpp: Renamed from Source/WebKit2/UIProcess/API/gtk/tests/TestWebKitFaviconDatabase.cpp.
        * TestWebKitAPI/Tests/WebKit2Gtk/TestWebKitFindController.cpp: Renamed from Source/WebKit2/UIProcess/API/gtk/tests/TestWebKitFindController.cpp.
        * TestWebKitAPI/Tests/WebKit2Gtk/TestWebKitPolicyClient.cpp: Renamed from Source/WebKit2/UIProcess/API/gtk/tests/TestWebKitPolicyClient.cpp.
        * TestWebKitAPI/Tests/WebKit2Gtk/TestWebKitSettings.cpp: Renamed from Source/WebKit2/UIProcess/API/gtk/tests/TestWebKitSettings.cpp.
        * TestWebKitAPI/Tests/WebKit2Gtk/TestWebKitVersion.cpp: Renamed from Source/WebKit2/UIProcess/API/gtk/tests/TestWebKitVersion.cpp.
        * TestWebKitAPI/Tests/WebKit2Gtk/TestWebKitWebContext.cpp: Renamed from Source/WebKit2/UIProcess/API/gtk/tests/TestWebKitWebContext.cpp.
        * TestWebKitAPI/Tests/WebKit2Gtk/TestWebKitWebView.cpp: Renamed from Source/WebKit2/UIProcess/API/gtk/tests/TestWebKitWebView.cpp.
        * TestWebKitAPI/Tests/WebKit2Gtk/TestWebKitWebViewGroup.cpp: Renamed from Source/WebKit2/UIProcess/API/gtk/tests/TestWebKitWebViewGroup.cpp.
        * TestWebKitAPI/Tests/WebKit2Gtk/TestWebViewEditor.cpp: Renamed from Source/WebKit2/UIProcess/API/gtk/tests/TestWebViewEditor.cpp.
        * TestWebKitAPI/Tests/WebKit2Gtk/WebExtensionTest.cpp: Renamed from Source/WebKit2/UIProcess/API/gtk/tests/WebExtensionTest.cpp.
        * TestWebKitAPI/Tests/WebKit2Gtk/WebKitTestBus.cpp: Renamed from Source/WebKit2/UIProcess/API/gtk/tests/WebKitTestBus.cpp.
        * TestWebKitAPI/Tests/WebKit2Gtk/WebKitTestBus.h: Renamed from Source/WebKit2/UIProcess/API/gtk/tests/WebKitTestBus.h.
        * TestWebKitAPI/Tests/WebKit2Gtk/WebKitTestServer.cpp: Renamed from Source/WebKit2/UIProcess/API/gtk/tests/WebKitTestServer.cpp.
        * TestWebKitAPI/Tests/WebKit2Gtk/WebKitTestServer.h: Renamed from Source/WebKit2/UIProcess/API/gtk/tests/WebKitTestServer.h.
        * TestWebKitAPI/Tests/WebKit2Gtk/WebProcessTest.cpp: Renamed from Source/WebKit2/UIProcess/API/gtk/tests/WebProcessTest.cpp.
        * TestWebKitAPI/Tests/WebKit2Gtk/WebProcessTest.h: Renamed from Source/WebKit2/UIProcess/API/gtk/tests/WebProcessTest.h.
        * TestWebKitAPI/Tests/WebKit2Gtk/WebProcessTestRunner.cpp: Renamed from Source/WebKit2/UIProcess/API/gtk/tests/WebProcessTestRunner.cpp.
        * TestWebKitAPI/Tests/WebKit2Gtk/WebProcessTestRunner.h: Renamed from Source/WebKit2/UIProcess/API/gtk/tests/WebProcessTestRunner.h.
        * TestWebKitAPI/Tests/WebKit2Gtk/WebViewTest.cpp: Renamed from Source/WebKit2/UIProcess/API/gtk/tests/WebViewTest.cpp.
        * TestWebKitAPI/Tests/WebKit2Gtk/WebViewTest.h: Renamed from Source/WebKit2/UIProcess/API/gtk/tests/WebViewTest.h.
        * TestWebKitAPI/Tests/WebKit2Gtk/resources/link-title.js: Renamed from Source/WebKit2/UIProcess/API/gtk/tests/resources/link-title.js.
        * TestWebKitAPI/Tests/WebKit2Gtk/resources/test-cert.pem: Renamed from Source/WebKit2/UIProcess/API/gtk/tests/resources/test-cert.pem.
        * TestWebKitAPI/Tests/WebKit2Gtk/resources/test-key.pem: Renamed from Source/WebKit2/UIProcess/API/gtk/tests/resources/test-key.pem.
        * TestWebKitAPI/Tests/WebKit2Gtk/resources/webkit2gtk-tests.gresource.xml: Renamed from Source/WebKit2/UIProcess/API/gtk/tests/resources/webkit2gtk-tests.gresource.xml.
        * TestWebKitAPI/Tests/WebKitGtk/CMakeLists.txt: Added.
        * TestWebKitAPI/Tests/WebKitGtk/resources/blank.ico: Renamed from Source/WebKit/gtk/tests/resources/blank.ico.
        * TestWebKitAPI/Tests/WebKitGtk/resources/test.html: Renamed from Source/WebKit/gtk/tests/resources/test.html.
        * TestWebKitAPI/Tests/WebKitGtk/resources/test.ogg: Renamed from Source/WebKit/gtk/tests/resources/test.ogg.
        * TestWebKitAPI/Tests/WebKitGtk/resources/test.pdf: Renamed from Source/WebKit/gtk/tests/resources/test.pdf.
        * TestWebKitAPI/Tests/WebKitGtk/resources/test.txt: Renamed from Source/WebKit/gtk/tests/resources/test.txt.
        * TestWebKitAPI/Tests/WebKitGtk/test_utils.c: Renamed from Source/WebKit/gtk/tests/test_utils.c.
        * TestWebKitAPI/Tests/WebKitGtk/test_utils.h: Renamed from Source/WebKit/gtk/tests/test_utils.h.
        * TestWebKitAPI/Tests/WebKitGtk/testapplicationcache.c: Renamed from Source/WebKit/gtk/tests/testapplicationcache.c.
        * TestWebKitAPI/Tests/WebKitGtk/testatk.c: Renamed from Source/WebKit/gtk/tests/testatk.c.
        * TestWebKitAPI/Tests/WebKitGtk/testatkroles.c: Renamed from Source/WebKit/gtk/tests/testatkroles.c.
        * TestWebKitAPI/Tests/WebKitGtk/testcontextmenu.c: Renamed from Source/WebKit/gtk/tests/testcontextmenu.c.
        * TestWebKitAPI/Tests/WebKitGtk/testcopyandpaste.c: Renamed from Source/WebKit/gtk/tests/testcopyandpaste.c.
        * TestWebKitAPI/Tests/WebKitGtk/testdomdocument.c: Renamed from Source/WebKit/gtk/tests/testdomdocument.c.
        * TestWebKitAPI/Tests/WebKitGtk/testdomdomwindow.c: Renamed from Source/WebKit/gtk/tests/testdomdomwindow.c.
        * TestWebKitAPI/Tests/WebKitGtk/testdomnode.c: Renamed from Source/WebKit/gtk/tests/testdomnode.c.
        * TestWebKitAPI/Tests/WebKitGtk/testdownload.c: Renamed from Source/WebKit/gtk/tests/testdownload.c.
        * TestWebKitAPI/Tests/WebKitGtk/testfavicondatabase.c: Renamed from Source/WebKit/gtk/tests/testfavicondatabase.c.
        * TestWebKitAPI/Tests/WebKitGtk/testglobals.c: Renamed from Source/WebKit/gtk/tests/testglobals.c.
        * TestWebKitAPI/Tests/WebKitGtk/testhittestresult.c: Renamed from Source/WebKit/gtk/tests/testhittestresult.c.
        * TestWebKitAPI/Tests/WebKitGtk/testhttpbackend.c: Renamed from Source/WebKit/gtk/tests/testhttpbackend.c.
        * TestWebKitAPI/Tests/WebKitGtk/testkeyevents.c: Renamed from Source/WebKit/gtk/tests/testkeyevents.c.
        * TestWebKitAPI/Tests/WebKitGtk/testloading.c: Renamed from Source/WebKit/gtk/tests/testloading.c.
        * TestWebKitAPI/Tests/WebKitGtk/testmimehandling.c: Renamed from Source/WebKit/gtk/tests/testmimehandling.c.
        * TestWebKitAPI/Tests/WebKitGtk/testnetworkrequest.c: Renamed from Source/WebKit/gtk/tests/testnetworkrequest.c.
        * TestWebKitAPI/Tests/WebKitGtk/testnetworkresponse.c: Renamed from Source/WebKit/gtk/tests/testnetworkresponse.c.
        * TestWebKitAPI/Tests/WebKitGtk/testwebbackforwardlist.c: Renamed from Source/WebKit/gtk/tests/testwebbackforwardlist.c.
        * TestWebKitAPI/Tests/WebKitGtk/testwebdatasource.c: Renamed from Source/WebKit/gtk/tests/testwebdatasource.c.
        * TestWebKitAPI/Tests/WebKitGtk/testwebframe.c: Renamed from Source/WebKit/gtk/tests/testwebframe.c.
        * TestWebKitAPI/Tests/WebKitGtk/testwebhistoryitem.c: Renamed from Source/WebKit/gtk/tests/testwebhistoryitem.c.
        * TestWebKitAPI/Tests/WebKitGtk/testwebinspector.c: Renamed from Source/WebKit/gtk/tests/testwebinspector.c.
        * TestWebKitAPI/Tests/WebKitGtk/testwebplugindatabase.c: Renamed from Source/WebKit/gtk/tests/testwebplugindatabase.c.
        * TestWebKitAPI/Tests/WebKitGtk/testwebresource.c: Renamed from Source/WebKit/gtk/tests/testwebresource.c.
        * TestWebKitAPI/Tests/WebKitGtk/testwebsettings.c: Renamed from Source/WebKit/gtk/tests/testwebsettings.c.
        * TestWebKitAPI/Tests/WebKitGtk/testwebview.c: Renamed from Source/WebKit/gtk/tests/testwebview.c.
        * TestWebKitAPI/Tests/WebKitGtk/testwindow.c: Renamed from Source/WebKit/gtk/tests/testwindow.c.

2014-01-06  Alexey Proskuryakov  <ap@apple.com>

        Gtk and Efl API test results confuse the dashboard
        https://bugs.webkit.org/show_bug.cgi?id=126535

        Reviewed by Tim Horton.

        Added "API tests" step as "platform api tests".

        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Scripts/Buildbot.js:
        (Buildbot.prototype.platformAPITestResultsURLForIteration):
        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Scripts/BuildbotIteration.js:
        (BuildbotIteration):
        (BuildbotIteration.prototype.update):
        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Scripts/BuildbotTesterQueueView.js:
        (BuildbotTesterQueueView.prototype.update.appendBuilderQueueStatus):
        (BuildbotTesterQueueView.prototype._presentPopoverForMultipleFailureKinds):

2014-01-06  Tim Horton  <timothy_horton@apple.com>

        build.webkit.org/dashboard should still function if localStorage is disabled
        https://bugs.webkit.org/show_bug.cgi?id=126511

        Reviewed by Alexey Proskuryakov.

        If localStorage is disabled, we should carry on with a warning.

        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Scripts/Main.js:
        Don't show the gear if localStorage isn't working.

        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Scripts/QueueView.js:
        (QueueView.prototype._updateHiddenState):
        Bail if localStorage isn't working.

        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Scripts/Settings.js:
        (Settings.prototype.available):

2014-01-02  Roger Fong  <roger_fong@apple.com>

        Set VSINSTALLDIR in win ews start script.
        https://bugs.webkit.org/show_bug.cgi?id=126407

        Reviewed by Brent Fulgham.

        * EWSTools/start-queue-win.sh:

2014-01-06  Bem Jones-Bey  <bjonesbe@adobe.com>

        Adding myself as a reviewer.

        Unreviewed.

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

2014-01-06  Zan Dobersek  <zdobersek@igalia.com>

        Unreviewed. Unbreaking JSC tests after r161328.

        * Scripts/webkitdirs.pm:
        (cmakeBasedPortName): Only recognize the GTK port as CMake-based if actually building
        through the CMake build system (i.e. passing --gtkcmake to build-webkit).

2014-01-05  Martin Robinson  <mrobinson@igalia.com>

        [GTK][CMake] Add support for building the GTK+ port with cmake to build-webkit
        https://bugs.webkit.org/show_bug.cgi?id=126212

        Reviewed by Daniel Bates.

        Allow building the GTK+ cmake port with --gtkcmake.

        * Scripts/build-webkit: Use the new isGtkCMake function to head down the CMake path
        when appropriate. Skip the autotoos path when isGtkAutotools is false.
        * Scripts/webkitdirs.pm: Add an isGtkCMake path in addition to the newly renamed isGtkAutotools.
        Add isGtk which checks isGtkCMake || isGtkAutotools
        (determineArchitecture): Use the CMake path for GTK+ when appropriate.
        (argumentsForConfiguration): use --gtkcmake when appropriate.
        (jscProductDir): Look in the CMake directory when appropriate.
        (builtDylibPathForName): CMake builds the library into a different directory, so handle that.
        (determineIsGtkCMake): Added.
        (isGtkCMake): Added.
        (isGtkAutotools): Renamed from isGtk.
        (isGtk): New function which returns isGtkAutotools || isGtkCMake.
        (determineIsGtkAutotools): Renamed from determineIsGtk.
        (cmakeBasedPortName): Added a GTK+ path.

2014-01-04  Martin Robinson  <mrobinson@igalia.com>

        [GTK] [CMake] Fix the video and audio build
        https://bugs.webkit.org/show_bug.cgi?id=126464

        Reviewed by Philippe Normand.

        * GtkLauncher/CMakeLists.txt: Add GStreamer includes and libraries, since GtkLauncher uses it.

2014-01-03  Alexey Proskuryakov  <ap@apple.com>

        It's confusing to have two elements link to the same URL at build.webkit.org/dashboard
        https://bugs.webkit.org/show_bug.cgi?id=126467

        Reviewed by Geoffrey Garen.

        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Scripts/StatusLineView.js:
        (StatusLineView): Don't linkify the label text, the bubble is easier to target with mouse
        pointer, or to tap.

2014-01-03  Alexey Proskuryakov  <ap@apple.com>

        build.webkit.org/dashboard says "failed build" even if it's another step that failed
        https://bugs.webkit.org/show_bug.cgi?id=126461

        Reviewed by Geoffrey Garen.

        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Scripts/BuildbotBuilderQueueView.js:
        (BuildbotBuilderQueueView.prototype.update.appendBuilderQueueStatus): Link to main
        build page if it's not the compilation that failed. Use text from buildbot for description.
        Show a yellow icon if it's a different kind of failure.

        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Scripts/BuildbotIteration.js:
        (BuildbotIteration.prototype.update): Record whether it was compile-webkit step that failed.

2014-01-03  Bem Jones-Bey  <bjonesbe@adobe.com>

        setup-git-clone fails to get email address from git
        https://bugs.webkit.org/show_bug.cgi?id=126446

        Reviewed by Ryosuke Niwa.

        The setup-git-clone command fails to get an email address from git
        because of a bug in VCSUtils. This patch fixes that bug, and also
        makes it so that when VCSUtils fails for real because of a local
        misconfiguration, the error message is actually presented to the user
        of setup-git-clone.

        * Scripts/VCSUtils.pm:
        (gitConfig): Call isGit() instead of accessing $isGit directly to make
            sure that $isGit is properly initialized.
        * Scripts/webkitpy/tool/commands/setupgitclone.py:
        (SetupGitClone.execute): Pull out username and email acquistion to
            it's own method.
        (SetupGitClone._get_username_and_email): Catch the exception thrown
            when VCSUtils fails and print out the error message so that the
            user actually knows why the command failed.

2014-01-03  Alexey Proskuryakov  <ap@apple.com>

        It feels too hard to get rid of a popover at build.webkit.org/dashboard
        https://bugs.webkit.org/show_bug.cgi?id=126451

        Reviewed by Simon Fraser.

        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Styles/Popover.css:
        (.popover.fade-out): Reduced the timeout - 200 ms is enough to not have flicker
        when moving the mouse from an element to its popover.

2014-01-03  Alexey Proskuryakov  <ap@apple.com>

        Please add a way to quick peek at failing tests at build.webkit.org/dashboard
        https://bugs.webkit.org/show_bug.cgi?id=122181

        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Scripts/BuildbotQueueView.js:
        (BuildbotQueueView.prototype._presentNoChangePopover): Update one more place for
        popover.present signature change.

2014-01-03  Alexey Proskuryakov  <ap@apple.com>

        Please add a way to quick peek at failing tests at build.webkit.org/dashboard
        https://bugs.webkit.org/show_bug.cgi?id=122181

        Reviewed by Timothy Hatcher and Timothy Horton.

        Detailed results are saved by run-webkit-tests to full_results.json (which is actually
        JSONP). Dashboard will load them on demand.

        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Scripts/Buildbot.js:
        (Buildbot.prototype.layoutTestResultsURLForIteration): Moved from WebKitBuildbot.js
        and made it use a function from WebKitBuildbot that builds results directory path.
        (Buildbot.prototype.layoutTestFullResultsURLForIteration): Added a function that builds
        a URL for full_results.json.
        (Buildbot.prototype.layoutTestCrashLogForIteration): Added a function that builds
        a URL for a crash log.

        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Scripts/BuildbotIteration.js:
        (BuildbotIteration.prototype.loadLayoutTestResults): Load and cache layout test results for
        the iteration.

        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Scripts/BuildbotQueueView.js:        
        (BuildbotQueueView.prototype._presentPopoverForPendingCommits): Updated for changed
        popover API (see below).
        (BuildbotQueueView.prototype._presentPopoverForRevisionRange): Ditto.

        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Scripts/BuildbotTesterQueueView.js:
        (BuildbotTesterQueueView.prototype.update.appendBuilderQueueStatus): Added a check
        for iterations that were interrupted (previously, they were displayed incorrectly,
        often as passes). Install popover trackers for failure bubbles for which we can currently
        display something useful.
        (BuildbotTesterQueueView.prototype._popoverContentForLayoutTestRegressions): Build
        a popover for layout test regressions when we have the data loaded on demand.
        We have test paths, special indicators for crashes/timeouts, and links to test history
        at flakiness dashboard.
        (BuildbotTesterQueueView.prototype._presentPopoverForLayoutTestRegressions): Show
        the popover for layout test regressions. Just shows "Loading..." until the data is
        loaded.
        (BuildbotTesterQueueView.prototype._presentPopoverForMultipleFailureKinds): List
        types of failures if there are multiple. There is a lot of similarity with
        appendBuilderQueueStatus(), but I couldn't find a good way to share the code.

        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Scripts/Initialization.js:
        Create a global test history object, which is used for links in layout test popover.

        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Scripts/Popover.js:
        Changed the API to be more like WebInspector again, allowing for changing content
        of an existing popover. As the size of a popover can change, making the mouse pointer
        enter it without a mousenter event, install a handler for mousewheel instead, and block
        document scrolling from this event handler when needed.

        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Scripts/StatusLineView.js:
        (StatusLineView.prototype.get statusBubbleElement): Added an accessor for status
        bubble element, making it possible to install a popover on it.

        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Scripts/Utilities.js:
        (JSON.load): Added the ability to load JSONP by providing an optional callback name.

        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Scripts/WebKitBuildbot.js:
        (WebKitBuildbot.prototype.layoutTestResultsDirectoryURLForIteration): Switched from
        building a complete results URL to only building one for root results path. This is
        the part that depends on specific buildbot installation, everything relative to it
        is the same.

        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Scripts/WebKitTestHistory.js: Added.
        Build a path to test history page. In the future, we may consider adding code to
        load the data and display it inline.

        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Styles/QueueView.css:
        Added styles for this new popover.

        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/index.html: Added
        a new file, WebKitTestHistory.js.

2014-01-03  Carlos Garcia Campos  <cgarcia@igalia.com>

        REGRESSION(r161214): [GTK] WebKit2 C API tests fail to run after r161214
        https://bugs.webkit.org/show_bug.cgi?id=126430

        Reviewed by Martin Robinson.

        * Scripts/run-gtk-tests:
        (TestRunner._setup_testing_environment):
        * gtk/common.py: Use common.tests_library_build_path() instead.
        (tests_library_build_path): Helper funtion that returns the path
        where the tests libraries are built.

2014-01-03  Martin Robinson  <mrobinson@igalia.com>

        [CMake] Build TestWebKitAPI tests into a directory structure
        https://bugs.webkit.org/show_bug.cgi?id=126358

        Reviewed by Gyuyoung Kim.

        WebKitGTK+ builds the TestWebKitAPI tests into a "TestWebKitAPI" directory. This
        is useful for keeping the "bin" directory tidy during building and will make it easier
        to integrate the CMake build into the existing WebKitGTK+ scripts.

        * TestWebKitAPI/CMakeLists.txt: Set the output directory of all TestWebKitAPI binaries
        and make the names simpler now that the directory identifies what category the test is in.

2014-01-03  Alexey Proskuryakov  <ap@apple.com>

        Provide a visual clue when element has a popover at build.webkit.org/dashboard
        https://bugs.webkit.org/show_bug.cgi?id=126281

        Reviewed by Timothy Hatcher.

        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Scripts/PopoverTracker.js:
        (PopoverTracker): Add a class name to elements with popovers.

        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Styles/Main.css:
        (*): We have -webkit-user-select:none, so let's also not show text selection cursor.
        I might have broke that recently.
        (*:link): Show hand cursor over links.
        (.popover-tracking:hover): Put a shadow on hover over element with popovers.

        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Styles/StatusLineView.css:
        (.status-line .message .revision-number): Show text selection cursor on our only
        selectable text element.
        (.status-line .bubble.popover-tracking:hover): Text in a bubble looks better with
        a white shadow than with a dark one on hover.

2014-01-02  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] Add API to WebKitResponsePolicyDecision to check if the MIME type can be shown
        https://bugs.webkit.org/show_bug.cgi?id=124652

        Reviewed by Martin Robinson.

        * MiniBrowser/gtk/BrowserWindow.c:
        (webViewDecidePolicy): Use the new API instead of
        webkit_web_view_can_show_mime_type().

2014-01-02  Carlos Garcia Campos  <cgarcia@igalia.com>

        REGRESSION(r160304): [GTK] Disable libtool fast install
        https://bugs.webkit.org/show_bug.cgi?id=126381

        Reviewed by Martin Robinson.

        Remove -no-fast-install ld flag since fast install is now disabled
        globally.

        * GNUmakefile.am:
        * GtkLauncher/GNUmakefile.am:
        * MiniBrowser/gtk/GNUmakefile.am:
        * TestWebKitAPI/GNUmakefile.am:
        * WebKitTestRunner/GNUmakefile.am:

2014-01-02  Ryuan Choi  <ryuan.choi@samsung.com>

        Unreviewed. Add myself to EFL and related watch lists.

        * Scripts/webkitpy/common/config/watchlist:

2014-01-02  Danilo Cesar Lemes de Paula  <danilo.cesar@collabora.co.uk>

        [GTK] fixing ycm_extra_conf.py file
        https://bugs.webkit.org/show_bug.cgi?id=126371

        It's an attempt to fix three problems with the current ycm_extra_conf file.
        The current implementation assumes that it's a symlink, which is not true.
        Usually python creates a pyc file, and this is what you get in __file__.
        the .pyc is not a symlink, and the current implementation doesn't work
        if that's the case.

        It also assumes that the user is in the root folder.
        If the user is in WebkitBuild/Debug and open a file as ../../Source/* it won't work.

        Last but not least, "elif flag in FLAGS_PRECEDING_PATHS" emits an
        exception since "flag" doesn't exists.

        All those things were fixed.

        Reviewed by Martin Robinson.

        * gtk/ycm_extra_conf.py:
        (transform_relative_paths_to_absolute_paths):

2014-01-02  Alexey Proskuryakov  <ap@apple.com>

        Bindings tests results links are broken at build.webkit.org/dashboard
        https://bugs.webkit.org/show_bug.cgi?id=126402

        Reviewed by Tim Horton.

        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Scripts/Buildbot.js:
        (Buildbot.prototype.bindingsTestResultsURLForIteration): Fixed a typo that was there
        since the beginning.

2014-01-02  Alexey Proskuryakov  <ap@apple.com>

        "+" is very confusing at http://build.webkit.org/dashboard
        https://bugs.webkit.org/show_bug.cgi?id=126400

        Reviewed by Tim Horton.

        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Scripts/BuildbotQueueView.js:
        (BuildbotQueueView.prototype._appendPendingRevisionCount): Instead of listing open
        source and internal counts separately, simply add them. One can always open a popover
        for more detail.

2014-01-02  Alexey Proskuryakov  <ap@apple.com>

        Accessing Trac from build.webkit.org/dashboard should enable XMLHttpRequest.withCredentials
        https://bugs.webkit.org/show_bug.cgi?id=126391

        Reviewed by Dan Bernstein.

        Make it conditional, as trac.webkit.org doesn't work when withCredentials is enabled.
        One can request credentials use via Initialization.js.

        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Scripts/Trac.js:
        (Trac):
        (Trac.prototype.update):
        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Scripts/Utilities.js:
        (loadXML):

2014-01-02  Commit Queue  <commit-queue@webkit.org>

        Unreviewed, rolling out r160846.
        http://trac.webkit.org/changeset/160846
        https://bugs.webkit.org/show_bug.cgi?id=126395

        Breaks build scripts for Windows when Visual Studio is not
        installed in Program Files (Requested by rfong on #webkit).

        * Scripts/webkitdirs.pm:
        (visualStudioInstallDir):

2014-01-02  Martin Robinson  <mrobinson@igalia.com>

        [GTK] [CMake] run-gtk-tests should run with the cmake build
        https://bugs.webkit.org/show_bug.cgi?id=126341

        Reviewed by Carlos Garcia Campos.

        * Scripts/run-gtk-tests:
        (TestRunner.__init__): Use the new calling conventions for the common script.
        (TestRunner._setup_testing_environment): Ditto.
        * gtk/common.py:
        (set_build_types): Added set_build_types, to avoid having build_type arguments
        for all functions in common.
        (binary_build_path): Added this function which gets the path to the built binaries.
        (get_build_path): Removed the build_types argument.
        (build_path): Removed the build_types argument and call get_build_path directly now.

2014-01-02  Alexey Proskuryakov  <ap@apple.com>

        https://bugs.webkit.org/show_bug.cgi?id=126391
        Accessing Trac from build.webkit.org/dashboard should enable XMLHttpRequest.withCredentials

        Rubber-stamped by Dan Bernstein.

        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Scripts/Utilities.js:
        (loadXML): Quick and dirty fix, with a FIXME.

2014-01-01  Martin Robinson  <mrobinson@igalia.com>

        [GTK] Rename libtestnetscapeplugin to libTestNetscapePlugin
        https://bugs.webkit.org/show_bug.cgi?id=126349

        Reviewed by Carlos Garcia Campos.

        All CMake ports use "libTestNetscapePlugin," so choosing the same
        name in the autotools port will make the transition easier.

        * GNUmakefile.am: Rename the plugin library.

2014-01-01  ChangSeok Oh  <changseok.oh@collabora.com>

        [GTK][WK2] Back items are shown in reverse order in MiniBrowser
        https://bugs.webkit.org/show_bug.cgi?id=126354

        Reviewed by Carlos Garcia Campos.

        The latest visited site for backward history should be placed on the top of a history stack
        as a common behavior. However currently its order is reverse.

        * MiniBrowser/gtk/BrowserWindow.c:
        (browserWindowUpdateNavigationActions):

2013-12-30  Martin Robinson  <mrobinson@igalia.com>

        [GTK] Make the output directory of GObject unit tests binaries consistent with the CMake build
        https://bugs.webkit.org/show_bug.cgi?id=126297

        Reviewed by Philippe Normand.

        * Scripts/run-gtk-tests: Looks for the tests in the new directories.
        (TestRunner): Ditto.
        (TestRunner._run_test): Ditto.

2013-12-30  Alexey Proskuryakov  <ap@apple.com>

        full_results.json should distinguish unexpected failures from expected ones
        https://bugs.webkit.org/show_bug.cgi?id=126300

        Reviewed by Timothy Hatcher.

        * Scripts/webkitpy/layout_tests/models/test_run_results.py:
        (summarize_results): Add "report" element to JSON, which tells the consumer how
        this result was counted for summary.

        * Scripts/webkitpy/layout_tests/run_webkit_tests_integrationtest.py:
        Updated results to include the new element.

        * Scripts/webkitpy/layout_tests/views/buildbot_results.py:
        (print_unexpected_results): Added a comment pointing to another place that
        summarizes results, and should stay in sync.

2013-12-30  Ryuan Choi  <ryuan.choi@samsung.com>

        Replace remaning CoreIPC namespace to IPC
        https://bugs.webkit.org/show_bug.cgi?id=126305

        Reviewed by Anders Carlsson.

        * TestWebKitAPI/CMakeLists.txt: Replaced CoreIPC includes to IPC.
        * TestWebKitAPI/efl/PlatformWebView.cpp: Removed temporal define for IPC.
        * WebKitTestRunner/CMakeLists.txt: Replaced CoreIPC includes to IPC.
        * WebKitTestRunner/efl/PlatformWebViewEfl.cpp: Removed temporal define for IPC.

2013-12-30  Brendan Long  <self@brendanlong.com>

        Add myself to the committers list.

        Unreviewed.

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

2013-12-30  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] Split WebKit2APITests/TestWebKitWebView
        https://bugs.webkit.org/show_bug.cgi?id=126284

        Reviewed by Philippe Normand.

        Skip only WebKitWebView/mouse-target and all TestAuthentication
        tests that are timing out when running under xvfb.

        * Scripts/run-gtk-tests:
        (TestRunner):

2013-12-29  Michał Pakuła vel Rutka  <m.pakula@samsung.com>

        [EFL][WK2] Disable geolocation API test
        https://bugs.webkit.org/show_bug.cgi?id=125851

        Reviewed by Gyuyoung Kim.

        Geolocation is turned off by default in EFL port, so it shouldn't be tested.

        * TestWebKitAPI/PlatformEfl.cmake: Move Geolocation to test_webkit2_api_fail_BINARIES.

2013-12-29  Ryuan Choi  <ryuan.choi@samsung.com>

        [EFL] Remove ewk_view_tiled
        https://bugs.webkit.org/show_bug.cgi?id=125961

        Reviewed by Gyuyoung Kim.

        * DumpRenderTree/efl/DumpRenderTreeChrome.cpp:
        (shouldUseTiledBackingStore):
        Moved from DumpRenderTreeChrome to enable WebCore's TiledBackingStore
        instead of switching ewk_view_tiled.
        (DumpRenderTreeChrome::createView):
        * DumpRenderTree/efl/DumpRenderTreeView.cpp:
        (drtViewAdd):
        * EWebLauncher/main.c: Removed ewk_view_tiled option.
        (windowCreate):
        (parseUserArguments):

2013-12-29  Alexey Proskuryakov  <ap@apple.com>

        Pending revision popover is slightly misplaced at build.webkit.org/dashboard
        https://bugs.webkit.org/show_bug.cgi?id=126278

        Reviewed by Timothy Hatcher.

        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Scripts/BuildbotQueueView.js:
        (BuildbotQueueView.prototype._appendPendingRevisionCount): Create a span for the text,
        as StatusLineView message element has extra padding, and doesn't fit the text snugly.
        (BuildbotQueueView.prototype._revisionPopoverContentForIteration): Added bug number to a FIXME.

        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Scripts/StatusLineView.js:
        (StatusLineView.prototype.set messageElement): Removed the getter, as we no longer need it.

        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Styles/StatusLineView.css:
        Removed display:inline-block hack for messageElement div, as we no longer use it for measuring text bounds.

2013-12-29  Alexey Proskuryakov  <ap@apple.com>

        Interrupted test runs should not count at build.webkit.org/dashboard
        https://bugs.webkit.org/show_bug.cgi?id=126279

        Reviewed by Timothy Hatcher.

        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Scripts/BuildbotIteration.js:
        (BuildbotIteration.prototype.get productive):
        (BuildbotIteration.prototype.get previousProductiveIteration): Replaced previous with
        this accessor to skips iterations that don't have relevant data. We still want to
        display them, but revision ranges should not be affected.
        (BuildbotIteration.prototype.update): Record whether the iteration was up for retry.

        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Scripts/BuildbotQueueView.js:
        Use latest productive iteration instead of latest iteration for pending revision
        count and popovers.

2013-12-29  Alexey Proskuryakov  <ap@apple.com>

        Please display (and link to) revision ranges at build.webkit.org/dashboard
        https://bugs.webkit.org/show_bug.cgi?id=122187

        Reviewed by Timothy Hatcher.

        Added popovers for revision numbers. Removed direct links, because they were misleading -
        a test run covers a revision range, not just the latest revision. This also makes
        selecting a revision for copy easier.

        All revision numbers have the popovers for consistency, although they are most useful
        for iterations that are not the last ones in a view, because the content is a delta
        from previous iteration.

        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Scripts/BuildbotBuilderQueueView.js:
        (BuildbotBuilderQueueView.prototype.update.appendBuilderQueueStatus):
        revisionLinksForIteration() is now named revisionContentForIteration().

        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Scripts/BuildbotTesterQueueView.js:
        (BuildbotTesterQueueView.prototype.update.appendBuilderQueueStatus):
        Ditto.

        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Scripts/BuildbotIteration.js:
        (BuildbotIteration.prototype.get previous): Added a function to go back in iteration history.

        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Scripts/BuildbotQueueView.js:
        Refactored to support the new popover variation. Replaced revisionLinksForIteration()
        with a function that builds an element with popover.

        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Scripts/PopoverTracker.js:
        Changed to take a function for popover presentation instead of delegate object.
        We only need one delegate function, and it's easier to have multiple popovers per view class
        this way.

        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Styles/Main.css:
        Removed a rule for selectable class. It's replaced with a semantic rule in StatusLineView.css.

        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Styles/QueueView.css:
        Renamed pending-commits-popover class to commit-history-popover.

        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Styles/StatusLineView.css:
        (.status-line .message .revision-number): Added a rule for revision numbers.

2013-12-29  Alexey Proskuryakov  <ap@apple.com>

        Please display information about pending runs in build.webkit.org/dashboard
        https://bugs.webkit.org/show_bug.cgi?id=122180

        Reviewed by Timothy Hatcher.

        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Scripts/BuildbotBuilderQueueView.js:
        (BuildbotBuilderQueueView.prototype.update.appendBuilderQueueStatus): Added a semicolon at the end of a line.

        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Scripts/BuildbotQueueView.js:
        (BuildbotQueueView.prototype._latestFinishedIteration): Factored out of _appendPendingRevisionCount.
        (BuildbotQueueView.prototype._appendPendingRevisionCount): Install a popover tracker over the element.
        (BuildbotQueueView.prototype.lineForCommit): Build an element for a particular commit ot be shown in popover.
        (BuildbotQueueView.prototype.presentPopoverForElement): Build and show popover content when PopoverTracker
        asks us to.

        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Scripts/Geometry.js: Added.
        Taken from WebInspector with minimal changes:
        - Changed root name from WebInspector to Dashboard.
        - Removed some unused functionality.
        - Added Rect.containsPoint.

        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Scripts/Popover.js: Added.
        Popover has extensive changes compared to WebInspector version, only drawing code is the same:
        - Fixed to work in scrollable pages - WebInspector version assumes that window
        and document coordinates are the same, and also erroneously dismisses a scrollable
        popover if scrolling cascades out of it after reaching a bound.
        - Simplified API and implementation to Dashboard needs, it is no longer possible to
        change content of an existing popover.
        - Rewrote visibility tracking to be more complete, and not rely on external tracker
        object so much.
        - Added code to flash scroll bars when showing a scrollable popover.

        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Scripts/PopoverTracker.js: Added.
        Objects of this class show and hide popovers as appropriate for registered active elements.

        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Scripts/StatusLineView.js:
        (StatusLineView.prototype.get messageElement): Added an accessor, so that we could
        install a popover on message element. It's the only visible element in pending commit
        line, but the line has different bounds, so we can't install a popover on it (it
        would be incorrectly positioned if we did).

        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Scripts/Trac.js:
        (Trac.prototype._convertCommitInfoElementToObject):
        - Some trac installations report author in a different element, updated to support that.
        - Changed to parse title out of description, because trac titles are ugly. Also,
        we get a nice HTML with links from the description.

        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Scripts/Utilities.js:
        (Node.prototype.isAncestor): Copied from Web Inspector, only changing the form for
        consistency with the rest of this file (add a property on prototype with assignment
        instead of using Object.defineProperty).
        (Node.prototype.isDescendant): Ditto.
        (Node.prototype.isSelfOrAncestor): Ditto.
        (Node.prototype.isSelfOrDescendant): Ditto.
        (DOMTokenList.prototype.contains): Ditto.

        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Styles/Popover.css: Added.
        Like JS counterpart, mostly lifted from Web Inspector.

        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Styles/QueueView.css:
        Added style rules for pending commits popover.

        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Styles/StatusLineView.css:
        (.status-line.no-bubble .message): Changed to display:inline-block, so that it fits
        to content, and we can show the popover in a correct place.

        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/index.html: Added new files.

2013-12-27  Gavin Barraclough  <barraclough@apple.com>

        Merge PageVisibilityState & ViewState::IsVisible in WebKit2
        https://bugs.webkit.org/show_bug.cgi?id=126214

        Reviewed by Alexey Proskuryakov.

        WebKit2 redundantly tracks the visibility of the view through two mechanisms - the visibility
        state, and the view state. Remove visibility state from the WebKit2 layer. The visibility
        state also tracks the prerender state - so split this out and handle it separately (a change
        we should make in WebCore, too).

        Tools - WebKit2 no longer (poorly) supports a fake visibility state, so to test the page
        visibility mechanisms we should actually be changing characteristics of the view that will
        be detected by WebKit2 as a visibility change. This affects three things:
            1) On setVisibilityState WebKitTestRunner must actually change visibility of the view.
            2) The 'PageVisibilityState' test in the API tests is useless (as evidenced by the fact
               that page visibility has been broken in WebKit2 for a couple of months, and didn't
               catch this fact). Removed in favour of:
            3) 'PageVisibilityStateWithWindowChanges' - this is the good stuff. This actually tests
               the visibility mechanism. Beef this test up by adding coverage for: a) the prerender
            state, b) document.hidden, and c) too many state change notifications (it already looks
            for too few).

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WebKit2/PageVisibilityState.cpp: Removed.
            - Removed PageVisibilityState - this test was ineffective, API no longer supports this
              test, and behaviour is covered by PageVisibilityStateWithWindowChanges.
        * TestWebKitAPI/Tests/mac/PageVisibilityStateWithWindowChanges.mm:
        (-[PageVisibilityStateDelegate webView:runJavaScriptAlertPanelWithMessage:initiatedByFrame:]):
        (runJavaScriptAlert):
            - Add checking for too many calls to the alert.
        (TestWebKitAPI::PageVisibilityStateWithWindowChanges::setPrerender):
            - Added methods to set visibility to prerender.
        (TestWebKitAPI::PageVisibilityStateWithWindowChanges::runTest):
            - Added checking of 'document.hidden'.
        * WebKitTestRunner/TestController.cpp:
        (WTR::TestController::setVisibilityState):
        * WebKitTestRunner/TestController.h:
        * WebKitTestRunner/efl/TestControllerEfl.cpp:
        (WTR::TestController::setHidden):
        * WebKitTestRunner/gtk/TestControllerGtk.cpp:
        (WTR::TestController::setHidden):
        * WebKitTestRunner/mac/TestControllerMac.mm:
        (WTR::TestController::setHidden):
            - Add setHidden method; call this from setVisibilityState.

2013-12-27  Alexey Proskuryakov  <ap@apple.com>

        Display EWS status on bot watcher's dashboard
        https://bugs.webkit.org/show_bug.cgi?id=126224

        Silence spurious exceptions, no visible behavior change.

        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Scripts/EWSQueue.js:
        (EWSQueue.prototype.update): Removed code that was only needed for an experimental
        feature that wasn't landed.

2013-12-26  Alexey Proskuryakov  <ap@apple.com>

        Display EWS status on bot watcher's dashboard
        https://bugs.webkit.org/show_bug.cgi?id=126224

        Reviewed by Timothy Hatcher.

        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Scripts/Buildbot.js:
        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Scripts/Dashboard.js: Added.
        Moved platform definitions out of Buildbot.js, as they are also needed for EWS.

        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Scripts/BuildbotQueueView.js:
        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Scripts/QueueView.js: Added.
        (QueueView):
        (QueueView.prototype.updateSoon):
        (QueueView.prototype.update):
        (QueueView.prototype._updateHiddenState):
        Moved auto-update and hide logic to a base class, as it equally applies to EWS.

        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Scripts/EWS.js: Added.
        This is a peer to Buildbot.js and WebKitBuildbot.js.

        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Scripts/EWSQueue.js: Added.
        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Scripts/EWSQueueView.js: Added.
        Quite simple for now, only keeping track of queue size.
        
        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Scripts/Initialization.js:
        Initialize EWS.

        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Scripts/Main.js:
        Create EWS views.

        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Scripts/WebKitBuildbot.js:
        Updated for Buildbot.Platform rename, it's now Dashboard.Platform.

        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Styles/BuildbotBuilderQueueView.css: Removed.
        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Styles/BuildbotQueueView.css: Removed.
        These were empty, no reason to waste the time loading them.

        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Styles/BuildbotTesterQueueView.css: Removed.
        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Styles/QueueView.css: Copied from Tools/BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Styles/BuildbotQueueView.css.
        Renamed, as these styles apply to all queues, not just buildbot ones (and they have to, as columns should look alike).

        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/index.html:
            - Changed page title, as it no longer displays just buildbot status.
            - Updated subresource lists for the new, renamed and removed files.

2013-12-26  Alexey Proskuryakov  <ap@apple.com>

        EWS status JSON should include Access-Control-Allow-Origin
        https://bugs.webkit.org/show_bug.cgi?id=126246

        Reviewed by Ryosuke Niwa.

        * QueueStatusServer/app.yaml: Update version.
        * QueueStatusServer/handlers/queuestatusjson.py:
        (QueueStatusJSON.get): Add the header field.

2013-12-26  Alexey Proskuryakov  <ap@apple.com>

        Some links at build.webkit.org/dashboard don't show status messages, and aren't keyboard accessible
        https://bugs.webkit.org/show_bug.cgi?id=126234

        Reviewed by Timothy Hatcher.

        Changed elements that are semantically links from <div> to <a>.

        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Scripts/StatusLineView.js:
        (StatusLineView): Create <a> or <div> elements conditionally on whether we have a URL.
        Don't try simulate a link with CSS/JS, it's not needed any more.
        (StatusLineView.prototype._clicked): Removed.

        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Styles/BuildbotQueueView.css:
        Removed text-decoration rules, default ones in Main.css now work for queue elements.

        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Styles/Main.css:
        Simplified cursor rules.
        Added a universal rule for links to only show underline on hover, as this is what
        we want almost everywhere.

        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Styles/StatusLineView.css:
        (.status-line .bubble): Added text-decoration: none, as this is the one place where
        we don't want it even on hover.
        (.status-line .label): Force display: block for consistent layout between <a>
        and <div>.

2013-12-25  Alexey Proskuryakov  <ap@apple.com>

        Please clarify "pending" reporting at build.webkit.org/dashboard
        https://bugs.webkit.org/show_bug.cgi?id=122191

        Reviewed by Timothy Hatcher.

        Reporting the count of pending runs didn't make a lot of sense - first, runs are
        coalesced and sometimes even out of order, and second, buildbot's notion of pending
        run was confusingly different from dashboard's.

        Let's display how many SVN revisions are pending. This can be somewhat misleading
        too, because some revisions (like those for other platforms) don't trigger builds,
        but it's better than what we had.

        This patch also lays the groundwork for displaying detailed information about
        pending revisions.

        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Scripts/BuildbotBuilderQueueView.js:
        (BuildbotBuilderQueueView.prototype.update.appendBuilderQueueStatus): Instead of
        building pending status line directly, call newly added base class method.

        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Scripts/BuildbotTesterQueueView.js:
        (BuildbotTesterQueueView.prototype.update.appendBuilderQueueStatus): Ditto.

        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Scripts/BuildbotQueueView.js:
        (BuildbotQueueView): Listen for events when new SVN revisions are landed, and update the view.
        (BuildbotQueueView.prototype._appendPendingRevisionCount): Add a line for pending
        SVN revisions. It uses a new style, StatusLineView.Status.NoBubble, because this
        information is secondary, and doesn't need as much attention.
        (BuildbotQueueView.prototype.revisionLinksForIteration): Build revisionURL through
        Trac, not through Buildbot.
        (BuildbotQueueView.prototype._newCommitsRecorded): Schedule an update, just like when
        iterations are updated.

        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Scripts/Initialization.js:
        Initialize a global webkitTrac object.

        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Scripts/StatusLineView.js:
        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Styles/StatusLineView.css:
        Added a new style for messages without a bubble.

        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Scripts/Trac.js:
        Added a model class for Trac, which keeps track of SVN timeline, and notifies
        listeners of changes. It uses an RSS interface to Trac, because there is no JSON one.

        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Scripts/Utilities.js:
        (loadXML): Added a function to load XML asynchronously, just like existing JSON.load.

        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Scripts/WebKitBuildbot.js:
        Removed tracRevisionURL() function. Now that we have a Trac object, it just makes
        more sense to build trac URLs through it.

        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/index.html:
        Load Trac.js.

2013-12-25  Jongwoo Choi  <jw0330.choi@samsung.com>

        [EFL] Activate keyboard homepage shortcut on efl minibrowser.
        https://bugs.webkit.org/show_bug.cgi?id=124636

        Reviewed by Gyuyoung Kim.

        * MiniBrowser/efl/main.c: Added.
        (on_key_down): Add a homepage shortcut using Alt + Home key. 

2013-12-25  Alexey Proskuryakov  <ap@apple.com>

        Revision selection behavior at build.webkit.org/dashboard is annoying
        https://bugs.webkit.org/show_bug.cgi?id=126235

        Reviewed by Tim Horton.

        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Scripts/BuildbotQueueView.js:
        (BuildbotQueueView.prototype.revisionLinksForIteration): Make the whole message
        selectable, not just the numbers in it.
        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Styles/Main.css:
        (.selectable): Make selectable enable default behavior, not user-select:all.

2013-12-25  Martin Robinson  <mrobinson@igalia.com>

        [GTK] [CMake] Clean up generated sources directories
        https://bugs.webkit.org/show_bug.cgi?id=126216

        Reviewed by Gustavo Noronha Silva.

        * DumpRenderTree/PlatformGTK.cmake: Use the new derived sources variables.
        * GtkLauncher/CMakeLists.txt: Ditto.
        * MiniBrowser/gtk/CMakeLists.txt: Ditto.
        * TestWebKitAPI/CMakeLists.txt: Now that the EFL and GTK+ forwarding header locations differ,
        move the platform-specific includes to the EFL and GTK platform files. Also clean up forwarding
        header generation into on target.
        * TestWebKitAPI/PlatformEfl.cmake: Added EFL-specific locations to the include list.
        * TestWebKitAPI/PlatformGTK.cmake: Added GTK-specific locations to the include list.
        * WebKitTestRunner/CMakeLists.txt: Same as for TestWebKitAPI.
        * WebKitTestRunner/PlatformEfl.cmake: Ditto.
        * WebKitTestRunner/PlatformGTK.cmake: Ditto.
        * gtk/generate-gtkdoc: Update to select the appropriate derived sources locations for
        the cmake build.

2013-12-23  Alexey Proskuryakov  <ap@apple.com>

        Add a JSON interface for getting EWS queue status
        https://bugs.webkit.org/show_bug.cgi?id=126182

        Reviewed by Ryosuke Niwa.

        The current goal is to add an indicator of how many patches are in the queue, and
        the JSON also includes some other information that was easy to add.

        * QueueStatusServer/app.yaml: Updated version for deployment.

        * QueueStatusServer/handlers/queuestatusjson.py: Added. Returns a JSON with some
        bot and patch queue information.

        * QueueStatusServer/index.yaml: Added an index for a new query that only returns
        bot ids.

        * QueueStatusServer/main.py: Map /queue-status-json/ directory to QueueStatusJSON
        handler.

        * QueueStatusServer/config: Added property svn:ignore.
        * QueueStatusServer/filters: Added property svn:ignore.
        * QueueStatusServer/loggers: Added property svn:ignore.
        * QueueStatusServer/handlers: Added property svn:ignore.
        * QueueStatusServer/model: Added property svn:ignore.
        Ignore compiled *.pyc files in all directories they appear in when running locally.

2013-12-23  Martin Robinson  <mrobinson@igalia.com>

        Try to fix the build after r161017

        * gtk/common.py:
        (is_cmake_build): Instead of checking whether the return value of build_path
        of the CMakeCache.txt file is None, check if a file actually exists at that path.

2013-12-23  Gustavo Noronha Silva  <gns@gnome.org>

        [GTK] [CMake] Add support for generating gtkdoc
        https://bugs.webkit.org/show_bug.cgi?id=116376

        Reviewed by Martin Robinson.

        * gtk/common.py: look for files in the directories used by the cmake build as well.

2013-12-23  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] Build with network process unconditionally
        https://bugs.webkit.org/show_bug.cgi?id=126128

        Reviewed by Martin Robinson.

        * Scripts/webkitperl/FeatureList.pm: Remove network-process
        feature command line option.

2013-12-23  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] run-gtk-tests should always run glib tests with -k option
        https://bugs.webkit.org/show_bug.cgi?id=126132

        Reviewed by Philippe Normand.

        With -k command line option, gtester continues running all other
        test cases after a failure.

        * Scripts/run-gtk-tests:
        (TestRunner._run_test_glib): Use -k option when runing glib tests
        to not stop on failure.

2013-12-22  Martin Robinson  <mrobinson@igalia.com>

        [GTK][CMake] Integrate GResource for inspector files (and others?)
        https://bugs.webkit.org/show_bug.cgi?id=125569

        Reviewed by Gustavo Noronha Silva.

        * gtk/generate-inspector-gresource-manifest.py: Added.

2013-12-22  Csaba Osztrogonác  <ossy@webkit.org>

        Last URTBF after r160971 to make EFL build happy.

        * TestWebKitAPI/efl/PlatformWebView.cpp:
        * WebKitTestRunner/efl/PlatformWebViewEfl.cpp:

2013-12-21  Carlos Garcia Campos  <cgarcia@igalia.com>

        Unreviewed. Add myself to some more watch lists.

        * Scripts/webkitpy/common/config/watchlist: Watch also soup, gst
        and binding scripts patches.

2013-12-20  Commit Queue  <commit-queue@webkit.org>

        Unreviewed, rolling out r160941.
        http://trac.webkit.org/changeset/160941
        https://bugs.webkit.org/show_bug.cgi?id=126095

        Doesn't handle subpixel layout being disabled (Requested by
        smfr on #webkit).

        * gdb/webkit.py:
        (JSCJSStringPrinter.to_string):
        (add_pretty_printers):
        * lldb/lldb_webkit.py:
        (WTFMediaTime_SummaryProvider):
        (WTFStringProvider.to_string):

2013-12-20  Bem Jones-Bey  <bjonesbe@adobe.com>

        Pretty print LayoutUnit, LayoutPoint, and LayoutSize in gdb and lldb
        https://bugs.webkit.org/show_bug.cgi?id=126080

        Reviewed by Anders Carlsson.

        This changes the output of printing LayoutUnits to be in px, removing
        the need to divide by 64 manually.

        This will lead to gdb output like:

        m_frameRect = {
            m_location = LayoutPoint(0px, 0px),
            m_size = LayoutSize(800px, 585px)
        }

        And lldb output like:

        (const WebCore::LayoutRect) $0 = {
          m_location = { x = 744px, y = 1px }
          m_size = { width = 236px, height = 40px }
        }

        This patch is based on patch for Blink by cbiesinger@chromium.org.

        * gdb/webkit.py:
        (WebCoreLayoutUnitPrinter):
        (WebCoreLayoutUnitPrinter.__init__):
        (WebCoreLayoutUnitPrinter.to_string):
        (WebCoreLayoutSizePrinter):
        (WebCoreLayoutSizePrinter.__init__):
        (WebCoreLayoutSizePrinter.to_string):
        (WebCoreLayoutPointPrinter):
        (WebCoreLayoutPointPrinter.__init__):
        (WebCoreLayoutPointPrinter.to_string):
        (add_pretty_printers):
        * lldb/lldb_webkit.py:
        (__lldb_init_module):
        (WebCoreLayoutUnit_SummaryProvider):
        (WebCoreLayoutSize_SummaryProvider):
        (WebCoreLayoutPoint_SummaryProvider):
        (WebCoreLayoutUnitProvider):
        (WebCoreLayoutUnitProvider.__init__):
        (WebCoreLayoutUnitProvider.to_string):
        (WebCoreLayoutSizeProvider):
        (WebCoreLayoutSizeProvider.__init__):
        (WebCoreLayoutSizeProvider.get_width):
        (WebCoreLayoutSizeProvider.get_height):
        (WebCoreLayoutPointProvider):
        (WebCoreLayoutPointProvider.__init__):
        (WebCoreLayoutPointProvider.get_x):
        (WebCoreLayoutPointProvider.get_y):

2013-12-20  Martin Robinson  <mrobinson@igalia.com>

        [GTK] [CMake] Add support for building ImageDiff
        https://bugs.webkit.org/show_bug.cgi?id=125960

        Reviewed by Gustavo Noronha Silva.

        * CMakeLists.txt: Build ImageDiff for GTK+.
        * ImageDiff/PlatformGTK.cmake: Added.

2013-12-20  Martin Robinson  <mrobinson@igalia.com>

        [GTK] [CMake] Add support for building DumpRenderTree
        https://bugs.webkit.org/show_bug.cgi?id=125767

        Reviewed by Gustavo Noronha Silva.

        * CMakeLists.txt: Load the DumpRenderTree cmake file for GTK+ when WebKit1 is enabled.
        * DumpRenderTree/PlatformGTK.cmake: Added.

2013-12-20  Martin Robinson  <mrobinson@igalia.com>

        [GTK] [CMake] Add support for building WebKitTestRunner
        https://bugs.webkit.org/show_bug.cgi?id=125768

        Reviewed by Gustavo Noronha Silva.

        * CMakeLists.txt: Compile WebKitTestRunner for GTK+ when WebKit2 is enabled.
        * WebKitTestRunner/CMakeLists.txt: Remove some EFL specific flags from the common
        build file.
        * WebKitTestRunner/PlatformEfl.cmake: Move the flags here.
        * WebKitTestRunner/PlatformGTK.cmake: Added.

2013-12-20  Myles C. Maxfield  <mmaxfield@apple.com>

        Myles C. Maxfield is a committer now

        Unreviewed.

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

2013-12-20  Mario Sanchez Prada  <mario.prada@samsung.com>

        [ATK] [WK2] platform/gtk/accessibility/roles-exposed.html is failing
        https://bugs.webkit.org/show_bug.cgi?id=125854

        Reviewed by Chris Fleizach.

        Ensure we don't ever create instances of AccessibilityUIElement
        wrapping invalid platform-specific accessibility objects in DRT,
        both for consistency with what WKTR does (so we avoid situations
        where some tests fail in WK2 and not in WK1) and also to avoid
        overlooking tests that might not be checking the right thing.

        * DumpRenderTree/AccessibilityUIElement.cpp:
        (AccessibilityUIElement::makeJSAccessibilityUIElement): Return a
        nullPtr if the platformUIElement() is not a valid one.
        * DumpRenderTree/AccessibilityUIElement.h:
        (AccessibilityUIElement::platformUIElement): Added const modifier.

2013-12-20  Mario Sanchez Prada  <mario.prada@samsung.com>

        Programmatically-inserted children lack accessibility events
        https://bugs.webkit.org/show_bug.cgi?id=100275

        Reviewed by Chris Fleizach.

        Update DRT and WebKitTestRunner to handle the children-changed
        signal properly, considering the detail and optional parameters.

        * DumpRenderTree/atk/AccessibilityCallbacksAtk.cpp: Updated.
        (axObjectEventListener):
        * WebKitTestRunner/InjectedBundle/atk/AccessibilityNotificationHandlerAtk.cpp: Updated.

2013-12-20  Peter Molnar  <pmolnar.u-szeged@partner.samsung.com>

        Removed unused BUILDER_BASE_URL.
        https://bugs.webkit.org/show_bug.cgi?id=125442

        Reviewed by Csaba Osztrogonác.

        * Scripts/webkitpy/layout_tests/layout_package/json_results_generator_unittest.py:
        (JSONGeneratorTest._test_json_generation): Trivial test fix after r160900.

2013-12-20  Peter Molnar  <pmolnar.u-szeged@partner.samsung.com>

        Removed unused BUILDER_BASE_URL.
        https://bugs.webkit.org/show_bug.cgi?id=125442

        Reviewed by Csaba Osztrogonác.

        The string constant BUILDER_BASE_URL is passed around several times,
        but we don't use it anywhere. It is a leftover from Chromium, cleaned it up.

        * Scripts/webkitpy/layout_tests/controllers/manager.py:
        (Manager._upload_json_files):
        * Scripts/webkitpy/layout_tests/layout_package/json_layout_results_generator.py:
        (JSONLayoutResultsGenerator.__init__):
        * Scripts/webkitpy/layout_tests/layout_package/json_results_generator.py:
        (JSONResultsGenerator.__init__):

2013-12-19  Myles C. Maxfield  <mmaxfield@apple.com>

        check-webkit-style mistakenly flags assigning to a dereferenced pointer
        https://bugs.webkit.org/show_bug.cgi?id=126041

        Reviewed by Ryosuke Niwa.

        When checking for lines like "Foo *bar;", check-webkit-style doesn't make
        sure that there is a declaration. This patch makes sure that there is a
        declaration in order to flag spacing around asterisks.

        * Scripts/webkitpy/style/checkers/cpp.py:
        (check_spacing):
        * Scripts/webkitpy/style/checkers/cpp_unittest.py:
        (CppStyleTest.test_pointer_reference_marker_location):

2013-12-19  Myles C. Maxfield  <mmaxfield@apple.com>

        check-webkit-style marks rvalue references as violations
        https://bugs.webkit.org/show_bug.cgi?id=126000

        Reviewed by Ryosuke Niwa.

        Previously, check-webkit-style was making sure that any line with "&&" had
        spaces around it. However, we can now legitimately use "&&" without a previous
        space when declaring an rvalue reference. This patch relaxes this check.

        * Scripts/webkitpy/style/checkers/cpp.py:
        (check_spacing):
        * Scripts/webkitpy/style/checkers/cpp_unittest.py:
        (CppStyleTest.test_spacing_for_binary_ops):

2013-12-19  Myles C. Maxfield  <mmaxfield@apple.com>

        check-webkit-style marks auto return types for functions as violations
        https://bugs.webkit.org/show_bug.cgi?id=125999

        Reviewed by Ryosuke Niwa.

        If a function declaration ends with a "->" followed by a non whitespace
        string, don't mark as an invalid "{" on its own line

        * Scripts/webkitpy/style/checkers/cpp.py:
        (check_braces):
        * Scripts/webkitpy/style/checkers/cpp_unittest.py:
        (CppStyleTest.test_brace_at_begin_of_line):

2013-12-19  Alex Christensen  <achristensen@webkit.org>

        [WinCairo] More GStreamer preparations.

        Unreviewed.

        * WinLauncher/WinLauncher.vcxproj/WinLauncherCFLite.props:
        Include FeatureDefinesCairo and WinCairo to compile the GLib part of WinLauncher.

2013-12-19  Lucas Forschler  <lforschler@apple.com>

        Add Apple Mavericks perf bot.
        
        Unreviewed.

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

2013-12-19  Commit Queue  <commit-queue@webkit.org>

        Unreviewed, rolling out r160842.
        http://trac.webkit.org/changeset/160842
        https://bugs.webkit.org/show_bug.cgi?id=126003

        broke accessibility/loading-iframe-updates-axtree.html
        (Requested by ap on #webkit).

        * DumpRenderTree/AccessibilityUIElement.cpp:
        (AccessibilityUIElement::makeJSAccessibilityUIElement):
        * DumpRenderTree/AccessibilityUIElement.h:
        (AccessibilityUIElement::platformUIElement):

2013-12-19  Dániel Bátyai  <dbatyai.u-szeged@partner.samsung.com>

        get_test_baseline should get Host from test_config
        https://bugs.webkit.org/show_bug.cgi?id=125989

        Reviewed by Ryosuke Niwa.

        * Scripts/webkitpy/tool/commands/rebaselineserver.py:
        (TestConfig.__init__):
        (RebaselineServer._prepare_config):
        * Scripts/webkitpy/tool/servers/rebaselineserver.py:
        (get_test_baselines):
        * Scripts/webkitpy/tool/servers/rebaselineserver_unittest.py:
        (get_test_config):

2013-12-19  Roger Fong  <roger_fong@apple.com>

        Don't check VSINSTALLDIR when looking for Visual Studio install directory.
        https://bugs.webkit.org/show_bug.cgi?id=125998.

        Reviewed by Alexey Proskuryakov.

        * Scripts/webkitdirs.pm:
        (visualStudioInstallDir):
        Get rid of the VSINSTALLDIR check. We can't build on anything besides VS2013 now anyways.

2013-12-19  Mario Sanchez Prada  <mario.prada@samsung.com>

        [ATK] [WK2] platform/gtk/accessibility/roles-exposed.html is failing
        https://bugs.webkit.org/show_bug.cgi?id=125854

        Reviewed by Chris Fleizach.

        Ensure we don't ever create instances of AccessibilityUIElement
        wrapping invalid platform-specific accessibility objects in DRT,
        both for consistency with what WKTR does (so we avoid situations
        where some tests fail in WK2 and not in WK1) and also to avoid
        overlooking tests that might not be checking the right thing.

        * DumpRenderTree/AccessibilityUIElement.cpp:
        (AccessibilityUIElement::makeJSAccessibilityUIElement): Return a
        nullPtr if the platformUIElement() is not a valid one.
        * DumpRenderTree/AccessibilityUIElement.h:
        (AccessibilityUIElement::platformUIElement): Added const modifier.

2013-12-18  Anders Carlsson  <andersca@apple.com>

        Deprecate some WKMutableDictionary functions
        https://bugs.webkit.org/show_bug.cgi?id=125962

        Reviewed by Tim Horton.

        * TestWebKitAPI/PlatformUtilities.cpp:
        (TestWebKitAPI::Util::createInitializationDictionaryForInjectedBundleTest):
        * TestWebKitAPI/Tests/WebKit2/DidAssociateFormControls_Bundle.cpp:
        (TestWebKitAPI::didAssociateFormControls):
        * TestWebKitAPI/Tests/WebKit2/WillLoad_Bundle.cpp:
        (TestWebKitAPI::WillLoadTest::willLoadURLRequest):
        (TestWebKitAPI::WillLoadTest::willLoadDataRequest):
        * WebKitTestRunner/InjectedBundle/EventSendingController.cpp:
        (WTR::createMouseMessageBody):
        (WTR::EventSendingController::mouseMoveTo):
        (WTR::EventSendingController::leapForward):
        (WTR::createKeyDownMessageBody):
        (WTR::EventSendingController::mouseScrollBy):
        (WTR::EventSendingController::continuousMouseScrollBy):
        (WTR::EventSendingController::addTouchPoint):
        (WTR::EventSendingController::updateTouchPoint):
        (WTR::EventSendingController::setTouchModifier):
        (WTR::EventSendingController::setTouchPointRadius):
        (WTR::EventSendingController::touchStart):
        (WTR::EventSendingController::touchMove):
        (WTR::EventSendingController::touchEnd):
        (WTR::EventSendingController::touchCancel):
        (WTR::EventSendingController::clearTouchPoints):
        (WTR::EventSendingController::releaseTouchPoint):
        (WTR::EventSendingController::cancelTouchPoint):
        * WebKitTestRunner/InjectedBundle/InjectedBundle.cpp:
        (WTR::InjectedBundle::done):
        (WTR::InjectedBundle::setMockGeolocationPosition):
        (WTR::InjectedBundle::setCustomPolicyDelegate):
        (WTR::InjectedBundle::setVisibilityState):
        (WTR::InjectedBundle::queueLoad):
        (WTR::InjectedBundle::queueLoadHTMLString):
        * WebKitTestRunner/TestController.cpp:
        (WTR::TestController::initialize):
        (WTR::TestController::resetStateToConsistentValues):
        * WebKitTestRunner/TestInvocation.cpp:
        (WTR::updateThreadedScrollingForCurrentTest):
        (WTR::updateLayoutType):
        (WTR::TestInvocation::invoke):

2013-12-18  Martin Robinson  <mrobinson@igalia.com>

        [GTK] [CMake] Add support for building GtkLauncher
        https://bugs.webkit.org/show_bug.cgi?id=125766

        Reviewed by Gustavo Noronha Silva.

        * CMakeLists.txt: Add the GtkLauncher subdirectory for the GTK port.
        * GtkLauncher/CMakeLists.txt: Added.
        * GtkLauncher/main.c: Support including the CMake config file.

2013-12-18  Alex Christensen  <achristensen@webkit.org>

        [WinCairo] Preparation for GStreamer on Windows.
        https://bugs.webkit.org/show_bug.cgi?id=125946

        Reviewed by Brent Fulgham.

        * WinLauncher/WinLauncher.vcxproj/WinLauncherLib.vcxproj:
        Use new GStreamer property sheets for WinCairo.
        * win/DLLLauncher/DLLLauncherMain.cpp:
        (modifyPath):
        (wWinMain):
        Prepend GStreamer bin directory to path if it exists.

2013-12-18  Anders Carlsson  <andersca@apple.com>

        Remove now useless test.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WebKit2ObjC/WKRemoteObjectRegistry.mm: Removed.
        * TestWebKitAPI/Tests/mac/WKRemoteObjectRegistry_Bundle.mm: Removed.
        * TestWebKitAPI/Tests/mac/WKRemoteObjectRegistry_Shared.h: Removed.

2013-12-18  Gavin Barraclough  <barraclough@apple.com>

        Fix page visibility api test, initialization in WebKit2
        https://bugs.webkit.org/show_bug.cgi?id=125933

        Reviewed by Anders Carlsson.

        The API test for page visibility is broken, fix this. This revealed a recent regression in WebKit2
        (introduced in https://bugs.webkit.org/show_bug.cgi?id=123379), caused by a typo removing a '!'.

        * TestWebKitAPI/Tests/mac/PageVisibilityStateWithWindowChanges.mm:
        (TestWebKitAPI::TEST_F):
            - Running a test on WebKit1 twice is not the same as running it on WebKit2!

2013-12-18  Gergo Balogh  <geryxyz@inf.u-szeged.hu>

        Should not have identifiers with underscores in them, especially not leading underscores.
        https://bugs.webkit.org/show_bug.cgi?id=125847

        Reviewed by Darin Adler.

        * Scripts/webkitpy/style/checkers/cpp.py:
        (check_identifier_name_in_declaration):
        * Scripts/webkitpy/style/checkers/cpp_unittest.py:
        (CppStyleTest.test_runtime_selfinit):
        (WebKitStyleTest.test_names):

2013-12-18  Gergo Balogh  <geryxyz@inf.u-szeged.hu>

        False webkit-check-style warnings on *.
        https://bugs.webkit.org/show_bug.cgi?id=125915

        Reviewed by Darin Adler.

        * Scripts/webkitpy/style/checkers/cpp.py:
        (check_spacing):
        * Scripts/webkitpy/style/checkers/cpp_unittest.py:
        (CppStyleTest.test_pointer_reference_marker_location):

2013-12-18  Dániel Bátyai  <dbatyai.u-szeged@partner.samsung.com>

        prepare-ChangeLog doesn't handle templates properly
        https://bugs.webkit.org/show_bug.cgi?id=125853

        Reviewed by Daniel Bates.

        * Scripts/prepare-ChangeLog:
        (get_function_line_ranges_for_cpp):
        * Scripts/webkitperl/prepare-ChangeLog_unittest/resources/cpp_unittests-expected.txt:
        * Scripts/webkitperl/prepare-ChangeLog_unittest/resources/cpp_unittests.cpp:
        (Class110<TemplateClass>::func36):

2013-12-18  Dániel Bátyai  <Batyai.Daniel@stud.u-szeged.hu>

        Move expectation parsing out of the constructor of TestExpectations
        https://bugs.webkit.org/show_bug.cgi?id=125439

        Reviewed by Csaba Osztrogonác.

        * Scripts/webkitpy/layout_tests/controllers/layout_test_runner_unittest.py:
        (LayoutTestRunnerTests._run_tests):
        (LayoutTestRunnerTests.test_interrupt_if_at_failure_limits):
        (LayoutTestRunnerTests.test_update_summary_with_result):
        * Scripts/webkitpy/layout_tests/controllers/manager.py:
        (Manager.run):
        * Scripts/webkitpy/layout_tests/controllers/manager_unittest.py:
        (ManagerTest.test_look_for_new_crash_logs):
        * Scripts/webkitpy/layout_tests/lint_test_expectations.py:
        (lint):
        * Scripts/webkitpy/layout_tests/models/test_expectations.py:
        (TestExpectations.suffixes_for_expectations):
        (TestExpectations.__init__):
        (TestExpectations):
        (TestExpectations.parse_generic_expectations):
        (TestExpectations.parse_default_port_expectations):
        (TestExpectations.parse_override_expectations):
        (TestExpectations.parse_all_expectations):
        * Scripts/webkitpy/layout_tests/models/test_expectations_unittest.py:
        (parse_exp):
        (SkippedTests.check):
        (SkippedTests.test_skipped_entry_dont_exist):
        * Scripts/webkitpy/layout_tests/models/test_run_results_unittest.py:
        (run_results):
        * Scripts/webkitpy/tool/commands/queries.py:
        (PrintExpectations._model):
        * Scripts/webkitpy/tool/commands/rebaseline.py:
        (RebaselineTest._update_expectations_file):
        (RebaselineExpectations._update_expectations_files):
        (RebaselineExpectations._tests_to_rebaseline):

2013-12-17  Jer Noble  <jer.noble@apple.com>

        Fix TimeRanges::intersectWith
        https://bugs.webkit.org/show_bug.cgi?id=118802

        Reviewed by Eric Carlson.

        Add unit tests for WebCore/TimeRanges.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WebCore/TimeRanges.cpp: Added.
        (TestWebKitAPI::ToString):
        (TestWebKitAPI::TEST):

2013-12-17  Alexey Proskuryakov  <ap@apple.com>

        Botwatcher's dashboard ceases to update itself after a while
        https://bugs.webkit.org/show_bug.cgi?id=125885

        Reviewed by Timothy Hatcher.

        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Scripts/BuildbotQueue.js:
        Removed code that checked for the view being hidden. It's none of model's business.

        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Scripts/BuildbotQueueView.js:
        (BuildbotQueueView): Find out what platform the view is for. Initlialize update timer.
        (BuildbotQueueView.prototype._updateHiddenState): Start or stop update timer as appropriate.
        We now stop the timer for hidden views.
        (BuildbotQueueView.prototype._updateQueues): Removed the logic for ignoring some updates.

2013-12-17  Anders Carlsson  <andersca@apple.com>

        Fix the 32-bit build.

        * MiniBrowser/MiniBrowserWebProcessPlugIn.h:
        * MiniBrowser/MiniBrowserWebProcessPlugIn.m:

2013-12-17  Anders Carlsson  <andersca@apple.com>

        Give the MiniBrowser a bundle
        https://bugs.webkit.org/show_bug.cgi?id=125882

        Reviewed by Sam Weinig.

        * MiniBrowser/Configurations/MiniBrowserBundle.xcconfig: Added.
        * MiniBrowser/MiniBrowser.xcodeproj/project.pbxproj:
        * MiniBrowser/MiniBrowserWebProcessPlugIn.h: Added.
        * MiniBrowser/MiniBrowserWebProcessPlugIn.m: Added.
        (-[MiniBrowserWebProcessPlugIn webProcessPlugIn:initializeWithObject:]):
        * MiniBrowser/mac/AppDelegate.m:
        (-[BrowserAppDelegate init]):
        * MiniBrowser/mac/Bundle/Info.plist: Added.
        * MiniBrowser/mac/Bundle/MiniBrowserBundle_Prefix.pch: Added.

2013-12-17  Gavin Barraclough  <barraclough@apple.com>

        Remove PageVisibilityStateUnloaded
        https://bugs.webkit.org/show_bug.cgi?id=125869

        Reviewed by Anders Carlsson.

        This is not currently supported by WebKit, remove this enum value.
        We can always add this back later if/when we add support for this state.

        * DumpRenderTree/mac/TestRunnerMac.mm:
        (TestRunner::setPageVisibility):
        * TestWebKitAPI/Tests/WebKit2/PageVisibilityState.cpp:
        (TestWebKitAPI::didRunStep3StateChangePrerenderToUnloaded):
        * WebKitTestRunner/InjectedBundle/TestRunner.cpp:
        (WTR::TestRunner::setPageVisibility):
            - remove test for visibility state "unloaded"; this is no longer supported (it never really was).

2013-12-12  Martin Robinson  <mrobinson@igalia.com>

        [GTK] [CMake] Build the plugin process against GTK+ 2
        https://bugs.webkit.org/show_bug.cgi?id=116374

        Reviewed by Gustavo Noronha Silva.

        * TestWebKitAPI/PlatformGTK.cmake: Add WebCorePlatformGTK to the list of
        libraries required for WebCore unit tests.

2013-12-17  Brent Fulgham  <bfulgham@apple.com>

        [Win] Revise filter-build-webkit to deal with Windows build logs
        https://bugs.webkit.org/show_bug.cgi?id=125866

        Reviewed by David Kilzer.

        Enhance the script to accept a 'platform' argument. When platform
        'win' is provided, use processing for the Windows build file format.
        Otherwise, process the files as normal.

        * Scripts/filter-build-webkit:
        (usageAndExit): Add a 'platform' argument
        (shouldIgnoreLine): When platform == 'win' use the new Windows
        rules for processing the build file.

2013-12-17  Alexey Proskuryakov  <ap@apple.com>

        Update style checker now that ENUM_CLASS is gone
        https://bugs.webkit.org/show_bug.cgi?id=125864

        Reviewed by Anders Carlsson.

        * Scripts/webkitpy/style/checkers/cpp.py:
        (_EnumState.process_clean_line):
        (check_braces):
        * Scripts/webkitpy/style/checkers/cpp_unittest.py:
        (NoNonVirtualDestructorsTest.test_enum_casing.Foo):
        (NoNonVirtualDestructorsTest.test_enum_casing):
        (NoNonVirtualDestructorsTest.test_enum_casing.Enum123):
        (NoNonVirtualDestructorsTest.test_enum_trailing_semicolon.CPP11EnumClass):
        (NoNonVirtualDestructorsTest.test_enum_trailing_semicolon.MyEnum):
        (WebKitStyleTest.test_braces.CPP11EnumClass):

2013-12-17  Mario Sanchez Prada  <mario.prada@samsung.com>

        [ATK] Expose accessibility objects for <dl>, <dt> and <dd>
        https://bugs.webkit.org/show_bug.cgi?id=125857

        Reviewed by Chris Fleizach.

        Add mappings to DRT & WKTR for the newly exposed roles, and
        increase the version of ATK used by the internal jhbuild.

        * DumpRenderTree/atk/AccessibilityUIElementAtk.cpp:
        * WebKitTestRunner/InjectedBundle/atk/AccessibilityUIElementAtk.cpp:
        * gtk/jhbuild.modules: Raise version of ATK up to 2.11.4.

2013-12-17  Alex Christensen  <achristensen@webkit.org>

        [WinCairo] Adding support for GStreamer and GLib.
        https://bugs.webkit.org/show_bug.cgi?id=124867

        Reviewed by Philippe Normand.

        * WinLauncher/WinLauncher.cpp:
        (wWinMain):
        Added g_main_context_iteration in main event loop.

2013-12-17  Gergo Balogh  <geryxyz@inf.u-szeged.hu>

        Fix for C++ should have the & or * beside the type not the variable name check.
        https://bugs.webkit.org/show_bug.cgi?id=125846

        Reviewed by Darin Adler.

        * Scripts/webkitpy/style/checkers/cpp.py:
        (check_spacing):
        * Scripts/webkitpy/style/checkers/cpp_unittest.py:
        (CppStyleTest.test_pointer_reference_marker_location):

2013-12-16  Rob Buis  <rob.buis@samsung.com>

        Add my Samsung email address.

        Unreviewed.

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

2013-12-16  Oliver Hunt  <oliver@apple.com>

        Cache getters and custom accessors on the prototype chain
        https://bugs.webkit.org/show_bug.cgi?id=125602

        Reviewed by Michael Saboff.

        Make sure bencher scripts also make noInline exist

        * Scripts/bencher:

2013-12-16  Anders Carlsson  <andersca@apple.com>

        Fix crash when trying to load a null HTML string
        https://bugs.webkit.org/show_bug.cgi?id=125801

        Reviewed by Dan Bernstein.

        * TestWebKitAPI/Tests/WebKit2/WillLoad.cpp:
        (TestWebKitAPI::TEST_F):
        Update test results.

2013-12-16  Alex Christensen  <achristensen@webkit.org>

        Fixed Win64 build on VS2013.
        https://bugs.webkit.org/show_bug.cgi?id=125753

        Reviewed by Brent Fulgham.

        * DumpRenderTree/DumpRenderTree.vcxproj/DumpRenderTree/DumpRenderTree.vcxproj:
        * DumpRenderTree/DumpRenderTree.vcxproj/DumpRenderTree/DumpRenderTreeLauncher.vcxproj:
        * DumpRenderTree/DumpRenderTree.vcxproj/ImageDiff/ImageDiff.vcxproj:
        * DumpRenderTree/DumpRenderTree.vcxproj/ImageDiff/ImageDiffLauncher.vcxproj:
        * DumpRenderTree/DumpRenderTree.vcxproj/TestNetscapePlugin/TestNetscapePlugin.vcxproj:
        * TestWebKitAPI/TestWebKitAPI.vcxproj/TestWebKitAPI.vcxproj:
        * WinLauncher/WinLauncher.vcxproj/WinLauncher.vcxproj:
        * WinLauncher/WinLauncher.vcxproj/WinLauncherLib.vcxproj:
        * win/record-memory/record-memory.vcxproj:
        Added correct PlatformToolset for 64-bit builds.

2013-12-16  Simon Fraser  <simon.fraser@apple.com>

        Add a menu option to MiniBrowser to enable UI-side compositing
        https://bugs.webkit.org/show_bug.cgi?id=125793

        Reviewed by Anders Carlsson.
        
        Make it possible to test UI-side compositing in MiniBrowser WK2 windows.

        * MiniBrowser/mac/BrowserWindowController.h: Add optional protocol method
        to toggle UI-side compositing.
        * MiniBrowser/mac/MainMenu.xib: Add menu item to Debug menu.
        * MiniBrowser/mac/WK2BrowserWindowController.m:
        (-[WK2BrowserWindowController validateMenuItem:]):
        (-[WK2BrowserWindowController isUISideCompositingEnabled]):
        (-[WK2BrowserWindowController toggleUISideCompositing:]):
        (-[WK2BrowserWindowController observeValueForKeyPath:ofObject:change:context:]):
        Adjust the window title to indicate whether the window is using UI-side compositing.

2013-12-16  Commit Queue  <commit-queue@webkit.org>

        Unreviewed, rolling out r160645.
        http://trac.webkit.org/changeset/160645
        https://bugs.webkit.org/show_bug.cgi?id=125787

        Change breaks test-webkitpy (Requested by bfulgham on
        #webkit).

        * Scripts/prepare-ChangeLog:
        (get_selector_line_ranges_for_css):

2013-12-16  David Farler  <dfarler@apple.com>

        [ASAN] WebKitLauncher: Include libasancrashreporter.dylib in DYLD_INSERT_LIBRARIES if it exists
        https://bugs.webkit.org/show_bug.cgi?id=124610

        Reviewed by Mark Rowe.

        * WebKitLauncher/WebKitNightlyEnabler.m:
        (enableWebKitNightlyBehaviour):
        Add libasancrashreporter.dylib to DYLD_INSERT_LIBRARIES.
        * WebKitLauncher/main.m:
        (main):
        Include both libasancrashreporter and the nightly enabler to
        the list of libraries to insert.

2013-12-16  Gergo Balogh  <geryxyz@inf.u-szeged.hu>

        Resolve inconsistant style warning caused by r160319.
        https://bugs.webkit.org/show_bug.cgi?id=125772

        Reviewed by Darin Adler.

        * Scripts/webkitpy/style/checkers/cpp.py:
        (check_for_extra_new_line_at_eof):
        * Scripts/webkitpy/style/checkers/cpp_unittest.py:
        (CppStyleTest.test_newline_at_eof):
        (CppStyleTest.test_extra_newlines_at_eof):

2013-12-16  Eva Balazsfalvi  <balazsfalvi.eva@stud.u-szeged.hu>

        Remove mock_drt.py: parse_options() - --test-shell and --pixel-tests=<path>
        https://bugs.webkit.org/show_bug.cgi?id=125780

        Reviewed by Darin Adler.

        * Scripts/webkitpy/port/mock_drt.py:
        (main):
        (parse_options):
        (MockDRT.write_test_output):
        * Scripts/webkitpy/port/mock_drt_unittest.py:
        (MockDRTTest.assertTest):
        (MockDRTTest.test_reftest_mismatch):

2013-12-16  Gergo Balogh  <geryxyz@inf.u-szeged.hu>

        prepare-Changelog treats CSS keyframes as mismatched parentheses.
        https://bugs.webkit.org/show_bug.cgi?id=125435

        Reviewed by Darin Adler.

        * Scripts/prepare-ChangeLog:
        (get_selector_line_ranges_for_css):

2013-12-16  Mario Sanchez Prada  <mario.prada@samsung.com>

        [ATK] Expose accessibility objects for more WAI-ARIA roles
        https://bugs.webkit.org/show_bug.cgi?id=125596

        Reviewed by Chris Fleizach.

        Add mappings to DRT & WKTR for the newly exposed roles.

        * DumpRenderTree/atk/AccessibilityUIElementAtk.cpp:
        * WebKitTestRunner/InjectedBundle/atk/AccessibilityUIElementAtk.cpp:

2013-12-16  Mario Sanchez Prada  <mario.prada@samsung.com>

        [ATK] Expose accessibility objects with ATK_ROLE_CHECK_MENU_ITEM
        https://bugs.webkit.org/show_bug.cgi?id=125594

        Reviewed by Chris Fleizach.

        Add mappings to DRT & WKTR for checkmenuitem role.

        * DumpRenderTree/atk/AccessibilityUIElementAtk.cpp:
        * WebKitTestRunner/InjectedBundle/atk/AccessibilityUIElementAtk.cpp:

2013-12-16  Mario Sanchez Prada  <mario.prada@samsung.com>

        [ATK] Expose accessibility objects with ATK_ROLE_ARTICLE
        https://bugs.webkit.org/show_bug.cgi?id=125587

        Reviewed by Chris Fleizach.

        Add mappings to DRT & WKTR for article roles.

        * DumpRenderTree/atk/AccessibilityUIElementAtk.cpp:
        * WebKitTestRunner/InjectedBundle/atk/AccessibilityUIElementAtk.cpp:

2013-12-16  Dániel Bátyai  <dbatyai.u-szeged@partner.samsung.com>

        [FTL] Allow EFL to build FTL with the build-jsc script.
        https://bugs.webkit.org/show_bug.cgi?id=125774

        Reviewed by Zoltan Herczeg.

        * Scripts/build-jsc:

2013-12-16  Krzysztof Czech  <k.czech@samsung.com>

        Add myself as a committer

        Unreviewed.

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

2013-12-15  Tamas Gergely  <tgergely.u-szeged@partner.samsung.com>

        Refactor option handling in WebKitTestRunner.
        https://bugs.webkit.org/show_bug.cgi?id=123185

        Reviewed by Darin Adler.

        Option handling is refactored (according to the FIXME) that allows
        to automatically generate the help message.

        * WebKitTestRunner/CMakeLists.txt:
        * WebKitTestRunner/GNUmakefile.am:
        * WebKitTestRunner/Options.cpp: Added.
        (WTR::Options::Options):
        (WTR::handleOptionTimeout):
        (WTR::handleOptionNoTimeout):
        (WTR::handleOptionNoTimeoutAtAll):
        (WTR::handleOptionVerbose):
        (WTR::handleOptionGcBetweenTests):
        (WTR::handleOptionPixelTests):
        (WTR::handleOptionPrintSupportedFeatures):
        (WTR::handleOptionComplexText):
        (WTR::handleOptionAcceleratedDrawing):
        (WTR::handleOptionRemoteLayerTree):
        (WTR::handleOptionUnmatched):
        (WTR::OptionsHandler::OptionsHandler):
        (WTR::Option::Option):
        (WTR::Option::matches):
        (WTR::OptionsHandler::parse):
        (WTR::OptionsHandler::printHelp):
        * WebKitTestRunner/Options.h: Added.
        * WebKitTestRunner/TestController.cpp:
        (WTR::TestController::initialize):
        * WebKitTestRunner/WebKitTestRunner.xcodeproj/project.pbxproj:

2013-12-15  Dan Bernstein  <mitz@apple.com>

        32-bit build fix.

        * TestWebKitAPI/mac/TestBrowsingContextLoadDelegate.h:
        * TestWebKitAPI/mac/TestBrowsingContextLoadDelegate.mm:

2013-12-14  Tim Horton  <timothy_horton@apple.com>

        stylebot should warn when FeatureDefines differ
        https://bugs.webkit.org/show_bug.cgi?id=125748

        Reviewed by Dan Bernstein.

        Add a stylebot checker that ensures that FeatureDefines.xcconfig files
        are always exactly equal (and warns people adding new FeatureDefines.xcconfig files,
        an unlikely occurrance, to add them to the list).

        It's a bit nontraditional for stylebot because it will warn on existing errors in the tree,
        but that is the most straightforward way to implement it (and we're at zero diffs right now).

        * Scripts/webkitpy/style/checker.py:
        (_all_categories):
        (FileType):
        (CheckerDispatcher._file_type):
        (CheckerDispatcher._create_checker):
        * Scripts/webkitpy/style/checkers/featuredefines.py: Added.
        (FeatureDefinesChecker):
        (FeatureDefinesChecker.__init__):
        (FeatureDefinesChecker.check):

2013-12-13  Sam Weinig  <sam@webkit.org>

        Fix API tests.

        * TestWebKitAPI/Tests/WebKit2/WillLoad.cpp:
        (TestWebKitAPI::TEST_F):

2013-12-13  Brent Fulgham  <bfulgham@apple.com>

        [Win] Remove Pre-VS2013 support code.
        https://bugs.webkit.org/show_bug.cgi?id=125693

        Reviewed by Darin Adler.

        * DumpRenderTree/cg/ImageDiffCG.cpp: Remove strtof stub now supplied by
        the math library.
        * DumpRenderTree/win/ImageDiffCairo.cpp: Ditto.

2013-12-13  Lucas Forschler  <lforschler@apple.com>

        Update Webkit bots.
        
        Unreviewed.
        
        * BuildSlaveSupport/build.webkit.org-config/config.json:

2013-12-13  Brent Fulgham  <bfulgham@apple.com>

        [Win] Unreviewed build fix after r160548

        * win/AssembleBuildLogs/AssembleBuildLogs.vcxproj: Specify
        we are using vs12_xp target for Makefile-based projects.

2013-12-13  Lucas Forschler  <lforschler@apple.com>

        Update Apple Webkit Bots
        
        Unreviewed.

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

2013-12-13  Brent Fulgham  <bfulgham@apple.com>

        Unreviewed build fix after r160548.

        * Scripts/webkitdirs.pm:
        (setupCygwinEnv): VCExpress.exe is now called WDExpress.exe.

2013-12-13  Lucas Forschler  <lforschler@apple.com>

        Update Apple bots.
        
        Unreviewed.

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

2013-12-13  Brent Fulgham  <bfulgham@apple.com>

        [Win] Switch WebKit solution to Visual Studio 2013
        https://bugs.webkit.org/show_bug.cgi?id=125192

        Reviewed by Anders Carlsson.

        Project files must reference vs12_xp for 32-bit builds. 

        * DumpRenderTree/DumpRenderTree.vcxproj/DumpRenderTree/DumpRenderTree.vcxproj:
        Update for VS2013
        * DumpRenderTree/DumpRenderTree.vcxproj/DumpRenderTree/DumpRenderTreeLauncher.vcxproj:
        Ditto
        * DumpRenderTree/DumpRenderTree.vcxproj/ImageDiff/ImageDiff.vcxproj:
        Ditto
        * DumpRenderTree/DumpRenderTree.vcxproj/ImageDiff/ImageDiffLauncher.vcxproj:
        Ditto
        * DumpRenderTree/DumpRenderTree.vcxproj/TestNetscapePlugin/TestNetscapePlugin.vcxproj:
        Ditto
        * Scripts/webkitdirs.pm:
        (visualStudioInstallDir): Specify VS2013
        (visualStudioVersion): Ditto.
        (setupAppleWinEnv): Use VS2013 in messages
        (setupCygwinEnv): Ditto
        * TestWebKitAPI/TestWebKitAPI.vcxproj/TestWebKitAPI.vcxproj:
        Update for VS2013
        * WinLauncher/WinLauncher.vcxproj/WinLauncher.vcxproj:
        Ditto
        * WinLauncher/WinLauncher.vcxproj/WinLauncherLib.vcxproj:
        Ditto
        * win/record-memory/record-memory.vcxproj:
        Ditto

2013-12-11  Martin Robinson  <mrobinson@igalia.com> and Danilo Cesar Lemes de Paula  <danilo.cesar@collabora.co.uk>

        Adding a .ycm_extra_conf file for webkitGtk
        https://bugs.webkit.org/show_bug.cgi?id=119618

        Reviewed by Gustavo Noronha Silva.

        Added a YouCompleteMe flag discovery script for Vim and the GTK+ port. The script
        read the GTK+ build files to determine dynamically what flags to compile a source
        file with. This allows Vim to provide auto-complete for C++/C language. See
        https://github.com/Valloric/YouCompleteMe for how to use this file.

        * gtk/common.py:
        (get_build_path): Added a fatal argument to build_path to avoid crashing YCM on failure.
        * gtk/ycm_extra_conf.py: Added.

2013-12-12  Tim Horton  <timothy_horton@apple.com>

        [wk2] Handle pinch-to-zoom gesture
        https://bugs.webkit.org/show_bug.cgi?id=125604

        Reviewed by Simon Fraser.

        * MiniBrowser/mac/WK2BrowserWindowController.m:
        (-[WK2BrowserWindowController awakeFromNib]):
        Enable handling of the magnification gesture in Minibrowser WebKit2 windows.

2013-12-12  Eunmi Lee  <eunmi15.lee@samsung.com>

        Unreviewed. Add myself as a committer.

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

2013-12-12  Lucas Forschler  <lforschler@apple.com>

        Update hardware for Apple bots.
        
        Unreviewed.

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

2013-12-12  Lucas Forschler  <lforschler@apple.com>

        Remove unused Apple Bots.
        
        Unreviewed.

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

2013-12-12  Thiago de Barros Lacerda  <thiago.lacerda@openbossa.org>

        Unreviewed. Add myself as a committer.

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

2013-12-12  Joseph Pecoraro  <pecoraro@apple.com>

        Test new JSContext name APIs
        https://bugs.webkit.org/show_bug.cgi?id=125607

        Reviewed by Darin Adler.

        * Scripts/run-javascriptcore-tests:
        Remove trailing whitespace.

2013-12-12  Zan Dobersek  <zdobersek@igalia.com>

        [Autotools] Prepend the WebCore layer archives' names with 'lib'
        https://bugs.webkit.org/show_bug.cgi?id=125627

        Reviewed by Martin Robinson.

        * TestWebKitAPI/GNUmakefile.am: Libtool can complain about the WebCore layer archives not being prepended
        with 'lib' when they are used during linking, so the prefix is now added to avoid such issues.

2013-12-12  Commit Queue  <commit-queue@webkit.org>

        Unreviewed, rolling out r160446.
        http://trac.webkit.org/changeset/160446
        https://bugs.webkit.org/show_bug.cgi?id=125630

        The upower-glib-based implementation is using API that was
        recently removed (Requested by zdobersek1 on #webkit).

        * Scripts/webkitperl/FeatureList.pm:

2013-12-12  Commit Queue  <commit-queue@webkit.org>

        Unreviewed, rolling out r160417.
        http://trac.webkit.org/changeset/160417
        https://bugs.webkit.org/show_bug.cgi?id=125629

        The patch is causing crashes (Requested by zdobersek1 on
        #webkit).

        * DumpRenderTree/atk/AccessibilityCallbacksAtk.cpp:
        (axObjectEventListener):
        * WebKitTestRunner/InjectedBundle/atk/AccessibilityNotificationHandlerAtk.cpp:

2013-12-12  Zan Dobersek  <zdobersek@igalia.com>

        Use of ar T option not supported by older binutils
        https://bugs.webkit.org/show_bug.cgi?id=118732

        Reviewed by Gustavo Noronha Silva.

        * TestWebKitAPI/GNUmakefile.am: To support non-thin archives when generating the WebCoreLayer archive,
        switch to using the AR_FLAGS variable (which can be overridden) for providing the ar flags for the
        new archive. Non-thin archives also pose the problem as their members are only noted by the basename
        of the member's object file, and not the full path to it. To work around that, all the object files
        under the build directory are listed by their relative paths. The members of various archives then have
        the basenames of their paths grepped against that list, with the found path correlating to the member
        finally added as the new member of the WebCoreLayer archive.

2013-12-11  Myles C. Maxfield  <mmaxfield@apple.com>

        check-webkit-style shouldn't check spacing in #if preprocessor lines
        https://bugs.webkit.org/show_bug.cgi?id=125534

        Reviewed by Ryosuke Niwa.

        Preprocessor lines that start with #if shouldn't have to adhere to
        the same spacing requirements that regular code does

        * Scripts/webkitpy/style/checkers/cpp.py:
        (check_spacing):
        * Scripts/webkitpy/style/checkers/cpp_unittest.py:
        (CppStyleTest.test_spacing_for_binary_ops):
        (WebKitStyleTest.test_line_breaking):

2013-12-11  Myles C. Maxfield  <mmaxfield@apple.com>

        check-webkit-style can't determine if a comma is part of an initialization list
        https://bugs.webkit.org/show_bug.cgi?id=125537

        Reviewed by Darin Adler.

        The original check to make sure that initialization list lines start with
        a comma didn't distinguish between commas that belong to the initialization
        list and commas that are part of function calls. Because we don't want to
        match parentheses with regular expressions, we should weaken this check to
        only check for commas at the end of initialization list lines.

        * Scripts/webkitpy/style/checkers/cpp.py:
        (check_member_initialization_list):
        * Scripts/webkitpy/style/checkers/cpp_unittest.py:
        (WebKitStyleTest.test_member_initialization_list):

2013-12-11  Tim Horton  <timothy_horton@apple.com>

        Make it possible to compare layout test results between various configurations of WebKit
        https://bugs.webkit.org/show_bug.cgi?id=125212
        <rdar://problem/15199108>

        Reviewed by Darin Adler.

        * Scripts/compare-webkit-configurations: Added.
        Add a script that allows comparison between the "normal" WebKit configuration
        used for testing and a different configuration (e.g. with accelerated drawing
        turned on, with the remote layer tree enabled, or WebKit1 vs WebKit2), like so:

        compare-webkit-configurations -2 --comparison=accelerated-drawing compositing/background-color

        This script runs the tests once in the default configuration, ignoring
        all test expectations, writing the results out to a temporary directory.

        It then runs the tests again in the modified configuration, against the
        just-written temporary results.

        Ref tests are treated as pixel tests, with their pixel output dumped to disk.

        * DumpRenderTree/mac/DumpRenderTree.mm:
        (resetWebPreferencesToConsistentValues):
        (initializeGlobalsFromCommandLineOptions):
        Enable accelerated drawing if requested.

        * Scripts/webkitpy/layout_tests/run_webkit_tests.py:
        (parse_args):
        Add --accelerated-drawing and --remote-layer-tree feature switches, which
        are forwarded on to the test drivers.
        Move those two and --complex-text into their own "feature switches" section.
        Drive-by change "Mac OS X" to "OS X".
        Add --treat-ref-tests-as-pixel-tests option, which treats ref tests
        as traditional pixel tests (with PNGs dumped on disk), and
        ignores e.g. -expected.html files.

        * Scripts/webkitpy/port/base.py:
        (Port.reference_files):
        Pretend that there are no ref tests.
        Since is_reference_html_file is intact, our mechanism to ignore
        the expected files will continue working in this case.

        * Scripts/webkitpy/port/driver.py:
        (Driver.cmd_line):
        Forward --accelerated-drawing and --remote-layer-tree to DRT/WKTR.

        * WebKitTestRunner/TestController.cpp:
        (WTR::TestController::TestController):
        (WTR::TestController::initialize):
        (WTR::TestController::resetPreferencesToConsistentValues):
        * WebKitTestRunner/TestController.h:
        (WTR::TestController::shouldUseRemoteLayerTree):
        * WebKitTestRunner/TestInvocation.cpp:
        (WTR::updateThreadedScrollingForCurrentTest):
        * WebKitTestRunner/mac/PlatformWebViewMac.mm:
        (WTR::PlatformWebView::PlatformWebView):
        Parse and implement the three feature switches.

2013-12-11  Mario Sanchez Prada  <mario.prada@samsung.com>

        [ATK] Expose accessibility objects WAI-ARIA landmark roles
        https://bugs.webkit.org/show_bug.cgi?id=125584

        Reviewed by Chris Fleizach.

        Add mappings to DRT & WKTR for landmark roles.

        * DumpRenderTree/atk/AccessibilityUIElementAtk.cpp:
        (AccessibilityUIElement::role):
        * WebKitTestRunner/InjectedBundle/atk/AccessibilityUIElementAtk.cpp:
        (WTR::AccessibilityUIElement::role):
        * gtk/jhbuild.modules:

2013-12-11  Alejandro G. Castro  <alex@igalia.com>

        [GTK] Avoid double quotations when passing parameters to valgrind in gtk.py
        https://bugs.webkit.org/show_bug.cgi?id=125441

        Reviewed by Martin Robinson.

        Just avoid the double quotations when building the parameter
        because some versions of valgrind are not handling it correctly.

        * Scripts/webkitpy/port/gtk.py:
        (GtkPort.setup_environ_for_server):

2013-12-11  Zan Dobersek  <zdobersek@igalia.com>

        [GTK] Enable Battery Status API
        https://bugs.webkit.org/show_bug.cgi?id=125453

        Reviewed by Martin Robinson.

        * Scripts/webkitperl/FeatureList.pm: Enable the Battery Status API feature for the GTK port.

2013-12-11  José Dapena Paz  <jdapena@igalia.com> and Zan Dobersek  <zdobersek@igalia.com>

        [GTK][WK2] Add the WebKitBatteryProvider class
        https://bugs.webkit.org/show_bug.cgi?id=115720

        Reviewed by Martin Robinson.

        * gtk/generate-gtkdoc:
        (get_webkit2_options): Ignore the WebKitBatteryProvider source files when generating the documentation.

2013-12-11  Mark Rowe  <mrowe@apple.com>

        <https://webkit.org/b/125563> Remove the DumpRenderTree Perl Support module

        Now that old-run-webkit-tests is not used on OS X it's not worth the time and effort
        to build and maintain this custom Perl module.

        Reviewed by Anders Carlsson.

        * DumpRenderTree/DumpRenderTree.xcodeproj/project.pbxproj: Remove the target.
        * DumpRenderTree/mac/PerlSupport/DumpRenderTreeSupport.c: Removed.
        * DumpRenderTree/mac/PerlSupport/DumpRenderTreeSupportPregenerated.pm: Removed.
        * DumpRenderTree/mac/PerlSupport/DumpRenderTreeSupport_wrapPregenerated.c: Removed.
        * DumpRenderTree/mac/PerlSupport/Makefile: Removed.
        * Scripts/old-run-webkit-tests: Update a comment that referred to DumpRenderTreeSupport as a reason to
        build DumpRenderTree.
        (dumpToolDidCrash): Stop importing and using the module.
        * Scripts/webkitpy/port/base.py:
        (Port._build_driver): Update a comment in the same manner as in old-run-webkit-tests.

2013-12-11  Brendan Long  <b.long@cablelabs.com>

        [GTK] Add "enable-mediasource" property to WebKitWebSettings
        https://bugs.webkit.org/show_bug.cgi?id=125566

        Reviewed by Philippe Normand.

        * DumpRenderTree/gtk/DumpRenderTree.cpp:
        (resetDefaultsToConsistentValues): Turn MediaSource on by default for easier testing.
        * DumpRenderTree/gtk/TestRunnerGtk.cpp:
        (TestRunner::overridePreference): Allow overriding WebKitMediaSourceEnabled.

2013-12-11  Dan Bernstein  <mitz@apple.com>

        [Mac] Observe the activeURL property to keep the MiniBrowser URL field up to date
        https://bugs.webkit.org/show_bug.cgi?id=125579

        Reviewed by Anders Carlsson.

        * MiniBrowser/mac/WK2BrowserWindowController.m:
        (-[WK2BrowserWindowController dealloc]): Stop observing the activeURL property.
        (-[WK2BrowserWindowController observeValueForKeyPath:ofObject:change:context:]): When the
        activeURL property changes, update the URL field with its value.
        (-[WK2BrowserWindowController awakeFromNib]): Start observing the activeURL property.
        (-[WK2BrowserWindowController browsingContextControllerDidStartProvisionalLoad:]): Just log.
        (-[WK2BrowserWindowController browsingContextControllerDidReceiveServerRedirectForProvisionalLoad:]):
        Ditto.
        (-[WK2BrowserWindowController browsingContextController:didFailProvisionalLoadWithError:]):
        Ditto.
        (-[WK2BrowserWindowController browsingContextControllerDidCommitLoad:]): Ditto.
        (-[WK2BrowserWindowController browsingContextController:didFailLoadWithError:]): Ditto.

2013-12-11  Dániel Bátyai  <Batyai.Daniel@stud.u-szeged.hu>

        Fixed test-wepkitpy logging for buildslaves
        https://bugs.webkit.org/show_bug.cgi?id=125445

        Reviewed by Csaba Osztrogonác.

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

2013-12-11  Mario Sanchez Prada  <mario.prada@samsung.com>

        Programmatically-inserted children lack accessibility events
        https://bugs.webkit.org/show_bug.cgi?id=100275

        Reviewed by Chris Fleizach.

        Update DRT and WebKitTestRunner to handle the children-changed
        signal properly, considering the detail and optional parameters.

        * DumpRenderTree/atk/AccessibilityCallbacksAtk.cpp: Updated.
        (axObjectEventListener):
        * WebKitTestRunner/InjectedBundle/atk/AccessibilityNotificationHandlerAtk.cpp: Updated.

2013-12-03  Mark Rowe  <mrowe@apple.com>

        <https://webkit.org/b/125139> Modernize the WebKit API headers
        <rdar://problem/15540175>

        Reviewed by Anders Carlsson.

        * DumpRenderTree/mac/TestRunnerMac.mm:
        (TestRunner::setCacheModel): Cast to the enum type.

2013-12-10  Filip Pizlo  <fpizlo@apple.com>

        Get rid of forward exit on DoubleAsInt32
        https://bugs.webkit.org/show_bug.cgi?id=125552

        Reviewed by Oliver Hunt.
        
        Add some support for testing the generic (non-X86) paths on X86 by disabling
        architecture-specific optimizations (ASO's).

        * Scripts/run-javascriptcore-tests:
        * Scripts/run-jsc-stress-tests:

2013-12-10  Ryuan Choi  <ryuan.choi@samsung.com>

        Unreviewed EFL build fix attempt

        * TestWebKitAPI/CMakeLists.txt: Added ${WEBKIT2_DIR}/Platform/CoreIPC to include lists.
        * WebKitTestRunner/CMakeLists.txt: Ditto.

2013-12-10  Anders Carlsson  <andersca@apple.com>

        Add a HashMap constructor that takes an initializer list
        https://bugs.webkit.org/show_bug.cgi?id=125551

        Reviewed by Dan Bernstein.

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

2013-12-10  Laszlo Vidacs  <lac@inf.u-szeged.hu>

        Use std::array when computing MD5 checksum
        https://bugs.webkit.org/show_bug.cgi?id=125509

        Reviewed by Anders Carlsson.

        Use MD5::Digest type and MD5::hashSize when computing MD5 checksum.

        * DumpRenderTree/blackberry/PixelDumpSupportBlackBerry.cpp:
        (computeMD5HashStringForBitmapContext):
        * DumpRenderTree/cairo/PixelDumpSupportCairo.cpp:
        (computeMD5HashStringForBitmapContext):
        * TestWebKitAPI/Tests/WTF/MD5.cpp:
        (TestWebKitAPI::expectMD5):
        * WebKitTestRunner/cairo/TestInvocationCairo.cpp:
        (WTR::computeMD5HashStringForCairoSurface):
        * WebKitTestRunner/cg/TestInvocationCG.cpp:
        (WTR::computeMD5HashStringForContext):

2013-12-10  Mario Sanchez Prada  <mario.prada@samsung.com>

        [ATK] Expose splitter elements with ATK_ROLE_SEPARATOR
        https://bugs.webkit.org/show_bug.cgi?id=125522

        Reviewed by Chris Fleizach.

        Update strings representing ATK_ROLE_SEPARATOR for layout tests.

        * DumpRenderTree/atk/AccessibilityUIElementAtk.cpp:
        * WebKitTestRunner/InjectedBundle/atk/AccessibilityUIElementAtk.cpp:

2013-12-10  Laszlo Vidacs  <lac@inf.u-szeged.hu>

        Add --makeargs option to build-jsc
        https://bugs.webkit.org/show_bug.cgi?id=125344

        Reviewed by Filip Pizlo.

        * Scripts/build-jsc: Handle and pass makefile arguments in jsc build.

2013-12-10  Joanmarie Diggs  <jdiggs@igalia.com>

        AX: [ATK] Convert the get_text atktest.c unit tests to layout tests
        https://bugs.webkit.org/show_bug.cgi?id=125497

        Reviewed by Mario Sanchez Prada.

        * DumpRenderTree/atk/AccessibilityUIElementAtk.cpp:
        (AccessibilityUIElement::stringForRange): Implemented.
        * WebKitTestRunner/InjectedBundle/atk/AccessibilityUIElementAtk.cpp:
        (WTR::AccessibilityUIElement::stringForRange): Implemented.

2013-12-10  Martin Robinson  <mrobinson@igalia.com>

        Various fixes for the CMake GTK+ build

        Reviewed by Gustavo Noronha.

        * MiniBrowser/gtk/CMakeLists.txt: Update source list and correct the name of BrowserMarshal.h.
        * TestWebKitAPI/PlatformGTK.cmake: Add GTK+ libraries to the test program. They're required.

2013-12-10  László Langó  <lango@inf.u-szeged.hu>

        --cloop option does not work in Tools/Scripts/build-jsc.
        https://bugs.webkit.org/show_bug.cgi?id=125214

        Reviewed by Csaba Osztrogonác.

        * Scripts/build-jsc:

2013-12-10  Dániel Bátyai  <Batyai.Daniel@stud.u-szeged.hu>

        Merge mark_for_landing and mark_for_commit_queue into one argument
        https://bugs.webkit.org/show_bug.cgi?id=125448

        Reviewed by Ryosuke Niwa.

        * Scripts/webkitpy/common/net/bugzilla/bugzilla.py:
        (CommitQueueFlag):
        (Bugzilla._commit_queue_flag):
        (Bugzilla._fill_attachment_form):
        (Bugzilla.add_patch_to_bug):
        (Bugzilla.create_bug):
        * Scripts/webkitpy/common/net/bugzilla/bugzilla_unittest.py:
        (test_commit_queue_flag.assert_commit_queue_flag):
        (test_commit_queue_flag):

2013-12-09  Tim Horton  <timothy_horton@apple.com>

        Remove dead extract_reference_link.py (and the reftests module)
        https://bugs.webkit.org/show_bug.cgi?id=125116

        Reviewed by Ryosuke Niwa.

        This code doesn't seem to have ever been used.

        * Scripts/webkitpy/layout_tests/reftests/__init__.py: Removed.
        * Scripts/webkitpy/layout_tests/reftests/extract_reference_link.py: Removed.
        * Scripts/webkitpy/layout_tests/reftests/extract_reference_link_unittest.py: Removed.

2013-12-09  Mario Sanchez Prada  <mario.prada@samsung.com>

        [ATK] Translate ATK_ROLE_SECTION into "AXSection" in DRT/WKTR
        https://bugs.webkit.org/show_bug.cgi?id=125456

        Reviewed by Chris Fleizach.

        Return 'AXSection' for section roles instead of 'AXDiv'.

        * DumpRenderTree/atk/AccessibilityUIElementAtk.cpp:
        * WebKitTestRunner/InjectedBundle/atk/AccessibilityUIElementAtk.cpp:

2013-12-09  Brian J. Burg  <burg@cs.washington.edu>

        check-webkit-style should check for extra newlines at EOF
        https://bugs.webkit.org/show_bug.cgi?id=125424

        Reviewed by Darin Adler.

        Report a style violation if extraneous newlines are added
        to the end of a C++ file. There should only be one newline at EOF.

        * Scripts/webkitpy/style/checkers/cpp.py:
        (check_for_missing_new_line_at_eof): Renamed from check_for_new_line_at_eof.
        (check_for_extra_new_line_at_eof): Added.
        (_process_lines): Added new check and renamed existing EOF check.
        * Scripts/webkitpy/style/checkers/cpp_unittest.py:
        (CppStyleTest.test_extra_newlines_at_eof): Added.
        (CppStyleTest.test_extra_newlines_at_eof.do_test): Added.

2013-12-09  Laszlo Vidacs  <lac@inf.u-szeged.hu>

        check-webkit-style: ternary operator in macro call identified as initialization list
        https://bugs.webkit.org/show_bug.cgi?id=125443

        Reviewed by Ryosuke Niwa.

        Do not match initialization list when questionmark is placed before :

        * Scripts/webkitpy/style/checkers/cpp.py:
        (check_member_initialization_list):

2013-12-09  Joanmarie Diggs  <jdiggs@igalia.com>

        AX: [ATK] Convert the get_{string,text}_at_offset atktest.c unit tests to layout tests
        https://bugs.webkit.org/show_bug.cgi?id=125451

        Reviewed by Mario Sanchez Prada.

        Create the needed callbacks for DRT and WKTR.

        * DumpRenderTree/AccessibilityUIElement.cpp:
        (characterAtOffsetCallback): added
        (wordAtOffsetCallback): added
        (lineAtOffsetCallback): added
        (sentenceAtOffsetCallback): added
        (AccessibilityUIElement::getJSClass):
        * DumpRenderTree/AccessibilityUIElement.h:
        * DumpRenderTree/atk/AccessibilityUIElementAtk.cpp:
        (stringAtOffset): added
        (AccessibilityUIElement::characterAtOffset): added
        (AccessibilityUIElement::wordAtOffset): added
        (AccessibilityUIElement::lineAtOffset): added
        (AccessibilityUIElement::sentenceAtOffset): added
        * WebKitTestRunner/InjectedBundle/AccessibilityUIElement.cpp:
        (WTR::AccessibilityUIElement::characterAtOffset): added
        (WTR::AccessibilityUIElement::wordAtOffset): added
        (WTR::AccessibilityUIElement::lineAtOffset): added
        (WTR::AccessibilityUIElement::sentenceAtOffset): added
        * WebKitTestRunner/InjectedBundle/AccessibilityUIElement.h:
        * WebKitTestRunner/InjectedBundle/Bindings/AccessibilityUIElement.idl:
        * WebKitTestRunner/InjectedBundle/atk/AccessibilityUIElementAtk.cpp:
        (WTR::stringAtOffset): added
        (WTR::AccessibilityUIElement::characterAtOffset): added
        (WTR::AccessibilityUIElement::wordAtOffset): added
        (WTR::AccessibilityUIElement::lineAtOffset): added
        (WTR::AccessibilityUIElement::sentenceAtOffset): added

2013-12-08  Sam Weinig  <sam@webkit.org>

        32-bit MiniBrowser doesn't build
        https://bugs.webkit.org/show_bug.cgi?id=125420

        Reviewed by Dan Bernstein.

        * MiniBrowser/mac/AppDelegate.h:
        * MiniBrowser/mac/AppDelegate.m:
        (-[BrowserAppDelegate init]):
        (-[BrowserAppDelegate applicationWillTerminate:]):

2013-12-08  Brian Holt  <brian.holt@samsung.com>

        [WK2] Add ENABLE_NETWORK_PROCESS flag
        https://bugs.webkit.org/show_bug.cgi?id=125421

        Add support to build with the Network Process enabled.

        Reviewed by Martin Robinson.

        * Scripts/webkitperl/FeatureList.pm:

2013-12-07  Filip Pizlo  <fpizlo@apple.com>

        Fold typedArray.length if typedArray is constant
        https://bugs.webkit.org/show_bug.cgi?id=125252

        Reviewed by Sam Weinig.
        
        Add Source/JavaScriptCore/tests/stress to the set of JS tests. This is where you
        should put tests that run just like JSRegress but don't run as part of LayoutTests.
        Currently I'm using it for tests that require some surgical support from jsc.cpp.

        * Scripts/run-javascriptcore-tests:

2013-12-08  Zan Dobersek  <zdobersek@igalia.com>

        [gdb] Update printers for WTF::CString, JSC::JSString
        https://bugs.webkit.org/show_bug.cgi?id=124600

        Reviewed by Gustavo Noronha Silva.

        Update the two printers after they fell behind the changes in implementation.

        * gdb/webkit.py:
        (WTFCStringPrinter.to_string):
        (JSCJSStringPrinter.to_string):

2013-12-08  Zan Dobersek  <zdobersek@igalia.com>

        [webkitpy] Add a WestonDriver unit test
        https://bugs.webkit.org/show_bug.cgi?id=125408

        Reviewed by Gustavo Noronha Silva.

        Add a webkitpy unit test for the Weston driver.

        * Scripts/webkitpy/port/westondriver_unittest.py: Added.
        (WestonDriverTest):
        (WestonDriverTest.make_driver): Sets up a new WestonDriver instance for testing purposes.
        (WestonDriverTest.test_start): Check that the Weston compositor is launched properly and that
        the server environment contains proper WAYLAND and GDK_BACKEND entries.
        (WestonDriverTest.test_stop): Check that the Weston compositor is terminated properly and that
        the driver cleans up the temporary directory.
        (WestonDriverTest.test_stop.FakeWestonProcess): A helper class that logs the expected termination.
        (WestonDriverTest.test_stop.FakeWestonProcess.terminate):

2013-12-08  Brendan Long  <b.long@cablelabs.com>

        [Gtk] install-dependencies doesn't install libgtk-3-dev
        https://bugs.webkit.org/show_bug.cgi?id=125320

        Reviewed by Gustavo Noronha Silva.

        * gtk/install-dependencies: Add libgtk-3-dev, libsoup2.4 and subversion

2013-12-07  Sam Weinig  <sam@webkit.org>

        [Cocoa] Convert a few more parts of MiniBrowser over to the Objective-C API
        https://bugs.webkit.org/show_bug.cgi?id=125401

        Reviewed by Dan Bernstein.

        * MiniBrowser/mac/WK2BrowserWindowController.m:
        (-[WK2BrowserWindowController fetch:]):
        (-[WK2BrowserWindowController reload:]):
        (-[WK2BrowserWindowController goBack:]):
        (-[WK2BrowserWindowController goForward:]):
        (-[WK2BrowserWindowController validateUserInterfaceItem:]):
        (-[WK2BrowserWindowController currentZoomFactor]):
        (-[WK2BrowserWindowController setCurrentZoomFactor:]):
        (-[WK2BrowserWindowController zoomIn:]):
        (-[WK2BrowserWindowController zoomOut:]):
        (-[WK2BrowserWindowController canResetZoom]):
        (-[WK2BrowserWindowController resetZoom:]):
        (-[WK2BrowserWindowController toggleZoomMode:]):
        (-[WK2BrowserWindowController updateTextFieldFromURL:]):

2013-12-07  Sam Weinig  <sam@webkit.org>

        Convert MiniBrowser to use WKProcessGroup and WKBrowsingContextGroup
        https://bugs.webkit.org/show_bug.cgi?id=125400

        Reviewed by Dan Bernstein.

        * MiniBrowser/mac/AppDelegate.h:
        * MiniBrowser/mac/AppDelegate.m:
        * MiniBrowser/mac/WK2BrowserWindowController.h:
        * MiniBrowser/mac/WK2BrowserWindowController.m:
        (-[WK2BrowserWindowController initWithProcessGroup:browsingContextGroup:]):
        (-[WK2BrowserWindowController dealloc]):
        (createNewPage):
        (-[WK2BrowserWindowController awakeFromNib]):
        (-[WK2BrowserWindowController browsingContextController:didNavigateWithNavigationData:]):
        (-[WK2BrowserWindowController browsingContextController:didPerformClientRedirectFromURL:toURL:]):
        (-[WK2BrowserWindowController browsingContextController:didPerformServerRedirectFromURL:toURL:]):
        (-[WK2BrowserWindowController browsingContextController:didUpdateHistoryTitle:forURL:]):
        Replace global WKContextRef and WKPageGroupRef with WKProcessGroup and WKBrowsingContextGroup. Also
        replace context based WKContextHistoryClient with WKBrowsingContextController based WKBrowsingContextHistoryDelegate

2013-12-07  Gustavo Noronha Silva  <gns@gnome.org>

        [GTK] Run each gtest subtest separately instead of in one go
        https://bugs.webkit.org/show_bug.cgi?id=125386

        Reviewed by Martin Robinson.

        This is what other ports are doing (except they build each test as a separate binary)
        and will help with the timeouts we sometimes hit because it applies to the full test
        run.

        * Scripts/run-gtk-tests:
        (TestRunner._get_tests_from_google_test_suite): get a list of available sub-tests.
        (TestRunner._run_google_test): run a single subtest from a gtest binary.
        (TestRunner._run_google_test_suite): call the binary once per subtest.

2013-12-07  Dániel Bátyai  <Batyai.Daniel@stud.u-szeged.hu>

        Move PrettyPatch related code to prettypatch.py
        https://bugs.webkit.org/show_bug.cgi?id=124937

        Reviewed by Ryosuke Niwa.

        This code seems to have a better place here than in Port, since PrettyPatch already knows
        pretty_patch_path, and this also unifies the usage of PrettyPatch

        * Scripts/webkitpy/common/prettypatch.py:
        (PrettyPatch.__init__):
        (PrettyPatch.pretty_diff):
        (PrettyPatch):
        (PrettyPatch.pretty_patch_available):
        (PrettyPatch.check_pretty_patch):
        (PrettyPatch.pretty_patch_text):
        * Scripts/webkitpy/layout_tests/controllers/test_result_writer.py:
        (TestResultWriter.create_text_diff_and_write_result):
        * Scripts/webkitpy/layout_tests/models/test_run_results.py:
        (summarize_results):
        * Scripts/webkitpy/port/base.py:
        (Port.__init__):
        (Port.wdiff_available):
        (Port.check_image_diff):
        (Port.wdiff_text):
        * Scripts/webkitpy/port/base_unittest.py:
        (PortTest.test_pretty_patch_os_error):
        (PortTest.test_pretty_patch_script_error):

2013-12-06  Dan Bernstein  <mitz@apple.com>

        [Mac] MiniBrowser Debug builds are compiled with -Os
        https://bugs.webkit.org/show_bug.cgi?id=125376

        Reviewed by Tim Horton.

        * MiniBrowser/MiniBrowser.xcodeproj/project.pbxproj: Set GCC_OPTIMIZATION_LEVEL to 0 for
        the Debug configuration at the project level.

2013-12-06  Jer Noble  <jer.noble@apple.com>

        [MSE] Add a runtime-setting for the MediaSource constructor.
        https://bugs.webkit.org/show_bug.cgi?id=125336

        Reviewed by Eric Carlson.

        Enable MediaSource in DRT and WKTR.

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

2013-12-06  Jer Noble  <jer.noble@apple.com>

        Strip out extraneous logging from AppleGVA in media tests.
        https://bugs.webkit.org/show_bug.cgi?id=125357

        Reviewed by Simon Fraser.

        Add a mechanism for stripping out abritrary regular expressions from test input and output.

        * Scripts/webkitpy/layout_tests/controllers/single_test_runner.py:
        (SingleTestRunner._run_compare_test): Strip out logging
        * Scripts/webkitpy/port/base.py:
        (Port.logging_patterns_to_strip): Return an empty list by default.
        * Scripts/webkitpy/port/driver.py:
        (DriverOutput.strip_patterns): Apply the port specific patterns to the text.
        * Scripts/webkitpy/port/mac.py:
        (MacPort.logging_patterns_to_strip): Return a complete list.

2013-12-06  Dean Jackson  <dino@apple.com>

        Updating ANGLE should point to instructions
        https://bugs.webkit.org/show_bug.cgi?id=125361

        Reviewed by Eric Carlson.

        Point to https://trac.webkit.org/wiki/UpdatingANGLE when
        someone wants to patch ANGLE.

        * Scripts/webkitpy/common/config/watchlist:

2013-12-06  Dan Bernstein  <mitz@apple.com>

        [Mac] Transition MiniBrowser to the Cocoa API: load delegate
        https://bugs.webkit.org/show_bug.cgi?id=125334

        Reviewed by Darin Adler.

        * MiniBrowser/mac/WK2BrowserWindowController.m:
        (-[WK2BrowserWindowController dealloc]): Nil out the load delegate and stop observing the
        title property.
        (-[WK2BrowserWindowController isPaginated]): Changed to use Cocoa SPI.
        (-[WK2BrowserWindowController togglePaginationMode:]): Ditto.
        (-[WK2BrowserWindowController observeValueForKeyPath:ofObject:change:context:]): Update the
        window title with the title property changes.
        (-[WK2BrowserWindowController awakeFromNib]): Start observing the title property. Changed to
        set the load delegate instead of the load client.
        (-[WK2BrowserWindowController updateTextFieldFromURL:]): Changed to use Cocoa types.
        (-[WK2BrowserWindowController updateProvisionalURL]): Removed frame parameter.
        (-[WK2BrowserWindowController updateCommittedURL]): Ditto.
        (-[WK2BrowserWindowController browsingContextControllerDidStartProvisionalLoad:]):
        Implemented this load delegate method.
        (-[WK2BrowserWindowController browsingContextControllerDidReceiveServerRedirectForProvisionalLoad:]):
        Ditto.
        (-[WK2BrowserWindowController browsingContextController:didFailProvisionalLoadWithError:]): Ditto.
        (-[WK2BrowserWindowController browsingContextControllerDidCommitLoad:]): Ditto.
        (-[WK2BrowserWindowController browsingContextControllerDidFinishLoad:]): Ditto.
        (-[WK2BrowserWindowController browsingContextController:didFailLoadWithError:]): Ditto.
        (-[WK2BrowserWindowController browsingContextControllerDidChangeBackForwardList:addedItem:removedItems:]):
        Ditto.
        (-[WK2BrowserWindowController browsingContextController:canAuthenticateAgainstProtectionSpace:]):
        Ditto.
        (-[WK2BrowserWindowController browsingContextController:didReceiveAuthenticationChallenge:]): Ditto.

2013-12-06  Tamas Gergely  <tgergely.u-szeged@partner.samsung.com>

        Remove function from style/checkers/cpp.py.
        https://bugs.webkit.org/show_bug.cgi?id=125341

        Reviewed by Darin Adler.

        Corrects a FIXME: by removing a function from cpp.py.

        * Scripts/webkitpy/style/checkers/cpp.py:
        (CppChecker.__init__):
        (CppChecker.check):
        * Scripts/webkitpy/style/checkers/cpp_unittest.py:
        (CppStyleTestBase.process_file_data):

2013-12-06  Gergo Balogh  <geryxyz@inf.u-szeged.hu>

        check-webkit-style: false positive warning for indentation of #ifdef code.
        https://bugs.webkit.org/show_bug.cgi?id=125254

        Reviewed by Darin Adler.

        * Scripts/webkitpy/style/checkers/cpp.py:
        (check_member_initialization_list):
        * Scripts/webkitpy/style/checkers/cpp_unittest.py:
        (WebKitStyleTest.test_member_initialization_list):

2013-12-06  Chris Fleizach  <cfleizach@apple.com>

        Fix spelling error in style checker: beggining
        https://bugs.webkit.org/show_bug.cgi?id=125347

        Reviewed by Anders Carlsson.

        * Scripts/webkitpy/style/checkers/cpp.py:
        (check_member_initialization_list):
        * Scripts/webkitpy/style/checkers/cpp_unittest.py:
        (WebKitStyleTest.test_member_initialization_list):

2013-12-06  Lukasz Gajowy  <l.gajowy@samsung.com>

        [ATK] Missing aria roles mappings
        https://bugs.webkit.org/show_bug.cgi?id=117729

        Reviewed by Mario Sanchez Prada.

        Added new mappings to AccessibilityUIElementAtk.cpp.

        * DumpRenderTree/atk/AccessibilityUIElementAtk.cpp:
        * WebKitTestRunner/InjectedBundle/atk/AccessibilityUIElementAtk.cpp:

2013-12-06  Csaba Osztrogonác  <ossy@webkit.org>

        Typo fix after r160218.

        * Scripts/webkitpy/test/main.py:
        (main):

2013-12-06  Csaba Osztrogonác  <ossy@webkit.org>

        Unreviewed fix after r160206.

        * Scripts/webkitpy/test/main.py:
        (main): sys.platform can be win32 or cygwin too on Windows.

2013-12-05  Csaba Osztrogonác  <ossy@webkit.org>

        Disable WebKit2 webkitpy unittests on Windows
        https://bugs.webkit.org/show_bug.cgi?id=125318

        Reviewed by Ryosuke Niwa.

        * Scripts/webkitpy/test/main.py:
        (main):

2013-12-05  Anders Carlsson  <andersca@apple.com>

        Tweak WeakObjCPtr
        https://bugs.webkit.org/show_bug.cgi?id=125311

        Reviewed by Darin Adler.

        Split up tests into more logical groups. Add new tests for new functionality.

        * TestWebKitAPI/Tests/WebKit2/mac/WeakObjCPtr.mm:

2013-12-05  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] Fix gtk-doc warnings when generating DOM bindings API docs
        https://bugs.webkit.org/show_bug.cgi?id=125302

        Reviewed by Philippe Normand.

        * gtk/generate-webkitdom-doc-files:
        (WebKitDOMDocGeneratorSections.write_footer): Add a new section
        containing a private subsection for WEBKIT_API, WEBKIT_DEPRECATED
        and WEBKIT_DEPRECATED_FOR macros.

2013-12-05  Laszlo Vidacs  <lac@inf.u-szeged.hu>

        Fix cross compilation on x86
        https://bugs.webkit.org/show_bug.cgi?id=125295

        Reviewed by Zoltan Herczeg.

        Certain compiler flags should not be added when cross compilation is enabled.

        * Scripts/webkitdirs.pm:
        (runAutogenForAutotoolsProjectIfNecessary):
        (generateBuildSystemFromCMakeProject):

2013-12-05  Tamas Gergely  <tgergely.u-szeged@partner.samsung.com>

        Remove duplicated/dead code from cpp style checker unit tests.
        https://bugs.webkit.org/show_bug.cgi?id=125226

        Reviewed by Ryosuke Niwa.

        Remove the first definition of OrderOfIncludesTest class as it is
        overwritten by the second. Remove a duplicated assert statement
        from the second class.

        * Scripts/webkitpy/style/checkers/cpp_unittest.py:
        (OrderOfIncludesTest.setUp):
        (OrderOfIncludesTest.test_try_drop_common_suffixes):
          The last assert was duplicated.

2013-12-05  László Langó  <lango@inf.u-szeged.hu>

        Remove Scripts/generate-qt-inspector-resource.
        https://bugs.webkit.org/show_bug.cgi?id=125288

        Reviewed by Andreas Kling.

        * Scripts/generate-qt-inspector-resource: Removed. There is no QT anymore.
        We don't need this file.

2013-12-05  Dániel Bátyai  <Batyai.Daniel@stud.u-szeged.hu>

        Remove certain methods from TestExpectations and use TestExpectationsModel instead of them
        https://bugs.webkit.org/show_bug.cgi?id=125218

        Reviewed by Ryosuke Niwa.

        * Scripts/webkitpy/layout_tests/controllers/layout_test_finder.py:
        (LayoutTestFinder.skip_tests):
        * Scripts/webkitpy/layout_tests/controllers/layout_test_runner.py:
        (LayoutTestRunner.run_tests):
        (LayoutTestRunner._update_summary_with_result):
        * Scripts/webkitpy/layout_tests/controllers/manager.py:
        (Manager._test_is_slow):
        * Scripts/webkitpy/layout_tests/layout_package/json_layout_results_generator.py:
        (JSONLayoutResultsGenerator._insert_failure_summaries):
        * Scripts/webkitpy/layout_tests/models/test_expectations.py:
        (TestExpectations.get_rebaselining_failures):
        * Scripts/webkitpy/layout_tests/models/test_expectations_unittest.py:
        (assert_exp):
        (MiscTests.test_multiple_results):
        (MiscTests.test_category_expectations):
        (MiscTests.test_get_modifiers):
        (MiscTests.test_get_expectations_string):
        (MiscTests.test_expectation_to_string):
        (MiscTests.test_get_test_set):
        (MiscTests.test_more_specific_override_resets_skip):
        (SkippedTests.check):
        * Scripts/webkitpy/layout_tests/models/test_run_results.py:
        (TestRunResults.__init__):
        (summarize_results):
        * Scripts/webkitpy/tool/commands/rebaseline.py:
        (RebaselineExpectations._tests_to_rebaseline):

2013-12-04  Ryosuke Niwa  <rniwa@webkit.org>

        Enable HTMLTemplateElement by default
        https://bugs.webkit.org/show_bug.cgi?id=123851

        Reviewed by Antti Koivisto.

        * Scripts/webkitperl/FeatureList.pm:

2013-12-04  Jozsef Berta  <jberta@inf.u-szeged.hu>

        [EFL] Bumping GStreamer version to 1.2.1
        https://bugs.webkit.org/show_bug.cgi?id=125155

        Reviewed by Gyuyoung Kim.

        * efl/jhbuild.modules: Set the GStreamer version to 1.2.1


2013-12-04  Tamas Gergely  <tgergely.u-szeged@partner.samsung.com>

        Update jhbuild revision.
        https://bugs.webkit.org/show_bug.cgi?id=124966
        
        Reviewed by Gyuyoung Kim.

        Used version of Jhbuild failed to create directories and caused
        update-webkitefl-libs to fail. Latest Jhbuild version has it fixed.

        * jhbuild/jhbuild-wrapper:

2013-12-04  Anders Carlsson  <andersca@apple.com>

        Add a WeakObjCPtr class
        https://bugs.webkit.org/show_bug.cgi?id=125267

        Reviewed by Geoffrey Garen.

        Add API tests for WeakObjCPtr.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WebKit2/mac/WeakObjCPtr.mm: Added.
        (TEST):

2013-12-04  Anders Carlsson  <andersca@apple.com>

        Make the estimatedProgress property observable using KVO
        https://bugs.webkit.org/show_bug.cgi?id=125259

        Reviewed by Dan Bernstein.

        Bind the progress indicator value to the "estimatedProgress" property.

        * MiniBrowser/mac/WK2BrowserWindowController.m:
        (-[WK2BrowserWindowController dealloc]):
        (-[WK2BrowserWindowController awakeFromNib]):

2013-12-04  Anders Carlsson  <andersca@apple.com>

        Add a loading property to WKBrowsingContextController
        https://bugs.webkit.org/show_bug.cgi?id=125256

        Reviewed by Dan Bernstein.

        Bind the progress indicator visibility to the "loading" property.

        * MiniBrowser/mac/WK2BrowserWindowController.m:
        (-[WK2BrowserWindowController dealloc]):
        (-[WK2BrowserWindowController awakeFromNib]):
        (-[WK2BrowserWindowController didStartProgress]):
        (-[WK2BrowserWindowController didFinishProgress]):

2013-12-04  Nick Diego Yamane  <nick.yamane@openbossa.org>

        [EFL][WK2] Buildfix after r160104
        https://bugs.webkit.org/show_bug.cgi?id=125231

        Reviewed by Anders Carlsson.

        * TestWebKitAPI/Tests/WebKit2/CoordinatedGraphics/WKViewIsActiveSetIsActive.cpp:
        (TestWebKitAPI::TEST): reinterpret_cast<WKFooClientBase*>(&client) -> &client.base
        * TestWebKitAPI/Tests/WebKit2/efl/WKViewClientWebProcessCallbacks.cpp:
        (TestWebKitAPI::setViewClient): Ditto.

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

        check-webkit-style detected some ternary statements as initialization lists
        https://bugs.webkit.org/show_bug.cgi?id=125246

        Reviewed by Dean Jackson.

        The regular expression that check-webkit-tests uses to detect initialization
        lists was too broad, resulting in false positives. This patch makes the
        regex more specific

        * Scripts/webkitpy/style/checkers/cpp.py:
        (check_member_initialization_list):
        * Scripts/webkitpy/style/checkers/cpp_unittest.py:
        (WebKitStyleTest.test_member_initialization_list):

2013-12-04  Mark Hahnenberg  <mhahnenberg@apple.com>

        run-jsc-stress-tests can only run locally
        https://bugs.webkit.org/show_bug.cgi?id=124551

        Reviewed by Filip Pizlo.

        * Scripts/jsc-stress-test-helpers/shell-runner.sh: Fixed a couple issues. One was if the script was
        killed before the lock directory was removed, future executions wouldn't make any progress. Also 
        added a couple more signals to handle gracefully at shutdown. 
        * Scripts/run-javascriptcore-tests: Pass through the --remote argument to run-jsc-stress-tests.
        * Scripts/run-jsc-stress-tests: Added support for the --remote flag. It accepts a hostname, user, and port.
        The script then generates the test bundle, tars it up, and copies it to the remote host via ssh where
        it then untars the bundle and executes the shell-based test runner. Also refactored some of the logic
        toward the end of the script to make it easier to tell which of the various modes do what.

2013-12-04  Csaba Osztrogonác  <ossy@webkit.org>

        [EFL][WK2] Buildfix after r160104
        https://bugs.webkit.org/show_bug.cgi?id=125233

        Reviewed by Anders Carlsson.

        * TestWebKitAPI/Tests/WebKit2/CoordinatedGraphics/WKViewIsActiveSetIsActive.cpp:
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/WebKit2/efl/WKViewClientWebProcessCallbacks.cpp:
        (TestWebKitAPI::setPageLoaderClient):

2013-12-03  Anders Carlsson  <andersca@apple.com>

        Deprecate all unversioned client structs in favor of having explicit versioned structs
        https://bugs.webkit.org/show_bug.cgi?id=125203

        Reviewed by Dan Bernstein.

        Update for WebKit2 API changes.

        * MiniBrowser/mac/AppDelegate.m:
        (-[BrowserAppDelegate init]):
        * MiniBrowser/mac/WK2BrowserWindowController.m:
        (-[WK2BrowserWindowController awakeFromNib]):
        * TestWebKitAPI/InjectedBundleController.cpp:
        (TestWebKitAPI::InjectedBundleController::initialize):
        * TestWebKitAPI/Tests/WebKit2/AboutBlankLoad.cpp:
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/WebKit2/CanHandleRequest.cpp:
        (TestWebKitAPI::setInjectedBundleClient):
        * TestWebKitAPI/Tests/WebKit2/CloseThenTerminate.cpp:
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/WebKit2/CookieManager.cpp:
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/WebKit2/DOMWindowExtensionBasic.cpp:
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/WebKit2/DOMWindowExtensionBasic_Bundle.cpp:
        (TestWebKitAPI::DOMWindowExtensionBasic::didCreatePage):
        * TestWebKitAPI/Tests/WebKit2/DOMWindowExtensionNoCache.cpp:
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/WebKit2/DOMWindowExtensionNoCache_Bundle.cpp:
        (TestWebKitAPI::DOMWindowExtensionNoCache::didCreatePage):
        * TestWebKitAPI/Tests/WebKit2/DidAssociateFormControls.cpp:
        (TestWebKitAPI::setInjectedBundleClient):
        * TestWebKitAPI/Tests/WebKit2/DidAssociateFormControls_Bundle.cpp:
        (TestWebKitAPI::DidAssociateFormControlsTest::didCreatePage):
        * TestWebKitAPI/Tests/WebKit2/DidNotHandleKeyDown.cpp:
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/WebKit2/DocumentStartUserScriptAlertCrash.cpp:
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/WebKit2/DownloadDecideDestinationCrash.cpp:
        (TestWebKitAPI::setContextDownloadClient):
        (TestWebKitAPI::setPagePolicyClient):
        * TestWebKitAPI/Tests/WebKit2/FailedLoad.cpp:
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/WebKit2/Find.cpp:
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/WebKit2/FindMatches.mm:
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/WebKit2/ForceRepaint.cpp:
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/WebKit2/FrameMIMETypeHTML.cpp:
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/WebKit2/FrameMIMETypePNG.cpp:
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/WebKit2/Geolocation.cpp:
        (TestWebKitAPI::setupGeolocationProvider):
        (TestWebKitAPI::setupView):
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/WebKit2/GetInjectedBundleInitializationUserDataCallback.cpp:
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/WebKit2/HitTestResultNodeHandle.cpp:
        (TestWebKitAPI::setPageLoaderClient):
        (TestWebKitAPI::setInjectedBundleClient):
        * TestWebKitAPI/Tests/WebKit2/HitTestResultNodeHandle_Bundle.cpp:
        (TestWebKitAPI::HitTestResultNodeHandleTest::didCreatePage):
        * TestWebKitAPI/Tests/WebKit2/InjectedBundleBasic.cpp:
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/WebKit2/InjectedBundleFrameHitTest.cpp:
        (TestWebKitAPI::setInjectedBundleClient):
        * TestWebKitAPI/Tests/WebKit2/InjectedBundleFrameHitTest_Bundle.cpp:
        (TestWebKitAPI::InjectedBundleFrameHitTestTest::didCreatePage):
        * TestWebKitAPI/Tests/WebKit2/InjectedBundleInitializationUserDataCallbackWins.cpp:
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/WebKit2/LayoutMilestonesWithAllContentInFrame.cpp:
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/WebKit2/LoadAlternateHTMLStringWithNonDirectoryURL.cpp:
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/WebKit2/LoadCanceledNoServerRedirectCallback.cpp:
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/WebKit2/LoadCanceledNoServerRedirectCallback_Bundle.cpp:
        (TestWebKitAPI::LoadCanceledNoServerRedirectCallbackTest::didCreatePage):
        * TestWebKitAPI/Tests/WebKit2/LoadPageOnCrash.cpp:
        (TestWebKitAPI::WebKit2CrashLoader::WebKit2CrashLoader):
        * TestWebKitAPI/Tests/WebKit2/MouseMoveAfterCrash.cpp:
        (TestWebKitAPI::setPageLoaderClient):
        * TestWebKitAPI/Tests/WebKit2/NewFirstVisuallyNonEmptyLayout.cpp:
        (TestWebKitAPI::setPageLoaderClient):
        * TestWebKitAPI/Tests/WebKit2/NewFirstVisuallyNonEmptyLayoutFails.cpp:
        (TestWebKitAPI::setPageLoaderClient):
        * TestWebKitAPI/Tests/WebKit2/NewFirstVisuallyNonEmptyLayoutForImages.cpp:
        (TestWebKitAPI::setPageLoaderClient):
        * TestWebKitAPI/Tests/WebKit2/NewFirstVisuallyNonEmptyLayoutFrames.cpp:
        (TestWebKitAPI::setPageLoaderClient):
        * TestWebKitAPI/Tests/WebKit2/PageLoadBasic.cpp:
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/WebKit2/PageLoadDidChangeLocationWithinPageForFrame.cpp:
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/WebKit2/ParentFrame.cpp:
        (TestWebKitAPI::setInjectedBundleClient):
        * TestWebKitAPI/Tests/WebKit2/ParentFrame_Bundle.cpp:
        (TestWebKitAPI::ParentFrameTest::didCreatePage):
        * TestWebKitAPI/Tests/WebKit2/PasteboardNotifications.mm:
        (TestWebKitAPI::setInjectedBundleClient):
        * TestWebKitAPI/Tests/WebKit2/PasteboardNotifications_Bundle.cpp:
        (TestWebKitAPI::PasteboardNotificationsTest::didCreatePage):
        * TestWebKitAPI/Tests/WebKit2/PrivateBrowsingPushStateNoHistoryCallback.cpp:
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/WebKit2/ReloadPageAfterCrash.cpp:
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/WebKit2/ResizeReversePaginatedWebView.cpp:
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/WebKit2/ResizeWindowAfterCrash.cpp:
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/WebKit2/ResponsivenessTimerDoesntFireEarly.cpp:
        (TestWebKitAPI::setInjectedBundleClient):
        (TestWebKitAPI::setPageLoaderClient):
        * TestWebKitAPI/Tests/WebKit2/RestoreSessionStateContainingFormData.cpp:
        (TestWebKitAPI::setPageLoaderClient):
        * TestWebKitAPI/Tests/WebKit2/ScrollPinningBehaviors.cpp:
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/WebKit2/ShouldGoToBackForwardListItem.cpp:
        (TestWebKitAPI::setPageLoaderClient):
        * TestWebKitAPI/Tests/WebKit2/ShouldGoToBackForwardListItem_Bundle.cpp:
        (TestWebKitAPI::ShouldGoToBackForwardListItemTest::didCreatePage):
        * TestWebKitAPI/Tests/WebKit2/SpacebarScrolling.cpp:
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/WebKit2/TerminateTwice.cpp:
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/WebKit2/UserMessage.cpp:
        (TestWebKitAPI::WebKit2UserMessageRoundTripTest::setInjectedBundleClient):
        (TestWebKitAPI::WebKit2UserMessageRoundTripTest::setPageLoaderClient):
        * TestWebKitAPI/Tests/WebKit2/WKConnection.cpp:
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/WebKit2/WKConnection_Bundle.cpp:
        (TestWebKitAPI::WKConnectionTest::initialize):
        * TestWebKitAPI/Tests/WebKit2/WKPageGetScaleFactorNotZero.cpp:
        (TestWebKitAPI::setPageLoaderClient):
        * TestWebKitAPI/Tests/WebKit2/WebArchive.cpp:
        (TestWebKitAPI::setInjectedBundleClient):
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/WebKit2/WillLoad.cpp:
        (TestWebKitAPI::WebKit2WillLoadTest::setInjectedBundleClient):
        * TestWebKitAPI/Tests/WebKit2/WillLoad_Bundle.cpp:
        * TestWebKitAPI/Tests/WebKit2/WillSendSubmitEvent.cpp:
        (TestWebKitAPI::setInjectedBundleClient):
        * TestWebKitAPI/Tests/WebKit2/WillSendSubmitEvent_Bundle.cpp:
        (TestWebKitAPI::WillSendSubmitEventTest::didCreatePage):
        * TestWebKitAPI/Tests/WebKit2/mac/EditorCommands.mm:
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/WebKit2/mac/GetBackingScaleFactor.mm:
        (TestWebKitAPI::setInjectedBundleClient):
        * TestWebKitAPI/Tests/WebKit2/mac/GetPIDAfterAbortedProcessLaunch.cpp:
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/WebKit2ObjC/CustomProtocolsInvalidScheme_Bundle.cpp:
        * TestWebKitAPI/Tests/WebKit2ObjC/PreventImageLoadWithAutoResizing_Bundle.cpp:
        (TestWebKitAPI::DenyWillSendRequestTest::didCreatePage):
        * TestWebKitAPI/Tests/WebKit2ObjC/WKRemoteObjectRegistry.mm:
        (TestWebKitAPI::didCreateConnection):
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/mac/PageVisibilityStateWithWindowChanges.mm:
        (TestWebKitAPI::PageVisibilityStateWithWindowChanges::initializeView):
        * TestWebKitAPI/Tests/mac/WKRemoteObjectRegistry_Bundle.mm:
        * TestWebKitAPI/mac/WebKitAgnosticTest.mm:
        (TestWebKitAPI::setPageLoaderClient):
        * WebKitTestRunner/GeolocationProviderMock.cpp:
        (WTR::GeolocationProviderMock::GeolocationProviderMock):
        * WebKitTestRunner/InjectedBundle/InjectedBundle.cpp:
        (WTR::InjectedBundle::initialize):
        * WebKitTestRunner/InjectedBundle/InjectedBundlePage.cpp:
        (WTR::InjectedBundlePage::InjectedBundlePage):
        * WebKitTestRunner/TestController.cpp:
        (WTR::TestController::createOtherPage):
        (WTR::TestController::initialize):
        (WTR::TestController::createWebViewWithOptions):

2013-12-04  Tamas Gergely  <tgergely.u-szeged@partner.samsung.com>

        Style checker for .messages.in files (WTF:: prefix)
        https://bugs.webkit.org/show_bug.cgi?id=125142

        Reviewed by Anders Carlsson.

        A new style checker for .messages.in files, that checks for the use of WTF::
        prefix in these files. (Also checks for tabs as these files were previously
        handled as text files.)

        * Scripts/webkitpy/style/checker.py:
        (CheckerDispatcher._create_checker):
          New checker is returned for .messages.in files.
        * Scripts/webkitpy/style/checkers/messagesin.py: Added.
          The new style checker class.
        (MessagesInChecker):
        (MessagesInChecker.__init__):
        (MessagesInChecker.check):
        (MessagesInChecker.check_WTF_prefix):
        * Scripts/webkitpy/style/checkers/messagesin_unittest.py: Added.
          Unit test for the new style  checker class.
        (MessagesInCheckerStyleTestCase):
        (test_checker):
        (test_checker.error_handler_for_test):
        (MessagesInCheckerTestCase):
        (MessagesInCheckerTestCase.test_init):
        (MessagesInCheckerTestCase.test_init.error_handler_for_test):

2013-12-04  Gergo Balogh  <geryxyz@inf.u-szeged.hu>

        Style checker requires alphabetical ordering in cmake lists even it contains variable.
        https://bugs.webkit.org/show_bug.cgi?id=124918

        Reviewed by Csaba Osztrogonác.

        * Scripts/webkitpy/style/checkers/cmake_unittest.py:
        (CMakeCheckerTest.test_check):
        * Scripts/webkitpy/style/checkers/cmake.py:
        (CMakeChecker._check_list_order):
        This will ignore lines with variable substitution.

2013-12-04  László Langó  <lango@inf.u-szeged.hu>

        check-webkit-style is wrong about expected format parameter pack rvalue reference arguments
        https://bugs.webkit.org/show_bug.cgi?id=124731

        Reviewed by Zoltan Herczeg.

        * Scripts/webkitpy/style/checkers/cpp.py:
        (check_spacing):
        * Scripts/webkitpy/style/checkers/cpp_unittest.py:
        (Cpp11StyleTest.test_rvaule_reference_in_parameter_pack):

2013-12-04  László Langó  <lango@inf.u-szeged.hu>

        Remove codecs and os dependencies from filereader.py in webkitpy/style.
        https://bugs.webkit.org/show_bug.cgi?id=124719

        Although TextFileReader requires a FileSystem it circumvents it in two places!
        We should use the FileSystem only and remove codecs and os imports.

        Reviewed by Zoltan Herczeg.

        * Scripts/webkitpy/common/system/filesystem.py:
        (FileSystem.open_stdin): Moved from TextFileReader
        * Scripts/webkitpy/style/filereader.py:
        (TextFileReader._read_lines): use FileSystem instead of calling codecs.open directly
        (TextFileReader._process_directory): use FileSystem instead of calling os.walk directly

2013-12-04  László Langó  <lango@inf.u-szeged.hu>

        check-webkit-style should check member initialization indentation.
        https://bugs.webkit.org/show_bug.cgi?id=124820

        Reviewed by Zoltan Herczeg.

        check-webkit-style should check member initialization indentation
        belongs to webkit coding style:
        http://www.webkit.org/coding/coding-style.html#punctuation-member-init

        * Scripts/webkitpy/style/checkers/cpp.py:
        (check_member_initialization_list): Add new method to check member
        initialization list.
        (check_style): Add the call of the new method.
        (check_language): Move self initialization checking into the new method.
        (CppChecker): Add a new category for initialization list.
        * Scripts/webkitpy/style/checkers/cpp_unittest.py:
        (CppStyleTest.test_runtime_selfinit):
        (CppStyleTest.test_deprecated_cast):
        (WebKitStyleTest.test_member_initialization_list): Add new testcases for
        the new feature.

2013-12-04  Tamas Gergely  <gertom@inf.u-szeged.hu>

        style-bot should reject Committer additions to committers.py
        https://bugs.webkit.org/show_bug.cgi?id=107574

        Reviewed by Zoltan Herczeg.

        The style check when executed in non-interactive mode (probably by a
        bot) will raise an additional error if the contributors.json file is
        modified. Non-interactive mode information is propagated to the
        Dispatcher, which creates a special JSON checker for the
        contributors.json file.

        * Scripts/webkitpy/style/checker.py:
        (check_webkit_style_configuration):
        (CheckerDispatcher._create_checker):
        (CheckerDispatcher.dispatch):
        (StyleProcessorConfiguration.__init__):
        (StyleProcessor.process):
        * Scripts/webkitpy/style/checker_unittest.py:
        (CheckerDispatcherSkipTest._assert_should_skip_without_warning):
        (CheckerDispatcherDispatchTest.dispatch):
        (StyleProcessorConfigurationTest._style_checker_configuration):
        (StyleProcessor_EndToEndTest.test_init):
        (StyleProcessor_EndToEndTest.test_process):
        (StyleProcessor_CodeCoverageTest.MockDispatcher.dispatch):
        (StyleProcessor_CodeCoverageTest.setUp):
        * Scripts/webkitpy/style/checkers/jsonchecker.py:
        (JSONChecker.line_number_from_json_exception):
        (JSONContributorsChecker):
        (JSONContributorsChecker.check):
        * Scripts/webkitpy/style/error_handlers_unittest.py:
        (DefaultStyleErrorHandlerTest._style_checker_configuration):
        * Scripts/webkitpy/style/optparser.py:
        (CommandOptionValues.__init__):
        (ArgumentParser._create_option_parser):
        (ArgumentParser.parse):
        * Scripts/webkitpy/tool/commands/upload_unittest.py:
        (test_post):
        (test_upload):
        * Scripts/webkitpy/tool/steps/checkstyle.py:
        (CheckStyle.run):

2013-12-04  Nick Diego Yamane  <nick.yamane@openbossa.org>

        [EFL][WK2] Fix build after API::Client changes
        https://bugs.webkit.org/show_bug.cgi?id=125206

        Reviewed by Csaba Osztrogonác.

        * TestWebKitAPI/Tests/WebKit2/CoordinatedGraphics/WKViewIsActiveSetIsActive.cpp:
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/WebKit2/efl/WKViewClientWebProcessCallbacks.cpp:
        (TestWebKitAPI::setViewClient):

2013-12-03  Dan Bernstein  <mitz@apple.com>

        Fixed a test timing out after r160040.

        * TestWebKitAPI/Tests/WebKit2ObjC/WKBrowsingContextLoadDelegateTest.mm:
        (-[SimpleLoadFailDelegate browsingContextController:didFailProvisionalLoadWithError:]):
        Updated for the delegate method rename.

2013-12-03  Filip Pizlo  <fpizlo@apple.com>

        REGRESSION: repro scripts disappear when you rerun tests
        https://bugs.webkit.org/show_bug.cgi?id=125184

        Reviewed by Mark Hahnenberg.
        
        This bug made it difficult to quickly see if a test that recently failed is still
        failing while also running a new batch of tests.

        Repro scripts are supposed to stay around until you delete them explicitly. This
        patch accomplishes that.

        * Scripts/run-jsc-stress-tests:

2013-12-03  peavo@outlook.com  <peavo@outlook.com>

        [Win] run-jsc-stress-tests has a great number of failures (2026/7606) on Windows
        https://bugs.webkit.org/show_bug.cgi?id=125111

        Reviewed by Filip Pizlo.

        Almost all errors seem to be caused by differences in line ending when diffing test output with expected output.

        * Scripts/run-javascriptcore-tests: Enable api test and stress test for WinCairo.
        * Scripts/run-jsc-stress-tests: Ignore carriage return when diffing test output with expected output.

2013-12-03  Ryosuke Niwa  <rniwa@webkit.org>

        Add a script to automatically configure a git clone
        https://bugs.webkit.org/show_bug.cgi?id=110073

        Revert the change to use https for now since git.webkit.org is setup with http.

        * Scripts/webkitpy/tool/commands/setupgitclone.py:
        (SetupGitClone.execute):

2013-12-03  Ryosuke Niwa  <rniwa@webkit.org>

        Add a script to automatically configure a git clone
        https://bugs.webkit.org/show_bug.cgi?id=110073

        Reviewed by Benjamin Poulain.

        Added "webkit-patch setup-git-clone" to setup a brand new Git clone.

        This command runs various commands listed on http://trac.webkit.org/wiki/UsingGitWithWebKit

        * Scripts/webkitpy/tool/commands/__init__.py:
        * Scripts/webkitpy/tool/commands/setupgitclone.py: Added.
        (SetupGitClone):
        (SetupGitClone.execute):

2013-12-03  Anders Carlsson  <andersca@apple.com>

        Deprecate WKNotificationProvider
        https://bugs.webkit.org/show_bug.cgi?id=125178

        Reviewed by Sam Weinig.

        Update for WebKit2 changes.

        * WebKitTestRunner/TestController.cpp:
        (WTR::TestController::initialize):
        * WebKitTestRunner/WebNotificationProvider.cpp:
        (WTR::WebNotificationProvider::provider):
        * WebKitTestRunner/WebNotificationProvider.h:

2013-12-03  Brent Fulgham  <bfulgham@apple.com>

        [Win] Support 64-bit Application Support Libraries Location 
        https://bugs.webkit.org/show_bug.cgi?id=125179

        Reviewed by Tim Horton.

        Enable the user to specify a location for 64-bit support libraries (such as libxml2, ICU, etc.)
        on Windows until an official distribution is available that properly creates registry settings
        to specify these locations.

        * Scripts/webkitdirs.pm:
        (setupAppleWinEnv): Notify user to set WEBKIT_64_SUPPORT environment variable if needed.
        (setupCygwinEnv): Report WEWBKIT_64_SUPPORT path when running 64-bit builds.
        (appleApplicationSupportPath): Add WEBKIT_64_SUPPORT location to runtime environment when
        running 64-bit builds.

2013-12-03  Mark Hahnenberg  <mhahnenberg@apple.com>

        run-jsc-stress-tests only supports host environments that have make installed
        https://bugs.webkit.org/show_bug.cgi?id=124550

        Reviewed by Darin Adler.

        This might not be the case for all hosts, so this patch implements an alternate "backend" 
        for run-jsc-stress-tests to use normal shell commands rather than Makefiles. To remain at 
        least somewhat competitive with the make-based test runner, the shell backend uses subshells
        run in the background to allow tests to run in parallel. Since the concurrency primitives 
        in shell scripting are rather coarse, the overhead of this parallelism is higher than that 
        of the make-based runner.

        * Scripts/jsc-stress-test-helpers/shell-runner.sh: Added. This is the runner that is copied into
        the bundle and controls all of the parallel aspects of the shell-based test runner.
        * Scripts/run-jsc-stress-tests:

2013-12-03  Tamas Gergely  <tgergely.u-szeged@partner.samsung.com>

        Remove function from TextChecker
        https://bugs.webkit.org/show_bug.cgi?id=125148

        Reviewed by Darin Adler.

        The process_file_data is used only from the unit tests, so it is simply moved there.

        * Scripts/webkitpy/style/checkers/text.py:
        (TextChecker.check):
        * Scripts/webkitpy/style/checkers/text_unittest.py:
        (TextStyleTestCase.process_file_data):
        (TextStyleTestCase.assertNoError):
        (TextStyleTestCase.assertError):

2013-12-03  Dániel Bátyai  <Batyai.Daniel@stud.u-szeged.hu>

        Remove get_test() and reference test names directly instead.
        https://bugs.webkit.org/show_bug.cgi?id=124962

        Reviewed by Csaba Osztrogonác.

        * Scripts/webkitpy/layout_tests/models/test_expectations_unittest.py:
        (Base.__init__):
        (Base.get_basic_tests):
        (assert_exp):
        (MiscTests.test_multiple_results):
        (MiscTests.test_category_expectations):
        (MiscTests.test_get_modifiers):
        (MiscTests.test_get_expectations_string):
        (MiscTests.test_get_test_set):
        (MiscTests.test_parse_warning):
        (MiscTests.test_pixel_tests_flag.match):

2013-12-03  Gergo Balogh  <geryxyz@inf.u-szeged.hu>

        Style Checker false pass.
        https://bugs.webkit.org/show_bug.cgi?id=112456

        Reviewed by Csaba Osztrogonác.

        * Scripts/webkitpy/style/checkers/changelog.py:
        (ChangeLogChecker.check_entry):
        simple regex fix to check "No new tests (...)."
        * Scripts/webkitpy/style/checkers/changelog_unittest.py:
        (ChangeLogCheckerTest.test_no_new_tests):

2013-12-02  Filip Pizlo  <fpizlo@apple.com>

        run-jsc-stress-tests should allow for tests that have a directory containing .js files nested within a directory containing the data
        https://bugs.webkit.org/show_bug.cgi?id=125130

        Reviewed by Geoffrey Garen.

        * Scripts/run-jsc-stress-tests:

2013-12-02  Samuel White  <samuel_white@apple.com>

        AX: Add AXUIElementCountForSearchPredicate parameterized attribute.
        https://bugs.webkit.org/show_bug.cgi?id=124561

        Reviewed by Chris Fleizach.

        Added function to verify that NSAccessibilityUIElementCountForSearchPredicateParameterizedAttribute works as it should.

        * DumpRenderTree/AccessibilityUIElement.cpp:
        (uiElementCountForSearchPredicateCallback):
        (uiElementForSearchPredicateCallback):
        (AccessibilityUIElement::getJSClass):
        * DumpRenderTree/AccessibilityUIElement.h:
        * DumpRenderTree/atk/AccessibilityUIElementAtk.cpp:
        (AccessibilityUIElement::uiElementCountForSearchPredicate):
        * DumpRenderTree/ios/AccessibilityUIElementIOS.mm:
        (AccessibilityUIElement::uiElementCountForSearchPredicate):
        * DumpRenderTree/mac/AccessibilityUIElementMac.mm:
        (searchPredicateParameterizedAttributeForSearchCriteria):
        (AccessibilityUIElement::uiElementCountForSearchPredicate):
        (AccessibilityUIElement::uiElementForSearchPredicate):
        * DumpRenderTree/win/AccessibilityUIElementWin.cpp:
        (AccessibilityUIElement::uiElementCountForSearchPredicate):
        * WebKitTestRunner/InjectedBundle/AccessibilityUIElement.cpp:
        (WTR::AccessibilityUIElement::uiElementCountForSearchPredicate):
        * WebKitTestRunner/InjectedBundle/AccessibilityUIElement.h:
        * WebKitTestRunner/InjectedBundle/Bindings/AccessibilityUIElement.idl:
        * WebKitTestRunner/InjectedBundle/atk/AccessibilityUIElementAtk.cpp:
        (WTR::AccessibilityUIElement::uiElementCountForSearchPredicate):
        * WebKitTestRunner/InjectedBundle/mac/AccessibilityUIElementMac.mm:
        (WTR::searchPredicateParameterizedAttributeForSearchCriteria):
        (WTR::AccessibilityUIElement::uiElementCountForSearchPredicate):
        (WTR::AccessibilityUIElement::uiElementForSearchPredicate):

2013-12-02  Dániel Bátyai  <Batyai.Daniel@stud.u-szeged.hu>

        Instead of a large 'if' block, each failure class should write it's own result in test_result_writer.py
        https://bugs.webkit.org/show_bug.cgi?id=124714

        Reviewed by Ryosuke Niwa.

        * Scripts/webkitpy/layout_tests/controllers/test_result_writer.py:
        (write_test_result):
        * Scripts/webkitpy/layout_tests/models/test_failures.py:
        (TestFailure.write_failure):
        (FailureText):
        (FailureText.write_failure):
        (FailureAudio):
        (FailureAudio.write_failure):
        (FailureCrash.write_failure):
        (FailureMissingResult):
        (FailureTextMismatch):
        (FailureMissingImageHash.write_failure):
        (FailureMissingImage.write_failure):
        (FailureImageHashMismatch.write_failure):
        (FailureReftestMismatch.write_failure):
        (FailureReftestMismatchDidNotOccur.write_failure):
        (FailureMissingAudio):
        (FailureAudioMismatch):

2013-12-02  László Langó  <lango@inf.u-szeged.hu>

        Remove the stderr_write attribute from StyleProcessorConfiguration
        https://bugs.webkit.org/show_bug.cgi?id=124703

        Reviewed by Ryosuke Niwa.

        Remove the stderr_write attribute from this class in checker and
        replace its use with calls to a logging module logger. We Should 
        use logging module instead of writing to stderr directly.

        * Scripts/webkitpy/style/checker.py: Change stderr_write attribute to logging module logger.
        (check_webkit_style_configuration):
        (CheckerDispatcher.dispatch): Remove FIXME comment.
        (StyleProcessorConfiguration):
        (StyleProcessorConfiguration.__init__):
        (StyleProcessorConfiguration.write_style_error):
        * Scripts/webkitpy/style/checker_unittest.py: Update test to the modification.
        There is an "ERROR" prefix in log messiges from now.
        (StyleProcessorConfigurationTest):
        (StyleProcessorConfigurationTest._style_checker_configuration):
        (StyleProcessorConfigurationTest.test_init):
        (StyleProcessorConfigurationTest.test_write_style_error_emacs):
        (StyleProcessorConfigurationTest.test_write_style_error_vs7):
        (StyleProcessor_EndToEndTest.with):
        (StyleProcessor_EndToEndTest.test_init):
        (StyleProcessor_EndToEndTest.test_process):
        (StyleProcessor_CodeCoverageTest.setUp):
        * Scripts/webkitpy/style/error_handlers.py: Remove stderr_write usage and replace with logging module logger.
        (DefaultStyleErrorHandler.__call__):
        * Scripts/webkitpy/style/error_handlers_unittest.py: Update test to the modification.
        There is an "ERROR" prefix in log messiges from now.
        (DefaultStyleErrorHandlerTest):
        (DefaultStyleErrorHandlerTest.setUp):
        (DefaultStyleErrorHandlerTest._mock_increment_error_count):
        (DefaultStyleErrorHandlerTest._style_checker_configuration):
        (DefaultStyleErrorHandlerTest._check_initialized):
        (DefaultStyleErrorHandlerTest.test_non_reportable_error):
        (DefaultStyleErrorHandlerTest.test_max_reports_per_category):
        (DefaultStyleErrorHandlerTest.test_line_numbers):

2013-12-02  Brian J. Burg  <burg@cs.washington.edu>

        Add JavaScript style checker and teach checker.py about .js files
        https://bugs.webkit.org/show_bug.cgi?id=125049

        Reviewed by Joseph Pecoraro.

        Add a JavaScript file type, extension, and checker (JSChecker).
        Use TextChecker for JavaScript tests, libraries, website resources,
        etc. and use JSChecker for files within WebInspectorUI/UserInterface.

        Amended tests for TextChecker to reflect the rule above.

        * Scripts/webkitpy/style/checker.py:
        (_all_categories): Add categories defined by JSChecker.
        (FileType): Add file type for JS and re-number the enum.
        (CheckerDispatcher._file_type): Detect .js files as JavaScript.
        (CheckerDispatcher._create_checker):
        Create a JSChecker or TextChecker depending on the file's path.

        * Scripts/webkitpy/style/checker_unittest.py:
        (CheckerDispatcherDispatchTest.assert_checker_js): Added.
        (CheckerDispatcherDispatchTest.test_js_paths): Added.
        (CheckerDispatcherDispatchTest.test_text_paths): Add new test paths
        that end in .js but should be checked with TextChecker.
        * Scripts/webkitpy/style/checkers/js.py: Added.
        (JSChecker):
        (JSChecker.__init__):
        (JSChecker.check):
        * Scripts/webkitpy/style/checkers/js_unittest.py: Added.
        (JSTestCase):
        (JSTestCase.assertNoError):
        (JSTestCase.assertNoError.error_for_test):
        (JSTestCase.assertError):
        (JSTestCase.assertError.error_for_test):
        (JSTestCase.test_no_error):
        (JSTestCase.test_error):

2013-12-02  Mark Hahnenberg  <mhahnenberg@apple.com>

        run-jsc-stress-tests always copies the VM
        https://bugs.webkit.org/show_bug.cgi?id=125092

        Reviewed by Filip Pizlo.

        This can be slow, especially with full debug builds. It should just symlink the VM into the 
        bundle by default and do a full copy only when asked.

        * Scripts/run-jsc-stress-tests:

2013-12-02  Brent Fulgham  <bfulgham@apple.com>

        [Win] Port run-jsc-stress-tests
        https://bugs.webkit.org/show_bug.cgi?id=124801

        Reviewed by Filip Pizlo.

        * Scripts/run-jsc-stress-tests: Gracefully handle lack of sysctl
        command on Windows so that stress tests can run.

2013-12-02  Mark Hahnenberg  <mhahnenberg@apple.com>

        Build fix after r159955

        * Scripts/run-jsc-stress-tests:

2013-12-02  Mark Hahnenberg  <mhahnenberg@apple.com>

        run-jsc-stress-tests should be able to package its tests and move them places
        https://bugs.webkit.org/show_bug.cgi?id=124549

        Reviewed by Filip Pizlo.

        * Scripts/jsc-stress-test-helpers/check-mozilla-failure: Removed. Was just a ruby reimplementation
        of grep -i -q
        * Scripts/run-javascriptcore-tests: Pass through the --tarball flag.
        * Scripts/run-jsc-stress-tests: Changed to create a bundle of tests inside the results directory.
        We now also copy whatever VM was specified, along with its associated framework, into this directory.
        All of the generated scripts now are completely relative within the results directory. This allows
        run-jsc-stress-tests to execute a bundle from anywhere. Also added a --tarball flag which creates a
        tarball of the generated results directory. Also refactored several portions of the script into
        separate functions to make it easier to run them conditionally depending on which mode we're running in. 

2013-12-02  Andrzej Badowski  <a.badowski@samsung.com>

        [ATK] Support active state for listbox elements.
        https://bugs.webkit.org/show_bug.cgi?id=125009

        Reviewed by Chris Fleizach.

        Supplement WebKitTestRunner and DumpRenderTree to support isSelectedOptionActive.

        * DumpRenderTree/atk/AccessibilityUIElementAtk.cpp:
        (AccessibilityUIElement::isSelectedOptionActive):
        * WebKitTestRunner/InjectedBundle/AccessibilityUIElement.cpp:
        (WTR::AccessibilityUIElement::isSelectedOptionActive):
        * WebKitTestRunner/InjectedBundle/AccessibilityUIElement.h:
        * WebKitTestRunner/InjectedBundle/Bindings/AccessibilityUIElement.idl:
        * WebKitTestRunner/InjectedBundle/atk/AccessibilityUIElementAtk.cpp:
        (WTR::AccessibilityUIElement::isSelectedOptionActive):
        * WebKitTestRunner/InjectedBundle/mac/AccessibilityUIElementMac.mm:
        (WTR::AccessibilityUIElement::isSelectedOptionActive):

2013-12-02  Zan Dobersek  <zdobersek@igalia.com>

        Unreviewed GTK gardening.

        * Scripts/run-gtk-tests:
        (TestRunner): Skip two unit tests that are causing the subsequent test to crash.

2013-12-01  Dan Bernstein  <mitz@apple.com>

        [Mac] Transition MiniBrowser to the Cocoa API: policy delegate   
        https://bugs.webkit.org/show_bug.cgi?id=125046

        Reviewed by Sam Weinig.

        * MiniBrowser/mac/AppDelegate.m:
        (-[BrowserAppDelegate newWindow:]): Added WK_API_ENABLED guards.
        (-[BrowserAppDelegate openDocument:]): Ditto.
        * MiniBrowser/mac/WK2BrowserWindowController.h: Ditto. Also moved ivar declarations from the
        interface to the implementation.
        * MiniBrowser/mac/WK2BrowserWindowController.m:
        (-[WK2BrowserWindowController awakeFromNib]): Changed to set the policy delegate instead of
        the policy client.
        (-[WK2BrowserWindowController browsingContextController:decidePolicyForNavigationAction:decisionHandler:]):
        Moved policy client implementation into this delegate method.
        (-[WK2BrowserWindowController browsingContextController:decidePolicyForNewWindowAction:decisionHandler:]):
        Ditto.
        (-[WK2BrowserWindowController browsingContextController:decidePolicyForResponseAction:decisionHandler:]):
        Ditto.

2013-12-01  Dan Bernstein  <mitz@apple.com>

        [Mac] Remove the MiniBrowser injected bundle
        https://bugs.webkit.org/show_bug.cgi?id=125041

        Reviewed by Anders Carlsson.

        It had no ops!

        * MiniBrowser/Configurations/WebBundle.xcconfig: Removed.
        * MiniBrowser/MiniBrowser.xcodeproj/project.pbxproj:
        * MiniBrowser/mac/AppDelegate.m:
        (-[BrowserAppDelegate init]):
        * MiniBrowser/mac/WebBundle/Info.plist: Removed.
        * MiniBrowser/mac/WebBundle/WebBundleMain.m: Removed.

2013-11-29  Gergo Balogh  <geryxyz@inf.u-szeged.hu>

        check-webkit-style should check for extraneous newline between config.h and primary header.
        https://bugs.webkit.org/show_bug.cgi?id=124821

        Reviewed by Csaba Osztrogonác.

        * Scripts/webkitpy/style/checkers/cpp.py:
        (check_include_line):
        * Scripts/webkitpy/style/checkers/cpp_unittest.py:
        (OrderOfIncludesTest.test_check_line_break_after_own_header):
        (OrderOfIncludesTest):
        (OrderOfIncludesTest.test_check_line_break_before_own_header):

2013-11-29  Jozsef Berta  <jberta@inf.u-szeged.hu>

        test-webkit-scripts should show the failing tests and use an appropriate exit code
        https://bugs.webkit.org/show_bug.cgi?id=124840

        Reviewed by Ryosuke Niwa.

        A fixme in test-webkit-scripts asked that the script should display success or failiure
        and exit with a 0 or 1 value accordingly after all of the tests have completed.

        * Scripts/test-webkit-scripts:
        (ScriptsTester.run_test_script):
        The outcome of the currently run script is returned to the main as a boolean value. A boolean is returned,
        because at this point we don't need to pass on more information other than success or failiure.
        (ScriptsTester.main):
        The return values are now stored for each script and when all tests have completed successfully,
        the script indicates success and returns 0. Otherwise it will display the name(s) of the failing script(s) and return 1.

2013-11-29  Krzysztof Czech  <k.czech@samsung.com>

        [ATK] Added support for isAttributeSettable in AccessibilityUIElementAtk
        https://bugs.webkit.org/show_bug.cgi?id=124923

        Reviewed by Mario Sanchez Prada.

        Added missing implementation of isAttributeSettable. Using
        ATK_STATE_EDITABLE for checking whether attribute is settable.

        * DumpRenderTree/atk/AccessibilityUIElementAtk.cpp:
        (AccessibilityUIElement::isAttributeSettable):
        * WebKitTestRunner/InjectedBundle/atk/AccessibilityUIElementAtk.cpp:
        (WTR::AccessibilityUIElement::isAttributeSettable):

2013-11-28  Commit Queue  <commit-queue@webkit.org>

        Unreviewed, rolling out r159839.
        http://trac.webkit.org/changeset/159839
        https://bugs.webkit.org/show_bug.cgi?id=124974

        run-webkit-tests doesn't generate pretty diff (Requested by
        Ossy on #webkit).

        * Scripts/webkitpy/common/prettypatch.py:
        (PrettyPatch.__init__):
        (PrettyPatch.pretty_diff):
        * Scripts/webkitpy/layout_tests/controllers/test_result_writer.py:
        (TestResultWriter.create_text_diff_and_write_result):
        * Scripts/webkitpy/layout_tests/models/test_run_results.py:
        (summarize_results):
        * Scripts/webkitpy/port/base.py:
        (Port.__init__):
        (Port.pretty_patch_available):
        (Port.check_pretty_patch):
        (Port.variable):
        (Port.variable.pretty_patch_text):
        * Scripts/webkitpy/port/base_unittest.py:
        (PortTest.test_pretty_patch_os_error):
        (PortTest.test_pretty_patch_script_error):

2013-11-28  Antti Koivisto  <antti@apple.com>

        Remove feature: CSS variables
        https://bugs.webkit.org/show_bug.cgi?id=114119

        Reviewed by Andreas Kling.

        * Scripts/webkitperl/FeatureList.pm:

2013-11-28  Dániel Bátyai  <Batyai.Daniel@stud.u-szeged.hu>

        Move PrettyPatch related code to prettypatch.py
        https://bugs.webkit.org/show_bug.cgi?id=124937

        Reviewed by Ryosuke Niwa.

        This code seems to have a better place here than in Port, since PrettyPatch already knows
        pretty_patch_path, and this also unifies the usage of PrettyPatch

        * Scripts/webkitpy/common/prettypatch.py:
        (PrettyPatch.__init__):
        (PrettyPatch.pretty_diff):
        (PrettyPatch):
        (PrettyPatch.pretty_patch_available):
        (PrettyPatch.check_pretty_patch):
        (PrettyPatch.pretty_patch_text):
        * Scripts/webkitpy/layout_tests/controllers/test_result_writer.py:
        (TestResultWriter.create_text_diff_and_write_result):
        * Scripts/webkitpy/layout_tests/models/test_run_results.py:
        (summarize_results):
        * Scripts/webkitpy/port/base.py:
        (Port.__init__):
        (Port.wdiff_available):
        (Port.check_image_diff):
        (Port.wdiff_text):
        * Scripts/webkitpy/port/base_unittest.py:
        (PortTest.test_pretty_patch_os_error):
        (PortTest.test_pretty_patch_script_error):

2013-11-28  Dániel Bátyai  <Batyai.Daniel@stud.u-szeged.hu>

        Checkout should own the scm object in Host
        https://bugs.webkit.org/show_bug.cgi?id=124943

        Reviewed by Ryosuke Niwa.

        * Scripts/webkitpy/common/host.py:
        (Host.__init__):
        (Host.initialize_scm):
        (Host.scm):

2013-11-26  Filip Pizlo  <fpizlo@apple.com>

        Do bytecode validation as part of testing
        https://bugs.webkit.org/show_bug.cgi?id=124913

        Reviewed by Oliver Hunt.

        * Scripts/run-jsc-stress-tests:

2013-11-27  Andres Gomez  <agomez@igalia.com>

        [GTK] Tools/Scripts/update-webkitgtk-libs fails due to missing fontutils dependencies for building the "xserver" module
        https://bugs.webkit.org/show_bug.cgi?id=124940

        Reviewed by Martin Robinson.

        xserver-font-utils is needed for building gtk port dependencies
        with jhbuild.

        * gtk/install-dependencies: Added xserver-font-utils to jhbuild
        dependecies.

2013-11-27  Andres Gomez  <agomez@igalia.com>

        [GTK] Tools/Scripts/update-webkitgtk-libs unsorted and fails because of missing "git"
        https://bugs.webkit.org/show_bug.cgi?id=124938

        Reviewed by Philippe Normand.

        Added needed git dependency for building the gtk port with
        jhbuild. Also, the dependencies needed for building the gtk port
        are now sorted alphabetically.

        * gtk/install-dependencies: Added git as jhbuild dependency and
        sorted dependencies alphabetically.

2013-11-27  Jozsef Berta  <jberta@inf.u-szeged.hu>

        run_webkit_tests.py: error: no such option: --wincairo
        https://bugs.webkit.org/show_bug.cgi?id=124927

        Reviewed by Ryosuke Niwa.

        * BuildSlaveSupport/build.webkit.org-config/config.json: The run_webkit_tests.py doesn't supports
        the layout testing on wincairo, so it is turned off.

2013-11-26  Marcelo Lira  <marcelo.lira@openbossa.org>

        Nix upstreaming - Adding build files and supporting scripts
        https://bugs.webkit.org/show_bug.cgi?id=118367

        Reviewed by Ryosuke Niwa.

        * Scripts/build-webkit:
        * Scripts/run-nix-tests: Added.
        * Scripts/run-webkit-tests:
        * Scripts/update-webkit-libs-jhbuild:
        * Scripts/update-webkitnix-libs: Added.
        * Scripts/webkitdirs.pm:
        (determineArchitecture):
        (argumentsForConfiguration):
        (jscProductDir):
        (builtDylibPathForName):
        (determineIsNix):
        (isNix):
        (isAppleWebKit):
        (launcherPath):
        (launcherName):
        (checkRequiredSystemConfig):
        (copyInspectorFrontendFiles):
        (jhbuildWrapperPrefixIfNeeded):
        (buildCMakeProjectOrExit):
        (cmakeBasedPortName):
        * Scripts/webkitpy/common/config/ports.py:
        (DeprecatedPort.port):
        (EflWK2Port.build_webkit_command):
        (NixPort):
        (NixPort.build_webkit_command):
        * Scripts/webkitpy/port/factory.py:
        (platform_options):
        (PortFactory):
        * Scripts/webkitpy/port/nix.py: Added.
        (NixPort):
        (NixPort._wk2_port_name):
        (NixPort.determine_full_port_name):
        (NixPort.__init__):
        (NixPort._port_flag_for_scripts):
        (NixPort.setup_test_run):
        (NixPort.setup_environ_for_server):
        (NixPort.default_timeout_ms):
        (NixPort.clean_up_test_run):
        (NixPort._generate_all_test_configurations):
        (NixPort._path_to_driver):
        (NixPort._path_to_image_diff):
        (NixPort._image_diff_command):
        (NixPort._search_paths):
        (NixPort.show_results_html_file):
        (NixPort._port_specific_expectations_files):
        (NixPort.default_baseline_search_path):
        * Scripts/webkitpy/port/nix_unittest.py: Added.
        (NixPortTest):
        (NixPortTest._assert_search_path):
        (NixPortTest._assert_expectations_files):
        (NixPortTest.test_baseline_search_path):
        (NixPortTest.test_expectations_files):
        (NixPortTest.test_default_timeout_ms):
        * jhbuild/jhbuild-wrapper:
        (determine_platform):
        * nix/common.py: Added.
        (script_path):
        (top_level_path):
        * nix/jhbuild.modules: Added.
        * nix/jhbuildrc: Added.

2013-11-26  Ryosuke Niwa  <rniwa@webkit.org>

        Record subtest values in Dromaeo tests
        https://bugs.webkit.org/show_bug.cgi?id=124498

        Reviewed by Andreas Kling.

        Supported parsing subtest results.

        * Scripts/webkitpy/performance_tests/perftest.py: Replaced _metrics with an ordered list of subtests, each of
        which contains a dictionary with its name and an ordered list of subtest's metrics.
        (PerfTest.__init__): Initialize _metrics as a list.
        (PerfTest.run): Go through each subtest and its metrics to create a list of TestMetrics.
        (PerfTest._run_with_driver):
        (PerfTest._ensure_metrics): Look for a subtest then a metric in _metrics.

        * Scripts/webkitpy/performance_tests/perftest_unittest.py:
        (TestPerfTest._assert_results_are_correct): Updated the assertions per changes to _metrics.
        (TestPerfTest.test_parse_output): Ditto.
        (TestPerfTest.test_parse_output_with_subtests): Added the metric and the unit on each subtest result as well as
        assertions to ensure subtest results are parsed properly.
        (TestReplayPerfTest.test_run_with_driver_accumulates_results): Updated the assertions per changes to _metrics.
        (TestReplayPerfTest.test_run_with_driver_accumulates_memory_results): Dittp.

        * Scripts/webkitpy/performance_tests/perftestsrunner.py:
        (_generate_results_dict): When the metric for a subtest is processed before that of the main test, the url is
        incorrectly suffixed with '/'. Fix this later by re-computing the url with TestPerfMetric.test_file_name when
        adding new results.

        * Scripts/webkitpy/performance_tests/perftestsrunner_integrationtest.py:
        (TestWithSubtestsData): Added.
        (TestDriver.run_test):
        (MainTest.test_run_test_with_subtests): Added.

2013-11-26  Ryosuke Niwa  <rniwa@webkit.org>

        Enable HTML template element on Windows ports
        https://bugs.webkit.org/show_bug.cgi?id=124758

        Reviewed by Andreas Kling.

        * Scripts/webkitperl/FeatureList.pm:

2013-11-26  Ryosuke Niwa  <rniwa@webkit.org>

        Remove replay performance tests as it's not actively maintained
        https://bugs.webkit.org/show_bug.cgi?id=124764

        Reviewed by Andreas Kling.

        Removed the feature.

        * Scripts/webkitpy/performance_tests/perftest.py:
        (SingleProcessPerfTest.__init__):
        (PerfTestFactory):
        * Scripts/webkitpy/performance_tests/perftest_unittest.py:
        * Scripts/webkitpy/performance_tests/perftestsrunner.py:
        (PerfTestsRunner._parse_args):
        (PerfTestsRunner._collect_tests):
        * Scripts/webkitpy/performance_tests/perftestsrunner_unittest.py:
        (MainTest.test_collect_tests_with_ignored_skipped_list):
        (MainTest.test_default_args):
        * Scripts/webkitpy/thirdparty/__init__.py:
        (AutoinstallImportHook.find_module):
        (AutoinstallImportHook._install_unittest2):
        * Scripts/webkitpy/thirdparty/__init___unittest.py:
        (ThirdpartyTest.test_imports):

2013-11-26  Filip Pizlo  <fpizlo@apple.com>

        Enable aggressive DFG validation in testing
        https://bugs.webkit.org/show_bug.cgi?id=124911

        Rubber stamped by Ryosuke Niwa.
        
        This enables validation testing in non-concurrent-JIT runs.

        * Scripts/run-jsc-stress-tests:

2013-11-26  Dániel Bátyai  <Batyai.Daniel@stud.u-szeged.hu>

        Moved methods which belong to Checkout into checkout.py
        https://bugs.webkit.org/show_bug.cgi?id=124889

        Reviewed by Ryosuke Niwa.

        * Scripts/webkitpy/common/checkout/checkout.py:
        (Checkout.scripts_directory):
        (Checkout):
        (Checkout.script_path):
        (Checkout.commit_message_for_this_commit):
        (Checkout.apply_patch):
        * Scripts/webkitpy/common/checkout/checkout_unittest.py:
        (test_commit_message_for_this_commit):
        (CheckoutTest.test_apply_patch):
        * Scripts/webkitpy/common/checkout/scm/scm.py:
        (SCM.absolute_path):
        * Scripts/webkitpy/common/checkout/scm/scm_unittest.py:
        (SCMTest._setup_webkittools_scripts_symlink):
        * Scripts/webkitpy/common/checkout/scm/svn.py:
        (SVN.create_patch):

2013-11-25  Ryuan Choi  <ryuan.choi@samsung.com>

        [EFL] Use Config mode of find_package for EFL 1.8
        https://bugs.webkit.org/show_bug.cgi?id=124555

        Reviewed by Gyuyoung Kim.

        * MiniBrowser/efl/CMakeLists.txt:
        Added optional config mode and made version requirement optional.

2013-11-25  Andres Gomez  <agomez@igalia.com>

        [GTK] Search functionality in MiniBrowser provides feedback on search fail
        https://bugs.webkit.org/show_bug.cgi?id=122681

        Reviewed by Mario Sanchez Prada.

        When using the search functionality in MiniBrowser, if the search
        fails, the entry background color gets red to report the user
        about the failing condition. When the entry is cleaned or the
        search is again succesful the background turns back to its
        original color.

        * MiniBrowser/gtk/BrowserSearchBar.c:
        (setFailedStyleForEntry): Added.
        (doSearch): Sets the entry's background to its original style if
        there is no text to search.
        (findControllerFailedToFindTextCallback): Added.
        (findControllerFoundTextCallback): Added.
        (browser_search_bar_init): Creates and adds a new CSS provider to
        the text entry so we can change its style based on the success
        condition of the search.
        (browserSearchBarFinalize): Frees the new CSS provider.
        (browser_search_bar_new): Connects the two new handlers to the
        "failed-to-find-text" and "found-text" signals emitted by the
        WebKitFindController.

2013-11-25  Dan Bernstein  <mitz@apple.com>

        [Cocoa] Put most of the Cocoa API behind WK_API_ENABLED guards
        https://bugs.webkit.org/show_bug.cgi?id=124850

        Reviewed by Brady Eidson.

        Added #if WK_API_ENABLED guards around tests that use the Objective-C API.

        * TestWebKitAPI/Tests/CustomProtocolsSyncXHRTest.mm:
        * TestWebKitAPI/Tests/WebKit2ObjC/CustomProtocolsInvalidScheme.mm:
        * TestWebKitAPI/Tests/WebKit2ObjC/CustomProtocolsTest.mm:
        * TestWebKitAPI/Tests/WebKit2ObjC/PreventImageLoadWithAutoResizing.mm:
        * TestWebKitAPI/Tests/WebKit2ObjC/UserContentTest.mm:
        * TestWebKitAPI/Tests/WebKit2ObjC/WKBrowsingContextGroupTest.mm:
        * TestWebKitAPI/Tests/WebKit2ObjC/WKBrowsingContextLoadDelegateTest.mm:

2013-11-25  Commit Queue  <commit-queue@webkit.org>

        Unreviewed, rolling out r159752 and r159754.
        http://trac.webkit.org/changeset/159752
        http://trac.webkit.org/changeset/159754
        https://bugs.webkit.org/show_bug.cgi?id=124847

        Broke linux test bots. (Requested by mhahnenberg on #webkit).

        * Scripts/jsc-stress-test-helpers/check-mozilla-failure: Added.
        * Scripts/run-javascriptcore-tests:
        * Scripts/run-jsc-stress-tests:

2013-11-25  Mark Hahnenberg  <mhahnenberg@apple.com>

        Followup fix after r159752

        * Scripts/run-jsc-stress-tests: We need to handle Release builds too.

2013-11-25  Mark Hahnenberg  <mhahnenberg@apple.com>

        run-jsc-stress-tests should be able to package its tests and move them places
        https://bugs.webkit.org/show_bug.cgi?id=124549

        Reviewed by Filip Pizlo.

        * Scripts/jsc-stress-test-helpers/check-mozilla-failure: Removed. Was just a ruby reimplementation 
        of grep -i -q
        * Scripts/run-javascriptcore-tests: Pass through the --tarball flag.
        * Scripts/run-jsc-stress-tests: Changed to create a bundle of tests inside the results directory. 
        We now also copy whatever VM was specified, along with its associated framework, into this directory. 
        All of the generated scripts now are completely relative within the results directory. This allows 
        run-jsc-stress-tests to execute a bundle from anywhere. Also added a --tarball flag which creates a 
        tarball of the generated results directory. Also refactored several portions of the script into 
        separate functions to make it easier to run them conditionally depending on which mode we're running in.

2013-11-25  László Langó  <lango@inf.u-szeged.hu>

        EWS creates 0 byte sized log files
        https://bugs.webkit.org/show_bug.cgi?id=107606

        Reviewed by Ryosuke Niwa.

        There was a modification in r138264, that tried to make less log,
        because some of the messeges were duplicated. After this the EWS
        created the log file (with the same name as the bugID) but doesn't
        write anything into it, even if there were errors during the build.
        From now only creates the log file only if there is some error.

        * Scripts/webkitpy/tool/bot/queueengine.py:
        (QueueEngine.run): If the build and tests pass, there is no ScriptError raised,
        there is nothing to log. Open the log file only if a ScriptError was raised to
        avoid to make empty log files for bugs.
        (QueueEngine._open_work_log): Does not need to tee STDOUT to log file anymore,
        because of changes in r138264. Teeing is used for locally testing purposes and
        this feature is not used anymore.
        (QueueEngine._ensure_work_log_closed): Close the logfile. We don't use output
        teeing anymore. It is a necessary change because of QueueEngine._open_work_log
        change.
        * Scripts/webkitpy/tool/bot/queueengine_unittest.py:
        (LoggingDelegate): The order of the callbacks was changed by this patch.
        (QueueEngineTest.test_trivial): Won't create log file if the queue was terminated,
        so we have to update this test.
        (QueueEngineTest.test_unexpected_error): The order of the callbacks was changed by
        this patch.
        * Scripts/webkitpy/tool/commands/earlywarningsystem.py:
        (AbstractEarlyWarningSystem.review_patch): Raise again the captured ScriptError
        to be able to handle it in QueueEngine.run. Without this change, the existing
        exception handler never run (the process_work_item method never raise ScriptError)
        We can get the error message only from the ScriptError at this point.

2013-11-22  Dean Jackson  <dino@apple.com>

        Speculative Mountain Lion build fix.

        * MiniBrowser/mac/AppDelegate.m:
        (-[BrowserAppDelegate openDocument:]):

2013-11-22  Anders Carlsson  <andersca@apple.com>

        Fix Mountain Lion bug.

        * MiniBrowser/mac/AppDelegate.m:
        (-[BrowserAppDelegate openDocument:]):

2013-11-22  Anders Carlsson  <andersca@apple.com>

        MiniBrowser should use the blocks-based NSOpenPanel API
        https://bugs.webkit.org/show_bug.cgi?id=124786

        Reviewed by Simon Fraser.

        * MiniBrowser/mac/AppDelegate.m:
        (-[BrowserAppDelegate frontmostBrowserWindowController]):
        Account for windows that don't have a BrowserWindowController.

        (-[BrowserAppDelegate openDocument:]):

2013-11-22  Commit Queue  <commit-queue@webkit.org>

        Unreviewed, rolling out r159690.
        http://trac.webkit.org/changeset/159690
        https://bugs.webkit.org/show_bug.cgi?id=124782

        Broke webkitpy tests (Requested by ap on #webkit).

        * Scripts/webkitpy/tool/bot/queueengine.py:
        (QueueEngine.run):
        (QueueEngine._open_work_log):
        (QueueEngine._ensure_work_log_closed):
        * Scripts/webkitpy/tool/commands/earlywarningsystem.py:
        (AbstractEarlyWarningSystem.review_patch):

2013-11-22  László Langó  <lango@inf.u-szeged.hu>

        EWS creates 0 byte sized log files
        https://bugs.webkit.org/show_bug.cgi?id=107606

        Reviewed by Ryosuke Niwa.

        There was a modification in r138264, that tried to make less log, 
        because some of the messeges were duplicated. After this the EWS 
        created the log file (with the same name as the bugID) but doesn't 
        write anything into it, even if there were errors during the build. 
        From now only creates the log file only if there is some error.

        * Scripts/webkitpy/tool/bot/queueengine.py:
        (QueueEngine.run): If the build and tests pass, there is no ScriptError raised,
        there is nothing to log. Open the log file only if a ScriptError was raised to
        avoid to make empty log files for bugs.
        (QueueEngine._open_work_log): Does not need to tee STDOUT to log file anymore,
        because of changes in r138264. Teeing is used for locally testing purposes and
        this feature is not used anymore.
        (QueueEngine._ensure_work_log_closed): Close the logfile. We don't use output 
        teeing anymore. It is a necessary change because of QueueEngine._open_work_log
        change.
        * Scripts/webkitpy/tool/commands/earlywarningsystem.py:
        (AbstractEarlyWarningSystem.review_patch): Raise again the captured ScriptError
        to be able to handle it in QueueEngine.run. Without this change, the existing
        exception handler never run (the process_work_item method never raise ScriptError)
        We can get the error message only from the ScriptError at this point.

2013-11-21  Peter Molnar  <pmolnar.u-szeged@partner.samsung.com>

        Remove ENABLE_WORKERS
        https://bugs.webkit.org/show_bug.cgi?id=105784

        Reviewed by Darin Adler.

        * Scripts/webkitperl/FeatureList.pm:

2013-11-21  Darin Adler  <darin@apple.com>

        Try to fix buildbot Dashboard for people who have not hidden anything.

        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Scripts/BuildbotQueue.js:
        Add a null check for hidden platforms.

2013-11-21  Peter Szanka  <h868064@stud.u-szeged.hu>

        Remove chrome/chromium related things from webkitpy.
        https://bugs.webkit.org/show_bug.cgi?id=124493

        Reviewed by Darin Adler.

        * Scripts/webkitpy/layout_tests/run_webkit_tests_integrationtest.py:
        (PortTest.assert_mock_port_works):
        * Scripts/webkitpy/port/base.py:
        (Port.to.setup_environ_for_server):
        * Scripts/webkitpy/port/mac_unittest.py:
        (test_tests_for_other_platforms):
        * Scripts/webkitpy/port/mock_drt.py:
        (MockTestShell.output_for_test):
        * Scripts/webkitpy/tool/bot/irc_command.py:
        (Restart.execute):
        * Scripts/webkitpy/tool/bot/ircbot_unittest.py:
        (IRCBotTest.test_help):

2013-11-21  Dániel Bátyai  <Batyai.Daniel@stud.u-szeged.hu>

        In filereader.py, process_file() should throw instead of exiting directly when the file doesn't exist
        https://bugs.webkit.org/show_bug.cgi?id=124717

        Reviewed by Ryosuke Niwa.

        * Scripts/webkitpy/style/filereader.py:
        (TextFileReader.process_file):
        * Scripts/webkitpy/style/filereader_unittest.py:
        (TextFileReaderTest.test_process_file__does_not_exist):

2013-11-21  Mark Rowe  <mrowe@apple.com>

        <https://webkit.org/b/124702> Stop overriding VALID_ARCHS.

        All modern versions of Xcode set it appropriately for our needs.

        Reviewed by Alexey Proskuryakov.

        * MiniBrowser/Configurations/Base.xcconfig:
        * WebKitTestRunner/Configurations/Base.xcconfig:

2013-11-21  Nick Diego Yamane  <nick.yamane@openbossa.org>

        webkitdirs::checkForArgumentAndRemoveFromArrayRef() removed wrong element
        https://bugs.webkit.org/show_bug.cgi?id=124676

        Reviewed by Daniel Bates.

        checkForArgumentAndRemoveFromArrayRef functions was removing wrong
        elements when there were more then one occurrence of that argument.
        E.g: Checking for 'a' in {a, b, a, c}, the resulting array would be
        {b, a}, when it should be {b, c}.

        * Scripts/webkitdirs.pm:
        (checkForArgumentAndRemoveFromArrayRef): bugfix mentioned above.
        * Scripts/webkitperl/webkitdirs_unittest/checkForArgumentAndRemoveFromArrayRef.pl:
        Added; Unit tests for webkitdirs::checkForArgumentAndRemoveFromArrayRef function.

2013-11-21  Ryosuke Niwa  <rniwa@webkit.org>

        Update build-webkit after r159550.

        * Scripts/webkitperl/FeatureList.pm:

2013-11-21  Lucas Forschler  <lforschler@apple.com>

        Bring a new bot online, replacing the previous ones.
        
        Unreviewed.

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

2013-11-21  Dean Jackson  <dino@apple.com>

        Don't fetch hidden platforms on build.webkit.org/dashboard
        https://bugs.webkit.org/show_bug.cgi?id=124750

        Reviewed by Tim Horton.

        If a platform is hidden, don't fetch its data. If it
        becomes unhidden, try to fetch immediately (unless
        you've recently fetched).

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

2013-11-21  Commit Queue  <commit-queue@webkit.org>

        Unreviewed, rolling out r159633.
        http://trac.webkit.org/changeset/159633
        https://bugs.webkit.org/show_bug.cgi?id=124726

        it broke 10 webkitpy tests (Requested by dino_ on #webkit).

        * Scripts/webkitpy/style/checker.py:
        (check_webkit_style_configuration):
        (CheckerDispatcher.dispatch):
        (StyleProcessorConfiguration):
        (StyleProcessorConfiguration.__init__):
        (StyleProcessorConfiguration.write_style_error):

2013-11-21  László Langó  <lango@inf.u-szeged.hu>

        Remove the stderr_write attribute from StyleProcessorConfiguration.
        https://bugs.webkit.org/show_bug.cgi?id=124703

        Reviewed by Brent Fulgham.

        * Scripts/webkitpy/style/checker.py:
        (check_webkit_style_configuration):
        (CheckerDispatcher.dispatch):
        (StyleProcessorConfiguration):
        (StyleProcessorConfiguration.__init__):
        (StyleProcessorConfiguration.write_style_error):

2013-11-21  Ryosuke Niwa  <rniwa@webkit.org>

        PerfTestRunner._generate_results_dict shouldn't depend on test objects
        https://bugs.webkit.org/show_bug.cgi?id=124623

        Removed the dependency on test objects from results JSON generation.
        This allows single test.run to return metrics for multiple tests

        Reviewed by Antti Koivisto.

        * Scripts/webkitpy/performance_tests/perftest.py:
        (PerfTestMetric.__init__): Takes the test path and test name.
        (PerfTestMetric.path): Added.
        (PerfTestMetric.test_file_name): Added.
        (PerfTest.run): Accumulate PerfTestMetric objects instead of raw values.
        (PerfTest._ensure_metrics): Instantiate PerfTestMetric with the test path and test name.
        The path is going to have the names of subtests at the end once we support them.

        * Scripts/webkitpy/performance_tests/perftest_unittest.py:
        (TestPerfTestMetric.test_init_set_missing_unit): Specify the test path and test name.
        (TestPerfTestMetric.test_init_set_time_metric): Ditto.
        (TestPerfTestMetric.test_has_values): Ditto.
        (TestPerfTestMetric.test_append): Ditto.

        * Scripts/webkitpy/performance_tests/perftestsrunner.py:
        (_generate_results_dict): Only use metrics.
        (_run_tests_set): Accumulate metrics as supposed to (test, metrics) pairs.

2013-11-21  Manuel Rego Casasnovas  <rego@igalia.com>

        REGRESSION(r159599): webkitdirs.pm spits out warnings at lines 851 and 852
        https://bugs.webkit.org/show_bug.cgi?id=124697

        Reviewed by Ryosuke Niwa.

        * Scripts/webkitdirs.pm:
        (checkForArgumentAndRemoveFromARGVGettingValue): Fix check of array size
        before trying to access to the first element.

2013-11-21  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] Mark all deprecated symbols in GObject DOM bindings
        https://bugs.webkit.org/show_bug.cgi?id=124406

        Reviewed by Gustavo Noronha Silva.

        * Scripts/webkitpy/style/checker.py: Add special case for
        WebKitDOMDeprecated.
        * gtk/generate-gtkdoc:
        (get_webkit2_options): Use the prefix of the methods as namespace,
        since this is what gtkdoc expects to sort the index.
        (get_webkit1_options): Ditto.
        (get_webkitdom_options): Ditto.
        * gtk/generate-webkitdom-doc-files:
        (WebKitDOMDocGenerator): Add a global list of deleted objects.
        (WebKitDOMDocGenerator.write_deleted_classes): New method to write
        the documentation for classes that are deprecated because they
        have been removed.
        (WebKitDOMDocGeneratorDocs.write_deleted_classes): Add sections
        for deleted classes too.
        (WebKitDOMDocGeneratorSections.__init__): Build a list of
        deprecated symbols using the given symbols file.
        (WebKitDOMDocGeneratorSections._deleted_class): Returns the
        deleted class corresponding to the given function.
        (WebKitDOMDocGeneratorSections._deprecated_symbols): Builds a
        dictionary of deprecated symbols for every class.
        (WebKitDOMDocGeneratorSections.write_section): Add also the
        deprecated symbols in every section.
        (WebKitDOMDocGeneratorSections.write_deleted_classes): Add
        sections for deleted classes too.

2013-11-20  László Langó  <lango@inf.u-szeged.hu>

        check-webkit-style should support C++11 rvalue references.
        https://bugs.webkit.org/show_bug.cgi?id=123406

        Reviewed by Brent Fulgham.

        * Scripts/webkitpy/style/checkers/cpp.py:
        (check_style):
        * Scripts/webkitpy/style/checkers/cpp_unittest.py:
        (Cpp11StyleTest):
        (Cpp11StyleTest.test_rvaule_reference_at_end_of_line):

2013-11-20  Dean Jackson  <dino@apple.com>

        Allow settings to be shown/hidden on build.webkit.org/dashboard
        https://bugs.webkit.org/show_bug.cgi?id=124694

        Reviewed by Tim Horton.

        In preparation for more options/buttons, allow the page to
        show or hide all the interactive things using a little gear icon
        in the top left corner.

        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Scripts/Main.js:
        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Scripts/Settings.js:
        (Settings.prototype.toggleSettingsDisplay):
        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Styles/Main.css:
        (div.cellButton.hide):
        (div.cellButton.unhide):
        (.settings-visible div.cellButton.hide, .settings-visible div.cellButton.unhide):
        (.settings):
        (.settings:hover):
        (.settings-visible .settings):

2013-11-20  Dean Jackson  <dino@apple.com>

        No need to base64 SVG on build.webkit.org/dashboard
        https://bugs.webkit.org/show_bug.cgi?id=124687

        Reviewed by Tim Horton.

        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Styles/StatusLineView.css:
        (.status-line.good .bubble.pictogram):

2013-11-20  Dean Jackson  <dino@apple.com>

        Make links look more like links on build.webkit.org/dashboard
        https://bugs.webkit.org/show_bug.cgi?id=124686

        Reviewed by Tim Horton.

        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Styles/BuildbotQueueView.css:
        (.queue-view .queueLabel:hover):
        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Styles/StatusLineView.css:
        (.status-line.linked .label:hover):

2013-11-20  Nick Diego Yamane  <nick.yamane@openbossa.org>

        Modify webkitdirs to reuse checkForArgumentAndRemoveFromARGV
        https://bugs.webkit.org/show_bug.cgi?id=124581

        Reviewed by Daniel Bates.

        Some subroutines are replicating code from checkForArgument**
        functions instead of reusing them as is being done by all other functions.

        * Scripts/webkitdirs.pm:
        (determineXcodeSDK): Added.
        (determinePassedConfiguration): Added.
        (determinePassedArchitecture): Added.
        (checkForArgumentAndRemoveFromARGV): Added.
        (checkForArgumentAndRemoveFromARGVGettingValue): Added.

2013-11-20  Jozsef Berta  <jberta@inf.u-szeged.hu>

        Delete baseline optimizer
        https://bugs.webkit.org/show_bug.cgi?id=122333

        Reviewed by Ryosuke Niwa.

        * Scripts/webkitpy/common/checkout/baselineoptimizer.py: Removed.
        * Scripts/webkitpy/common/checkout/baselineoptimizer_unittest.py: Removed.
        * Scripts/webkitpy/tool/commands/rebaseline.py:
        (RebaselineTest.execute):
        (AbstractParallelRebaselineCommand._files_to_add):
        (AbstractParallelRebaselineCommand._rebaseline):
        * Scripts/webkitpy/tool/commands/rebaseline_unittest.py:
        (TestRebaselineJson.test_rebaseline_all):
        (TestRebaselineJson.test_rebaseline_debug):
        (TestRebaselineExpectations.disabled_test_overrides_are_included_correctly):

2013-11-20  Anders Carlsson  <andersca@apple.com>

        Enable PageLoadTest assertions again
        https://bugs.webkit.org/show_bug.cgi?id=124681

        Reviewed by Tim Horton.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        Actually install all-content-in-one-iframe.html, noticed while debugging this assertion.

2013-11-20  Mark Rowe  <mrowe@apple.com>

        Remove some obsolete logic from WebKit.app.

        Reviewed by Alexey Proskuryakov.

        * WebKitLauncher/WebKitNightlyEnabler.m:
        (poseAsWebKitApp): Remove a pre-10.6 codepath.
        (enableWebKitNightlyBehaviour): Remove a 10.4-specific codepath.

2013-11-20  Dániel Bátyai  <Batyai.Daniel@stud.u-szeged.hu>

        Moved stray urls from svn.py and statusserver.py into common.config.urls
        https://bugs.webkit.org/show_bug.cgi?id=124650

        Reviewed by Ryosuke Niwa.

        * Scripts/webkitpy/common/checkout/scm/svn.py:
        (SVNRepository):
        * Scripts/webkitpy/common/config/urls.py:
        * Scripts/webkitpy/common/net/statusserver.py:
        (StatusServer.__init__):
        * Scripts/webkitpy/performance_tests/perftestsrunner.py:
        (_generate_results_dict):

2013-11-20  Commit Queue  <commit-queue@webkit.org>

        Unreviewed, rolling out r159496.
        http://trac.webkit.org/changeset/159496
        https://bugs.webkit.org/show_bug.cgi?id=124641

        It caused warning and build break with cmake lower than 2.8.8
        (Requested by ryuan on #webkit).

        * MiniBrowser/efl/CMakeLists.txt:

2013-11-20  Gabor Rapcsanyi  <rgabor@webkit.org>

        [EFL] libseccomp-2.0.0 doesn't support ARM architecture
        https://bugs.webkit.org/show_bug.cgi?id=124412

        Reviewed by Gyuyoung Kim.

        Update libseccomp to a newer 2.1.0 version.

        * efl/jhbuild.modules:

2013-11-19  Mark Rowe  <mrowe@apple.com>

        <rdar://problem/15487072> Modernize WebKit.app's OS X version checking logic.

        Gestalt is deprecated on recent OS X versions so we should switch off it.

        Reviewed by Sam Weinig.

        * WebKitLauncher/main.m:
        (currentMacOSXVersion): Retrieve the version string from SystemVersion.plist.
        (currentMacOSXMajorVersion): Split the version string at the periods, retrieve the first
        two components, then join them back up.
        (main): Switch to using currentMacOSXMajorVersion to make it clearer which part of
        the version we care about.

2013-11-19  Commit Queue  <commit-queue@webkit.org>

        Unreviewed, rolling out r159538.
        http://trac.webkit.org/changeset/159538
        https://bugs.webkit.org/show_bug.cgi?id=124627

        it broke run-jsc-stress-tests (Requested by mhahnenberg on
        #webkit).

        * Scripts/jsc-stress-test-helpers/check-mozilla-failure: Added.
        * Scripts/run-javascriptcore-tests:
        * Scripts/run-jsc-stress-tests:

2013-11-19  Mark Hahnenberg  <mhahnenberg@apple.com>

        run-jsc-stress-tests should be able to package its tests and move them places
        https://bugs.webkit.org/show_bug.cgi?id=124549

        Reviewed by Geoff Garen and Filip Pizlo.

        * Scripts/jsc-stress-test-helpers/check-mozilla-failure: Removed. This script was just a ruby reimplementation 
        of grep -i -q 
        * Scripts/run-javascriptcore-tests: Pass through the --make-bundle flag.
        * Scripts/run-jsc-stress-tests: Added the new concept of a "bundle", which is a collection of all tests and any
        other files that those tests require to run in any environment along with a fixed root directory into which these
        files and their expected directory structure are cloned. The default Bundle class is basically 
        a no-op so that it functions like run-jsc-stress-tests prior to this patch. MovableBundle is a Bundle that knows 
        how to translate local paths to bundle paths and does all the work of moving each test file into the right place 
        inside the .tests directory. After all the test files have been created in jsc-stress-results MovableBundle 
        creates a tarball of the entire directory for easy relocation. The --make-bundle flag causes run-jsc-stress-tests 
        to use MovableBundle instead of just Bundle. 

2013-11-19  Dan Bernstein  <mitz@apple.com>

        <rdar://problem/15139479> Reenable the JSC Objective-C API tests on Mountain Lion once the bots are running Xcode 5

        Rubber-stamped by Mark Rowe.

        Reverted r156840.

        * TestWebKitAPI/Tests/mac/WebViewDidCreateJavaScriptContext.mm:

2013-11-19  Ryosuke Niwa  <rniwa@webkit.org>

        Yet another build fix. Just allow any character.
        There are just too many special characters to be listed here.

        * Scripts/webkitpy/performance_tests/perftest.py:
        (PerfTest._lines_to_ignore_in_parser_result):
        * Scripts/webkitpy/performance_tests/perftest_unittest.py:
        (TestPerfTest.test_parse_output_with_subtests)

2013-11-19  Ryosuke Niwa  <rniwa@webkit.org>

        Another build fix. Allow ':' in subtest names.

        * Scripts/webkitpy/performance_tests/perftest.py:
        (PerfTest._lines_to_ignore_in_parser_result):
        * Scripts/webkitpy/performance_tests/perftest_unittest.py:
        (TestPerfTest.test_parse_output_with_subtests)

2013-11-19  Ryuan Choi  <ryuan.choi@samsung.com>

        [EFL] Use Config mode of find_package for EFL 1.8
        https://bugs.webkit.org/show_bug.cgi?id=124555

        Reviewed by Gyuyoung Kim.

        * MiniBrowser/efl/CMakeLists.txt: Introduced a config mode to find elementary.

2013-11-19  Ryosuke Niwa  <rniwa@webkit.org>

        Build fix. Subtest names need to be more permissive.

        * Scripts/webkitpy/performance_tests/perftest.py:
        (PerfTest._lines_to_ignore_in_parser_result):
        * Scripts/webkitpy/performance_tests/perftest_unittest.py:
        (TestPerfTest.test_parse_output_with_subtests)

2013-11-18  Mark Rowe  <mrowe@apple.com>

        Use hw.activecpu for determining how many processes to spawn.

        It's documented as the preferred way to determine the number of threads
        or processes to create in a SMP aware application.

        Rubber-stamped by Tim Horton.

        * Scripts/copy-webkitlibraries-to-product-directory:
        * Scripts/run-jsc-stress-tests:
        * WebKitTestRunner/WebKitTestRunner.xcodeproj/project.pbxproj:

2013-11-18  Tim Horton  <timothy_horton@apple.com>

        build.webkit.org/dashboard builder headers should link to the builder page
        https://bugs.webkit.org/show_bug.cgi?id=124553

        Reviewed by Timothy Hatcher.

        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Scripts/BuildbotQueue.js:
        (BuildbotQueue.prototype.get overviewURL):
        Add overviewURL(), which returns the URL to the builder overview page, with the last 50 builds shown.

        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Scripts/BuildbotBuilderQueueView.js:
        (BuildbotBuilderQueueView.prototype.update.appendBuildArchitecture):
        (BuildbotBuilderQueueView.prototype.update):
        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Scripts/BuildbotTesterQueueView.js:
        (BuildbotTesterQueueView.prototype.update.appendBuilderQueueStatus):
        (BuildbotTesterQueueView.prototype.update.appendBuild):
        (BuildbotTesterQueueView.prototype.update):
        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Styles/BuildbotQueueView.css:
        (.queue-view .queueLabel):
        (.queue-view .queueLabel:not(:first-child)):
        Make the header a link instead of a label, and wire it up to overviewURL.

2013-11-18  Samuel White  <samuel_white@apple.com>

        AX: Add ability to fetch only visible table rows.
        https://bugs.webkit.org/show_bug.cgi?id=124430

        Reviewed by Chris Fleizach.

        Adding method to fetch array of AccessibilityUIElements to help with test brevity and test breakage. Specifically, we
        have a good deal of churn any time we add or update an element attribute. This happens because the number of tests
        that rely on a simple element description text dump to verify a single attribute is non trivial. So any time you
        change add an attribute, you have to update all the tests that are now implicitly verifying this new attribute. But
        as the test guidelines state, our tests should be more focused and specific about what they test.

        * DumpRenderTree/AccessibilityUIElement.cpp:
        (uiElementArrayAttributeValueCallback):
        (AccessibilityUIElement::uiElementArrayAttributeValue):
        (AccessibilityUIElement::getJSClass):
        * DumpRenderTree/AccessibilityUIElement.h:
        * DumpRenderTree/mac/AccessibilityUIElementMac.mm:
        (AccessibilityUIElement::uiElementArrayAttributeValue):
        * WebKitTestRunner/InjectedBundle/AccessibilityUIElement.cpp:
        (WTR::AccessibilityUIElement::uiElementArrayAttributeValue):
        * WebKitTestRunner/InjectedBundle/AccessibilityUIElement.h:
        * WebKitTestRunner/InjectedBundle/Bindings/AccessibilityUIElement.idl:
        * WebKitTestRunner/InjectedBundle/atk/AccessibilityUIElementAtk.cpp:
        (WTR::AccessibilityUIElement::uiElementArrayAttributeValue):
        * WebKitTestRunner/InjectedBundle/mac/AccessibilityUIElementMac.mm:
        (WTR::AccessibilityUIElement::getUIElementsWithAttribute):
        (WTR::AccessibilityUIElement::uiElementArrayAttributeValue):

2013-11-18  Ryosuke Niwa  <rniwa@webkit.org>

        Simplify and reformat the output of performance tests inside test runners
        https://bugs.webkit.org/show_bug.cgi?id=124496

        Reviewed by Antti Koivisto.

        As a preparation to support subtests for Dromaeo and DoYouEvenBench, simplify the output
        performance tests generate. Instead of spitting out noise in PerfTestRunner (runner.js)
        and ignoring it in PerfTest._filter_output (perftest.py), simply avoid generating it in
        the first place.

        Also modernize the output to adopt "metric" concept better and make it forward compatible
        with subtests.

        With this patch, performance tests written using runner.js only produces empty lines or
        lines of the following format inside test runners (DumpRenderTree and WebKitTestRunner):
        <subtest name> -> [<value 1>, <value 2>, ...]
        :<metric name> -> [<value 1>, <value 2>, ...]

        This greatly simplifies the parsing logic inside PerfTest._run_with_driver.

        * Scripts/webkitpy/performance_tests/perftest.py:
        (PerfTest): Removed a bunch of regular expressions that are no longer used.
        (PerfTest._run_with_driver): Just parse the values and description and treat everything
        else as errors.

        * Scripts/webkitpy/performance_tests/perftest_unittest.py:
        (TestPerfTest.test_parse_output): Removed the junk.
        (TestPerfTest._assert_failed_on_line): Extracted from test_parse_output_with_failing_line,
        which was removed in favor of the tests below.
        (TestPerfTest.test_parse_output_with_running_five_times): Added.
        (TestPerfTest.test_parse_output_with_detailed_info): Added.
        (TestPerfTest.test_parse_output_with_statistics): Added.
        (TestPerfTest.test_parse_output_with_description): Removed the junk.
        (TestPerfTest.test_parse_output_with_subtests): Ditto.
        (TestSingleProcessPerfTest.test_use_only_one_process): Ditto.

        * Scripts/webkitpy/performance_tests/perftestsrunner_integrationtest.py:
        (EventTargetWrapperTestData): Ditto.
        (SomeParserTestData): Ditto.
        (MemoryTestData): Ditto.

2013-11-18  Tim Horton  <timothy_horton@apple.com>

        Occasionally, hundreds of tests fail with small text diffs on Mavericks
        https://bugs.webkit.org/show_bug.cgi?id=124312

        Reviewed by Simon Fraser.

        * Scripts/webkitpy/layout_tests/controllers/manager.py:
        (Manager._set_up_run):
        * Scripts/webkitpy/port/base.py:
        (Port.to.reset_preferences):
        * Scripts/webkitpy/port/mac.py:
        (MacPort.reset_preferences):
        Delete DumpRenderTree and WebKitTestRunner defaults domains before running tests,
        returning some of the functionality of 158652 after 159364 removed it.

2013-11-18  Tim Horton  <timothy_horton@apple.com>

        Checkmarks are shifted down on iPhone at build.webkit.org/dashboard
        https://bugs.webkit.org/show_bug.cgi?id=122909

        Reviewed by Alexey Proskuryakov.

        Put the checkmark SVG in the CSS file as a data URI so it loads immediately.

        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Styles/StatusLineView.css:
        (.status-line .bubble):
        (.status-line.good .bubble.pictogram):

2013-11-18  Ryosuke Niwa  <rniwa@webkit.org>

        Remove _lines_to_ignore_in_stderr, which was only used in Chromium port
        https://bugs.webkit.org/show_bug.cgi?id=124499

        Reviewed by Csaba Osztrogonác.

        Removed the code. I didn't like this hack back when it was added, and I don't like it today.

        * Scripts/webkitpy/performance_tests/perftest.py:
        (PerfTest._should_ignore_line):
        * Scripts/webkitpy/performance_tests/perftest_unittest.py:
        (TestPerfTest): Removed the unit test.

2013-11-17  Filip Pizlo  <fpizlo@apple.com>

        Unreviewed, fix this script for older Rubies where Pathname doesn't coerce to String
        quite as easily.
        
        With help from Andy Trick.

        * Scripts/export-llvm-build:

2013-11-15  Filip Pizlo  <fpizlo@apple.com>

        FTL should have an explicit notion of bytecode liveness
        https://bugs.webkit.org/show_bug.cgi?id=124181

        Reviewed by Mark Hahnenberg.

        * Scripts/run-jsc-stress-tests:

2013-11-16  Dan Bernstein  <mitz@apple.com>

        No way for policy client to determine if a the response’s MIME type can be shown
        https://bugs.webkit.org/show_bug.cgi?id=124445

        Reviewed by Sam Weinig.

        * MiniBrowser/mac/WK2BrowserWindowController.m:
        (decidePolicyForResponse): Added canShowMIMEType parameter.
        (-[WK2BrowserWindowController awakeFromNib]): Updated for changes in the policy client.

        * TestWebKitAPI/Tests/WebKit2/PageLoadBasic.cpp:
        (TestWebKitAPI::decidePolicyForResponse): Added canShowMIMEType parameter.

        * WebKitTestRunner/TestController.cpp:
        (WTR::TestController::createWebViewWithOptions): Updated for changes in the policy client.
        (WTR::TestController::decidePolicyForResponse): Added canShowMIMEType parameter.
        * WebKitTestRunner/TestController.h:

2013-11-16  Tim Horton  <timothy_horton@apple.com>

        Checkmarks are shifted down on iPhone at build.webkit.org/dashboard
        https://bugs.webkit.org/show_bug.cgi?id=122909

        Reviewed by Timothy Hatcher.

        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Images/checkmark.svg: Added.
        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Scripts/StatusLineView.js:
        (StatusLineView.prototype.set repeatCount):
        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Styles/StatusLineView.css:
        (.status-line.good .bubble.pictogram):
        Use an SVG image instead of an obscure font for the checkboxes so they
        render identically on all platforms.

2013-11-15  Tim Horton  <timothy_horton@apple.com>

        Occasionally, hundreds of tests fail with small text diffs on Mavericks
        https://bugs.webkit.org/show_bug.cgi?id=124312

        Reviewed by Alexey Proskuryakov.

        Try reverting the part of r158652 that deleted all of the persistent
        defaults, in the thought that there might be some sort of race between
        processes causing some settings to be left in the wrong state.

        * DumpRenderTree/mac/DumpRenderTree.mm:
        (setDefaultsToConsistentValuesForTesting):
        * WebKitTestRunner/mac/main.mm:
        (setDefaultsToConsistentValuesForTesting):

2013-11-15  Dan Bernstein  <mitz@apple.com>

        Give the policy client the originating frame of a navigation action
        https://bugs.webkit.org/show_bug.cgi?id=124431

        Reviewed by Anders Carlsson.

        * MiniBrowser/mac/WK2BrowserWindowController.m:
        (decidePolicyForNavigationAction): Added originatingFrame parameter.
        (-[WK2BrowserWindowController awakeFromNib]): Updated for the new version of the policy
        client.

        * TestWebKitAPI/Tests/WebKit2/DownloadDecideDestinationCrash.cpp:
        (TestWebKitAPI::decidePolicyForNavigationAction): Added originatingFrame parameter.
        (TestWebKitAPI::setPagePolicyClient): Updated for the new version of the policy client.

        * TestWebKitAPI/Tests/WebKit2/PageLoadBasic.cpp:
        (TestWebKitAPI::decidePolicyForNavigationAction): Added originatingFrame parameter.
        (TestWebKitAPI::TEST): Updated for the new version of the policy client.

        * WebKitTestRunner/TestController.cpp:
        (WTR::TestController::createWebViewWithOptions): Updated for the new version of the policy
        client.
        (WTR::TestController::decidePolicyForNavigationAction): Added originatingFrame parameter.
        * WebKitTestRunner/TestController.h:

2013-11-15  Tim Horton  <timothy_horton@apple.com>

        build.webkit.org/dashboard should provide a way to focus on a subset of bots
        https://bugs.webkit.org/show_bug.cgi?id=122676

        Reviewed by Timothy Hatcher.

        Add a small 'hide' button next to every platform logo, and a 'show all'
        button which only appears when at least one platform is hidden. Hidden
        platforms persist using localStorage.

        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Scripts/Initialization.js:
        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Scripts/Main.js:
        (updateHiddenPlatforms):
        (documentReady.unhideButton):
        (documentReady.hideButton):
        (documentReady):
        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Scripts/Settings.js: Added.
        (Settings.prototype.setObject):
        (Settings.prototype.getObject):
        (Settings.prototype.addSettingListener):
        (Settings.prototype.fireSettingListener):
        (Settings.prototype.toggleHiddenPlatform):
        (Settings.prototype.clearHiddenPlatforms):
        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Styles/Main.css:
        (div.cellButton):
        (div.cellButton.hide):
        (.hidden):
        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/index.html:

2013-11-15  Jer Noble  <jer.noble@apple.com>

        MediaTime addition and subtraction operators have errors when the rhs is infinite.
        https://bugs.webkit.org/show_bug.cgi?id=124413

        Reviewed by Eric Carlson.

        Add a test for operator+ and operator- where an infinite value appears
        on the right-hand side:
        * TestWebKitAPI/Tests/WTF/MediaTime.cpp:
        (TestWebKitAPI::TEST):

        Add a LLDB summary provider for MediaTime which displays the rational
        time as well as the value in seconds:
        * lldb/lldb_webkit.py:
        (__lldb_init_module):
        (WTFMediaTime_SummaryProvider):
        (WTFHashTableProvider.has_children):
        (WTFMediaTimeProvider):
        (WTFMediaTimeProvider.__init__):
        (WTFMediaTimeProvider.timeValue):
        (WTFMediaTimeProvider.timeScale):
        (WTFMediaTimeProvider.isInvalid):
        (WTFMediaTimeProvider.isPositiveInfinity):
        (WTFMediaTimeProvider.isNegativeInfinity):
        (WTFMediaTimeProvider.isIndefinite):

2013-11-15  Tim Horton  <timothy_horton@apple.com>

        Make it possible to select revision numbers on build.webkit.org/dashboard
        https://bugs.webkit.org/show_bug.cgi?id=124400

        Reviewed by Timothy Hatcher.

        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Scripts/BuildbotQueueView.js:
        (BuildbotQueueView.prototype.revisionLinksForIteration):
        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Styles/Main.css:
        (.selectable):
        Add a child span to the trac link, which has '-webkit-user-select: all' on it.
        This way, a Dashboard user can highlight revision numbers for easy copying,
        and doesn't even have to be precise about the selection.

2013-11-15  Tim Horton  <timothy_horton@apple.com>

        Adjust and add retina versions of EFL and GTK build.webkit.org/dashboard icons
        https://bugs.webkit.org/show_bug.cgi?id=124399

        Reviewed by Gustavo Noronha Silva.

        Add new EFL and GTK icons (derived from Wikipedia's SVGs) to make new 1x and 2x icons,
        with the icons adjusted to have solid backgrounds, to not be squished, and to not
        intersect the ring, similar to the Mac icons.

        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Images/EFL.png:
        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Images/EFL@2x.png: Added.
        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Images/GTK.png:
        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Images/GTK@2x.png: Added.
        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Scripts/Main.js:
        (documentReady.hideButton):
        (documentReady):
        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Styles/Main.css:
        (table.queue-grid tr.platform.linux-gtk img.logo):
        (table.queue-grid tr.platform.linux-efl img.logo):

2013-11-15  Stephane Jadaud  <sjadaud@sii.fr>

        [GStreamer] Add support for Media Source API
        https://bugs.webkit.org/show_bug.cgi?id=99065

        Reviewed by Philippe Normand.

        * Scripts/webkitperl/FeatureList.pm:

2013-11-15  Xabier Rodriguez Calvar  <calvaris@igalia.com>

        [GTK] Bumping GStreamer version to 1.2.1 for the dependencies
        https://bugs.webkit.org/show_bug.cgi?id=124360

        Reviewed by Philippe Normand.

        * gtk/jhbuild.modules: Bumped GStreamer version up to 1.2.1

2013-11-14  Brent Fulgham  <bfulgham@apple.com>

        [Win] Improve support for command line builds of 64-bit JSC
        https://bugs.webkit.org/show_bug.cgi?id=124380

        Reviewed by David Kilzer.

        * Scripts/webkitdirs.pm:
        (argumentsForConfiguration): Recognize all flavors of Debug and Release (i.e., 'Debug',
        'Debug|Win32', 'Debug|x64') when passing arguments to child processes.
        (determinePassedConfiguration): Don't suffix configuration with "|Win32" or "|x64". That's
        what the "$configurationForVisualStudio" value is for.

2013-11-14  Oliver Hunt  <oliver@apple.com>

        Make CLoop easier to build, and make it work
        https://bugs.webkit.org/show_bug.cgi?id=124359

        Reviewed by Geoffrey Garen.

        Add --cloop support to forcibly enable to CLoop build

        * Scripts/build-jsc:
        * Scripts/build-webkit:

2013-11-14  Lucas Forschler  <lforschler@apple.com>

        Add webkit slave.

        Unreviewed.

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

2013-11-14  Tim Horton  <timothy_horton@apple.com>

        build.webkit.org/dashboard can’t open different results in two new tabs
        https://bugs.webkit.org/show_bug.cgi?id=124383

        Reviewed by Alexey Proskuryakov.

        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Scripts/BuildbotQueueView.js:
        (BuildbotQueueView.prototype.revisionLinksForIteration):
        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Scripts/StatusLineView.js:
        (StatusLineView.prototype._clicked):
        Use _blank (which is effectively open-in-new-tab, in Safari) instead of _new (which isn't a
        real pseudo-target and instead acts as a named target and will end up causing all link clicks
        to open in the same secondary tab).

2013-11-14  Anders Carlsson  <andersca@apple.com>

        Remove duplicate entry.

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

2013-11-14  Krzysztof Czech  <k.czech@samsung.com>

        [ATK] Change WKTR/DRT AX methods to use nullptr 
        https://bugs.webkit.org/show_bug.cgi?id=124352

        Reviewed by Anders Carlsson.

        Change WKTR/DRT accessibility related methods to use nullptr.

        * DumpRenderTree/atk/AccessibilityControllerAtk.cpp:
        (AccessibilityController::AccessibilityController):
        (AccessibilityController::elementAtPoint):
        (AccessibilityController::removeNotificationListener):
        (AccessibilityController::childElementById):
        * DumpRenderTree/atk/AccessibilityNotificationHandlerAtk.cpp:
        (AccessibilityNotificationHandler::AccessibilityNotificationHandler):
        * DumpRenderTree/atk/AccessibilityUIElementAtk.cpp:
        (AccessibilityUIElement::elementAtPoint):
        (AccessibilityUIElement::linkedUIElementAtIndex):
        (AccessibilityUIElement::getChildAtIndex):
        (AccessibilityUIElement::titleUIElement):
        (AccessibilityUIElement::parentElement):
        (AccessibilityUIElement::subrole):
        (AccessibilityUIElement::roleDescription):
        (AccessibilityUIElement::orientation):
        (AccessibilityUIElement::ariaDropEffects):
        (AccessibilityUIElement::uiElementForSearchPredicate):
        (AccessibilityUIElement::cellForColumnAndRow):
        (AccessibilityUIElement::disclosedRowAtIndex):
        (AccessibilityUIElement::ariaOwnsElementAtIndex):
        (AccessibilityUIElement::ariaFlowToElementAtIndex):
        (AccessibilityUIElement::selectedRowAtIndex):
        (AccessibilityUIElement::rowAtIndex):
        (AccessibilityUIElement::disclosedByRow):
        (AccessibilityUIElement::removeNotificationListener):
        (AccessibilityUIElement::classList):
        * WebKitTestRunner/InjectedBundle/atk/AccessibilityControllerAtk.cpp:
        (WTR::AccessibilityController::logAccessibilityEvents):
        (WTR::AccessibilityController::resetToConsistentState):
        (WTR::childElementById):
        (WTR::AccessibilityController::accessibleElementById):
        (WTR::AccessibilityController::removeNotificationListener):
        * WebKitTestRunner/InjectedBundle/atk/AccessibilityNotificationHandlerAtk.cpp:
        (WTR::AccessibilityNotificationHandler::setNotificationFunctionCallback):
        (WTR::AccessibilityNotificationHandler::removeAccessibilityNotificationHandler):
        * WebKitTestRunner/InjectedBundle/atk/AccessibilityUIElementAtk.cpp:
        (WTR::AccessibilityUIElement::elementAtPoint):
        (WTR::AccessibilityUIElement::childAtIndex):
        (WTR::AccessibilityUIElement::linkedUIElementAtIndex):
        (WTR::AccessibilityUIElement::ariaOwnsElementAtIndex):
        (WTR::AccessibilityUIElement::ariaFlowToElementAtIndex):
        (WTR::AccessibilityUIElement::disclosedRowAtIndex):
        (WTR::AccessibilityUIElement::rowAtIndex):
        (WTR::AccessibilityUIElement::selectedChildAtIndex):
        (WTR::AccessibilityUIElement::selectedRowAtIndex):
        (WTR::AccessibilityUIElement::titleUIElement):
        (WTR::AccessibilityUIElement::parentElement):
        (WTR::AccessibilityUIElement::disclosedByRow):
        (WTR::AccessibilityUIElement::uiElementAttributeValue):
        (WTR::AccessibilityUIElement::orientation):
        (WTR::AccessibilityUIElement::uiElementForSearchPredicate):
        (WTR::AccessibilityUIElement::cellForColumnAndRow):
        (WTR::AccessibilityUIElement::horizontalScrollbar):
        (WTR::AccessibilityUIElement::verticalScrollbar):
        (WTR::AccessibilityUIElement::removeNotificationListener):
        (WTR::AccessibilityUIElement::textMarkerRangeForElement):
        (WTR::AccessibilityUIElement::previousTextMarker):
        (WTR::AccessibilityUIElement::nextTextMarker):
        (WTR::AccessibilityUIElement::textMarkerRangeForMarkers):
        (WTR::AccessibilityUIElement::startTextMarkerForTextMarkerRange):
        (WTR::AccessibilityUIElement::endTextMarkerForTextMarkerRange):
        (WTR::AccessibilityUIElement::endTextMarkerForBounds):
        (WTR::AccessibilityUIElement::startTextMarkerForBounds):
        (WTR::AccessibilityUIElement::textMarkerForPoint):
        (WTR::AccessibilityUIElement::accessibilityElementForTextMarker):
        (WTR::AccessibilityUIElement::textMarkerForIndex):
        (WTR::AccessibilityUIElement::supportedActions):
        (WTR::AccessibilityUIElement::pathDescription):
        (WTR::AccessibilityUIElement::mathPostscriptsDescription):
        (WTR::AccessibilityUIElement::mathPrescriptsDescription):
        (WTR::AccessibilityUIElement::classList):

2013-11-14  Éva Balázsfalvi  <balazsfalvi.eva@stud.u-szeged.hu>

        run-perf-tests should warn loudly if you're using a Debug build.
        https://bugs.webkit.org/show_bug.cgi?id=105236

        Reviewed by Csaba Osztrogonác.

        * Scripts/webkitpy/performance_tests/perftestsrunner.py:
        (PerfTestsRunner.run):

2013-11-14  Éva Balázsfalvi  <balazsfalvi.eva@stud.u-szeged.hu>

        Fix Tools/Scripts/webkitpy/port/factory.py --help to display which configuration is default
        https://bugs.webkit.org/show_bug.cgi?id=124143

        Reviewed by Csaba Osztrogonác.

        * Scripts/webkitpy/port/factory.py:
        (configuration_options):

2013-11-13  Anders Carlsson  <andersca@apple.com>

        Add a Vector constructor that takes an std::initializer_list
        https://bugs.webkit.org/show_bug.cgi?id=124287

        Reviewed by Antti Koivisto.

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

2013-11-13  Mario Sanchez Prada  <mario.prada@samsung.com>

        Unreviewed GTK gardening. Updated rebaseline unit tests to include WK2 bot.

        * Scripts/webkitpy/tool/commands/rebaseline_unittest.py:
        (TestRebaselineTest.test_baseline_directory): Updated.

2013-11-13  Krzysztof Czech  <k.czech@samsung.com>

        [ATK] Support compilation of EFL/GTK without accessibility
        https://bugs.webkit.org/show_bug.cgi?id=122448

        Reviewed by Chris Fleizach.

        Added missing HAVE(ACCESSIBILITY) guards and stubs to ATK's related files,
        so that in case of turning off the HAVE_ACCESSIBILITY macro EFL/GTK would compile properly.

        * DumpRenderTree/AccessibilityController.h:
        * DumpRenderTree/AccessibilityUIElement.h:
        * DumpRenderTree/atk/AccessibilityCallbacks.h:
        * DumpRenderTree/atk/AccessibilityNotificationHandlerAtk.cpp:
        * DumpRenderTree/atk/AccessibilityNotificationHandlerAtk.h:
        * WebKitTestRunner/InjectedBundle/AccessibilityController.cpp:
        (WTR::AccessibilityController::rootElement):
        (WTR::AccessibilityController::focusedElement):
        * WebKitTestRunner/InjectedBundle/AccessibilityUIElement.cpp:
        * WebKitTestRunner/InjectedBundle/atk/AccessibilityControllerAtk.cpp:
        * WebKitTestRunner/InjectedBundle/atk/AccessibilityNotificationHandlerAtk.cpp:
        * WebKitTestRunner/InjectedBundle/atk/AccessibilityNotificationHandlerAtk.h:
        * WebKitTestRunner/InjectedBundle/atk/AccessibilityUIElementAtk.cpp:
        * WebKitTestRunner/PlatformEfl.cmake:

2013-11-12  Ryuan Choi  <ryuan.choi@samsung.com>

        [EFL] Added libxss-dev to install-dependencies
        https://bugs.webkit.org/show_bug.cgi?id=124254

        Reviewed by Gyuyoung Kim.

        libxss-dev is required to build EFL packages.
        see building part in http://www.enlightenment.org/p.php?p=contribute

        * efl/install-dependencies: Added libxss-dev to parameter of apt-get command.

2013-11-12  Tim Horton  <timothy_horton@apple.com>

        After http://trac.webkit.org/changeset/159109, update
        rebaseline_unittest to use the new GTK bot names.

        * Scripts/webkitpy/tool/commands/rebaseline_unittest.py:
        (TestRebaselineTest.test_baseline_directory):

2013-11-12  Denis Nomiyama  <d.nomiyama@samsung.com>

        [GTK] Update GTK builders in Tools/Scripts/webkitpy/port/builders.py
        https://bugs.webkit.org/show_bug.cgi?id=124144

        Reviewed by Gustavo Noronha Silva.

        Updated the list of GTK builders in Tools/Scripts/webkitpy/port/builders.py
        according to http://build.webkit.org/builders.

        * Scripts/webkitpy/port/builders.py:

2013-11-11  Samuel White  <samuel_white@apple.com>

        AX: support helpText() in DumpRenderTree
        https://bugs.webkit.org/show_bug.cgi?id=40194

        Reviewed by Chris Fleizach.

        Implemented stubbed helpText methods so we can move aria-help.html back to LayoutTests/accessibility.

        * DumpRenderTree/win/AccessibilityUIElementWin.cpp:
        (AccessibilityUIElement::helpText):

2013-11-11  Anders Carlsson  <andersca@apple.com>

        Remove block based APIs from the WebKit2 C API
        https://bugs.webkit.org/show_bug.cgi?id=124157

        Reviewed by Sam Weinig.

        Update for WK2 changes.

        * MiniBrowser/mac/WK2BrowserWindowController.m:
        (dumpSource):
        (-[WK2BrowserWindowController dumpSourceToConsole:]):

2013-11-11  Tamas Gergely  <gertom@inf.u-szeged.hu>

        The feeder queue will not feed patches older than one week.
        https://bugs.webkit.org/show_bug.cgi?id=107152

        Reviewed by Csaba Osztrogonác.

        The feeder queue will not feed patches older than one week.
        Unit test added to this scenario.

        * Scripts/webkitpy/common/net/bugzilla/bugzilla.py:
        (BugzillaQueries._parse_attachment_ids_request_query):
          Handle date parameter.
        (BugzillaQueries):
        (BugzillaQueries._fetch_attachment_ids_request_query):
          Propagate date.
        (BugzillaQueries.fetch_attachment_ids_from_review_queue):
          Propagate date.
        * Scripts/webkitpy/common/net/bugzilla/bugzilla_mock.py:
        (MockBugzillaQueries.fetch_attachment_ids_from_review_queue):
          Handle date.
        * Scripts/webkitpy/common/net/bugzilla/bugzilla_unittest.py:
        (test_request_page_parsing):
          Unit test added.
        * Scripts/webkitpy/tool/bot/feeders.py:
        (EWSFeeder.feed):
          Query patch ids with date parameter (now - 1 week).

2013-11-11  Tamas Gergely  <gertom@inf.u-szeged.hu>

        Do not shut down ImageDiff server after every diff during the tests.
        https://bugs.webkit.org/show_bug.cgi?id=124140

        Reviewed by Csaba Osztrogonác.

        There was a FIXME: There is no need to shut down the ImageDiff
        server after every diff. Shutdown is removed from that point.

        * Scripts/webkitpy/port/image_diff.py:
        (ImageDiffer._read):

2013-11-08  Matthew Hanson  <matthew_hanson@apple.com>

        Unreviewed. Added myself as a contributor.

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

2013-11-08  Krzysztof Czech  <k.czech@samsung.com>

        [GTK] accessibility/aria-link-supports-press.html is failing
        https://bugs.webkit.org/show_bug.cgi?id=98355

        Reviewed by Mario Sanchez Prada.

        Checking "jump" action for link elements. Action "jump" occurs when a link 
        element is pressed/clicked.

        * DumpRenderTree/atk/AccessibilityUIElementAtk.cpp:
        (AccessibilityUIElement::isPressActionSupported):
        * WebKitTestRunner/InjectedBundle/atk/AccessibilityUIElementAtk.cpp:
        (WTR::AccessibilityUIElement::isPressActionSupported):

2013-11-08  Przemyslaw Szymanski  <p.szymanski3@samsung.com>

        [JHBUILD] Jhbuild Makefile build bug workaround
        https://bugs.webkit.org/show_bug.cgi?id=123971

        Reviewed by Ryosuke Niwa.

        After Jhbuild repository is cloned (for instance when you use
        Tools/Scripts/update-webkitefl-libs) it is built from sources.
        If you have GREP_OPTIONS grep env variable set (for instance
        GREP_OPTIONS=-n) then it is jhbuild build error. Makefile.plain
        uses shell grep. For specific GREP_OPTIONS grep output will be
        different than expected one by Jhbuild and there is an error
        with Jhbuild build. Jhbuild will not be built and then WebKit
        source also will not be built. This patch is a workaround to this
        issue. It disables GREP_OPTIONS for Jhbuild build time.

        * jhbuild/jhbuild-wrapper:
        (install_jhbuild):

2013-11-08  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] Ignore deprecated macros when generating gtk-doc
        https://bugs.webkit.org/show_bug.cgi?id=123988

        Reviewed by Philippe Normand.

        * gtk/generate-gtkdoc:
        (get_common_options): Ignore also WEBKIT_DEPRECATED and
        WEBKIT_DEPRECATED_FOR decorators.

2013-11-08  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] Pass the library namespace to gtkdoc-mkdb
        https://bugs.webkit.org/show_bug.cgi?id=123900

        Reviewed by Martin Robinson.

        This fixes the generation of the index of symbols in the API
        documentation.

        * gtk/generate-gtkdoc:
        (get_webkit2_options): Define namespace as WebKit.
        (get_webkit1_options): Ditto.
        (get_webkitdom_options): Define namespace as WebKitDOM.
        * gtk/gtkdoc.py:
        (GTKDoc.__init__): Add namespace option.
        (GTKDoc._run_gtkdoc_mkdb): Pass namespace to mkdb if present.

2013-11-07  Chris Fleizach  <cfleizach@apple.com>

        Modify email order list for James Craig so his primary email is first.

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

2013-11-07  Nick Diego Yamane  <nick.yamane@openbossa.org>

        [Gtk] Disable LTO when building cairo
        https://bugs.webkit.org/show_bug.cgi?id=123954

        Reviewed by Martin Robinson.

        Cairo always uses LTO, when it detects compiler support.
        LTO is buggy in many/all versions of GCC and shouldn't be enabled by
        default. This patch disables LTO when building cairo library.
        - See: https://bugs.freedesktop.org/show_bug.cgi?id=60852

        With gcc 4.7.3, for example, the build fails with the following message:
        'lto1: fatal error: LTO_tags out of range: Range is 0 to 361, value is 15872'

        * gtk/jhbuild.modules:

2013-11-07  Samuel White  <samuel_white@apple.com>

        AX: DRT AccessibilityUIElement::isFocused methods should be finished.
        https://bugs.webkit.org/show_bug.cgi?id=123774

        Reviewed by Chris Fleizach.

        Implemented AccessibilityUIElement::isFocused methods and removed FIXMEs.

        * DumpRenderTree/mac/AccessibilityUIElementMac.mm:
        (AccessibilityUIElement::isFocused):
        * WebKitTestRunner/InjectedBundle/mac/AccessibilityUIElementMac.mm:
        (WTR::AccessibilityUIElement::isFocused):

2013-11-07  Dániel Bátyai  <Batyai.Daniel@stud.u-szeged.hu>

        Removed retrieveQMakespecVar function
        https://bugs.webkit.org/show_bug.cgi?id=123996

        Reviewed by Csaba Osztrogonác.

        * Scripts/webkitdirs.pm:

2013-11-07  Dániel Bátyai  <Batyai.Daniel@stud.u-szeged.hu>

        Removed QMake related filters
        https://bugs.webkit.org/show_bug.cgi?id=123992

        Reviewed by Csaba Osztrogonác.

        * Scripts/webkitpy/tool/commands/rebaseline_unittest.py:
        (TestRebaseline.test_rebaseline):
        (TestRebaselineExpectations.test_rebaseline_expectations):

2013-11-07  Nick Diego Yamane  <nick.yamane@openbossa.org>

        [Efl] Disable LTO when building cairo
        https://bugs.webkit.org/show_bug.cgi?id=123947

        Reviewed by Gyuyoung Kim.

        Cairo always uses LTO, when it detects compiler support.
        LTO is buggy in many/all versions of GCC and shouldn't be enabled by
        default. This patch disables LTO when building cairo library.
        - See: https://bugs.freedesktop.org/show_bug.cgi?id=60852

        With gcc 4.7.3, for example, the build fails with the following message:
        'lto1: fatal error: LTO_tags out of range: Range is 0 to 361, value is 15872'

        * efl/jhbuild.modules:

2013-11-07  Mario Sanchez Prada  <mario.prada@samsung.com>

        AX: [ATK] Video and audio elements are not properly exposed
        https://bugs.webkit.org/show_bug.cgi?id=123894

        Reviewed by Chris Fleizach.

        Update DRT and WKTR to handle the ATK_ROLE_EMBEDDED role.

        * DumpRenderTree/atk/AccessibilityUIElementAtk.cpp: Updated.
        * WebKitTestRunner/InjectedBundle/atk/AccessibilityUIElementAtk.cpp: Updated.

2013-11-07  Peter Molnar  <pmolnar.u-szeged@partner.samsung.com>

        Change git_commit_from_svn_revision() to work in a pure git checkout
        https://bugs.webkit.org/show_bug.cgi?id=111668

        Reviewed by Ryosuke Niwa.

        * Scripts/webkitpy/common/checkout/scm/git.py:
        (Git.git_commit_from_svn_revision):

2013-11-06  Jer Noble  <jer.noble@apple.com>

        Unreviewed webkitpy unit test fix; update baselines after r158765

        * Scripts/webkitpy/port/win_unittest.py:
        (WinPortTest.test_baseline_search_path):

2013-11-06  Jer Noble  <jer.noble@apple.com>

        [Win] run-webkit-tests on the win platform should fall back to mac-mountainlion, not mac-lion.
        https://bugs.webkit.org/show_bug.cgi?id=123905

        Reviewed by Brent Fulgham.

        Now that the mac-lion results have been removed, the win port should fall back to
        the mac-mountainlion results.

        * Scripts/webkitpy/port/win.py:
        (WinPort.default_baseline_search_path):

2013-11-06  Anders Carlsson  <andersca@apple.com>

        Fix a Mountain Lion test failure.

        NSURLRequest doesn't conform to NSSecureCoding on Mountain Lion, so don't try to test encoding it.

        * TestWebKitAPI/Tests/WebKit2ObjC/WKRemoteObjectRegistry.mm:
        (TestWebKitAPI::TEST):

2013-11-06  Krzysztof Czech  <k.czech@samsung.com>

        [ATK] Implement tables-related attributesOf*() functions for AccessibilityUIElement
        https://bugs.webkit.org/show_bug.cgi?id=118969

        Reviewed by Mario Sanchez Prada.

        Added missing implementation of attributesOfColumnHeaders, attributesOfRowHeaders, attributesOfVisibleCells.

        * DumpRenderTree/atk/AccessibilityUIElementAtk.cpp:
        (AccessibilityUIElement::attributesOfChildren):
        (AccessibilityUIElement::attributesOfColumnHeaders):
        (AccessibilityUIElement::attributesOfRowHeaders):
        (AccessibilityUIElement::attributesOfVisibleCells):
        * WebKitTestRunner/InjectedBundle/atk/AccessibilityUIElementAtk.cpp:
        (WTR::AccessibilityUIElement::attributesOfChildren):
        (WTR::AccessibilityUIElement::attributesOfColumnHeaders):
        (WTR::AccessibilityUIElement::attributesOfRowHeaders):
        (WTR::AccessibilityUIElement::attributesOfVisibleCells):

2013-11-05  Benjamin Poulain  <benjamin@webkit.org>

        [WK2] Add a WebKit2 API for Geolocation's highAccuracy
        https://bugs.webkit.org/show_bug.cgi?id=123786

        Reviewed by Darin Adler.

        Add basic testing for the Geolocation API (start, stop and change accuracy).

        * TestWebKitAPI/GNUmakefile.am:
        * TestWebKitAPI/PlatformEfl.cmake:
        * TestWebKitAPI/PlatformGTK.cmake:
        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WebKit2/Geolocation.cpp: Added.
        (TestWebKitAPI::operator<<):
        (TestWebKitAPI::GeolocationStateTracker::~GeolocationStateTracker):
        (TestWebKitAPI::GeolocationStateTracker::eventsChanged):
        (TestWebKitAPI::GeolocationStateTracker::startUpdatingCallback):
        (TestWebKitAPI::GeolocationStateTracker::stopUpdatingCallback):
        (TestWebKitAPI::GeolocationStateTracker::setEnableHighAccuracyCallback):
        (TestWebKitAPI::decidePolicyForGeolocationPermissionRequestCallBack):
        (TestWebKitAPI::setupGeolocationProvider):
        (TestWebKitAPI::setupView):
        (TestWebKitAPI::GeolocationBasicStateTracker::GeolocationBasicStateTracker):
        (TestWebKitAPI::GeolocationBasicStateTracker::eventsChanged):
        (TestWebKitAPI::GeolocationBasicWithHighAccuracyStateTracker::GeolocationBasicWithHighAccuracyStateTracker):
        (TestWebKitAPI::GeolocationBasicWithHighAccuracyStateTracker::eventsChanged):
        (TestWebKitAPI::GeolocationTransitionToHighAccuracyStateTracker::GeolocationTransitionToHighAccuracyStateTracker):
        (TestWebKitAPI::GeolocationTransitionToHighAccuracyStateTracker::eventsChanged):
        (TestWebKitAPI::GeolocationTransitionToLowAccuracyStateTracker::GeolocationTransitionToLowAccuracyStateTracker):
        (TestWebKitAPI::GeolocationTransitionToLowAccuracyStateTracker::eventsChanged):
        (TestWebKitAPI::didFinishLoadForFrame):
        * TestWebKitAPI/Tests/WebKit2/geolocationGetCurrentPosition.html: Added.
        * TestWebKitAPI/Tests/WebKit2/geolocationGetCurrentPositionWithHighAccuracy.html: Added.
        * TestWebKitAPI/Tests/WebKit2/geolocationWatchPosition.html: Added.
        * TestWebKitAPI/Tests/WebKit2/geolocationWatchPositionWithHighAccuracy.html: Added.
        * WebKitTestRunner/GeolocationProviderMock.cpp:
        (WTR::GeolocationProviderMock::GeolocationProviderMock):

2013-11-05  Anders Carlsson  <andersca@apple.com>

        Implement more NSCoder methods
        https://bugs.webkit.org/show_bug.cgi?id=123815

        Reviewed by Dan Bernstein.

        Add a method that takes an NSArray, an NSDictionary and an NSURLRequest.

        * TestWebKitAPI/Tests/WebKit2ObjC/WKRemoteObjectRegistry.mm:
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/mac/WKRemoteObjectRegistry_Bundle.mm:
        (-[BundleObject testMethodWithArray:dictionary:request:]):
        * TestWebKitAPI/Tests/mac/WKRemoteObjectRegistry_Shared.h:

2013-11-05  Filip Pizlo  <fpizlo@apple.com>

        Update ReducedFTL
        https://bugs.webkit.org/show_bug.cgi?id=123805

        Reviewed by Sam Weinig.
        
        - Make ReducedFTL build with debug info.
        
        - Give ReducedFTL a --loop mode that runs everything in a loop. Great for finding
          memory leaks and attaching a profiler.
        
        - Reorder the passes so that they match the FTL.
        
        - Make it possible to change the backend opt level and enable the fast isel.

        * ReducedFTL/ReducedFTL.c:
        (usage):
        (roundUpSize):
        (mmAllocateCodeSection):
        (main):
        * ReducedFTL/build.sh:

2013-11-05  Chris Fleizach  <cfleizach@apple.com>

        AX: switch DRT AX methods to use nullptr
        https://bugs.webkit.org/show_bug.cgi?id=123773

        Reviewed by Andreas Kling.

        Switch AX related code in DRT and WKTR to use nullptr.

        * DumpRenderTree/AccessibilityUIElement.cpp:
        (AccessibilityUIElement::startTextMarker):
        (AccessibilityUIElement::endTextMarker):
        * DumpRenderTree/mac/AccessibilityControllerMac.mm:
        (findAccessibleObjectById):
        (AccessibilityController::accessibleElementById):
        * DumpRenderTree/mac/AccessibilityUIElementMac.mm:
        (AccessibilityUIElement::getChildAtIndex):
        (AccessibilityUIElement::linkedUIElementAtIndex):
        (AccessibilityUIElement::ariaOwnsElementAtIndex):
        (AccessibilityUIElement::ariaFlowToElementAtIndex):
        (AccessibilityUIElement::disclosedRowAtIndex):
        (AccessibilityUIElement::selectedChildAtIndex):
        (AccessibilityUIElement::selectedRowAtIndex):
        (AccessibilityUIElement::rowAtIndex):
        (AccessibilityUIElement::titleUIElement):
        (AccessibilityUIElement::parentElement):
        (AccessibilityUIElement::disclosedByRow):
        (AccessibilityUIElement::stringAttributeValue):
        (AccessibilityUIElement::uiElementAttributeValue):
        (AccessibilityUIElement::role):
        (AccessibilityUIElement::subrole):
        (AccessibilityUIElement::roleDescription):
        (AccessibilityUIElement::title):
        (AccessibilityUIElement::description):
        (AccessibilityUIElement::orientation):
        (AccessibilityUIElement::stringValue):
        (AccessibilityUIElement::language):
        (AccessibilityUIElement::helpText):
        (AccessibilityUIElement::valueDescription):
        (AccessibilityUIElement::speak):
        (AccessibilityUIElement::classList):
        (AccessibilityUIElement::ariaDropEffects):
        (AccessibilityUIElement::rangeForLine):
        (AccessibilityUIElement::rangeForPosition):
        (AccessibilityUIElement::boundsForRange):
        (AccessibilityUIElement::stringForRange):
        (AccessibilityUIElement::attributedStringForRange):
        (AccessibilityUIElement::uiElementForSearchPredicate):
        (AccessibilityUIElement::attributesOfColumnHeaders):
        (AccessibilityUIElement::attributesOfRowHeaders):
        (AccessibilityUIElement::attributesOfColumns):
        (AccessibilityUIElement::attributesOfRows):
        (AccessibilityUIElement::attributesOfVisibleCells):
        (AccessibilityUIElement::attributesOfHeader):
        (AccessibilityUIElement::rowIndexRange):
        (AccessibilityUIElement::columnIndexRange):
        (AccessibilityUIElement::cellForColumnAndRow):
        (AccessibilityUIElement::horizontalScrollbar):
        (AccessibilityUIElement::verticalScrollbar):
        (AccessibilityUIElement::pathDescription):
        (AccessibilityUIElement::selectedTextRange):
        (AccessibilityUIElement::url):
        (AccessibilityUIElement::textMarkerRangeForElement):
        (AccessibilityUIElement::textMarkerForIndex):
        (AccessibilityUIElement::previousTextMarker):
        (AccessibilityUIElement::nextTextMarker):
        (AccessibilityUIElement::stringForTextMarkerRange):
        (AccessibilityUIElement::textMarkerRangeForMarkers):
        (AccessibilityUIElement::startTextMarkerForTextMarkerRange):
        (AccessibilityUIElement::endTextMarkerForTextMarkerRange):
        (AccessibilityUIElement::endTextMarkerForBounds):
        (AccessibilityUIElement::startTextMarkerForBounds):
        (AccessibilityUIElement::textMarkerForPoint):
        (AccessibilityUIElement::accessibilityElementForTextMarker):
        (AccessibilityUIElement::startTextMarker):
        (AccessibilityUIElement::endTextMarker):
        (AccessibilityUIElement::supportedActions):
        (AccessibilityUIElement::mathPostscriptsDescription):
        (AccessibilityUIElement::mathPrescriptsDescription):
        * WebKitTestRunner/InjectedBundle/AccessibilityController.cpp:
        (WTR::AccessibilityController::accessibleElementById):
        * WebKitTestRunner/InjectedBundle/atk/AccessibilityUIElementAtk.cpp:
        (WTR::AccessibilityUIElement::startTextMarker):
        (WTR::AccessibilityUIElement::endTextMarker):
        * WebKitTestRunner/InjectedBundle/mac/AccessibilityControllerMac.mm:
        (WTR::findAccessibleObjectById):
        (WTR::AccessibilityController::accessibleElementById):
        * WebKitTestRunner/InjectedBundle/mac/AccessibilityUIElementMac.mm:
        (WTR::AccessibilityUIElement::childAtIndex):
        (WTR::AccessibilityUIElement::linkedUIElementAtIndex):
        (WTR::AccessibilityUIElement::ariaOwnsElementAtIndex):
        (WTR::AccessibilityUIElement::ariaFlowToElementAtIndex):
        (WTR::AccessibilityUIElement::disclosedRowAtIndex):
        (WTR::AccessibilityUIElement::rowAtIndex):
        (WTR::AccessibilityUIElement::selectedChildAtIndex):
        (WTR::AccessibilityUIElement::selectedRowAtIndex):
        (WTR::AccessibilityUIElement::titleUIElement):
        (WTR::AccessibilityUIElement::parentElement):
        (WTR::AccessibilityUIElement::disclosedByRow):
        (WTR::AccessibilityUIElement::stringAttributeValue):
        (WTR::AccessibilityUIElement::uiElementAttributeValue):
        (WTR::AccessibilityUIElement::role):
        (WTR::AccessibilityUIElement::subrole):
        (WTR::AccessibilityUIElement::roleDescription):
        (WTR::AccessibilityUIElement::title):
        (WTR::AccessibilityUIElement::description):
        (WTR::AccessibilityUIElement::orientation):
        (WTR::AccessibilityUIElement::stringValue):
        (WTR::AccessibilityUIElement::language):
        (WTR::AccessibilityUIElement::helpText):
        (WTR::AccessibilityUIElement::valueDescription):
        (WTR::AccessibilityUIElement::classList):
        (WTR::AccessibilityUIElement::speak):
        (WTR::AccessibilityUIElement::ariaDropEffects):
        (WTR::AccessibilityUIElement::rangeForLine):
        (WTR::AccessibilityUIElement::rangeForPosition):
        (WTR::AccessibilityUIElement::boundsForRange):
        (WTR::AccessibilityUIElement::stringForRange):
        (WTR::AccessibilityUIElement::attributedStringForRange):
        (WTR::AccessibilityUIElement::uiElementForSearchPredicate):
        (WTR::AccessibilityUIElement::attributesOfColumnHeaders):
        (WTR::AccessibilityUIElement::attributesOfRowHeaders):
        (WTR::AccessibilityUIElement::attributesOfColumns):
        (WTR::AccessibilityUIElement::attributesOfRows):
        (WTR::AccessibilityUIElement::attributesOfVisibleCells):
        (WTR::AccessibilityUIElement::attributesOfHeader):
        (WTR::AccessibilityUIElement::rowIndexRange):
        (WTR::AccessibilityUIElement::columnIndexRange):
        (WTR::AccessibilityUIElement::cellForColumnAndRow):
        (WTR::AccessibilityUIElement::horizontalScrollbar):
        (WTR::AccessibilityUIElement::verticalScrollbar):
        (WTR::AccessibilityUIElement::selectedTextRange):
        (WTR::AccessibilityUIElement::url):
        (WTR::AccessibilityUIElement::textMarkerRangeForElement):
        (WTR::AccessibilityUIElement::previousTextMarker):
        (WTR::AccessibilityUIElement::nextTextMarker):
        (WTR::AccessibilityUIElement::stringForTextMarkerRange):
        (WTR::AccessibilityUIElement::textMarkerRangeForMarkers):
        (WTR::AccessibilityUIElement::startTextMarkerForTextMarkerRange):
        (WTR::AccessibilityUIElement::endTextMarkerForTextMarkerRange):
        (WTR::AccessibilityUIElement::endTextMarkerForBounds):
        (WTR::AccessibilityUIElement::startTextMarkerForBounds):
        (WTR::AccessibilityUIElement::textMarkerForPoint):
        (WTR::AccessibilityUIElement::accessibilityElementForTextMarker):
        (WTR::AccessibilityUIElement::textMarkerForIndex):
        (WTR::AccessibilityUIElement::startTextMarker):
        (WTR::AccessibilityUIElement::endTextMarker):
        (WTR::AccessibilityUIElement::mathPostscriptsDescription):
        (WTR::AccessibilityUIElement::mathPrescriptsDescription):
        (WTR::AccessibilityUIElement::pathDescription):
        (WTR::AccessibilityUIElement::supportedActions):

2013-11-05  László Langó  <laszlo.lango@frontendart.com>

        Remove leftover Qt related things from the flakiness_dashboard
        https://bugs.webkit.org/show_bug.cgi?id=123800

        Reviewed by Anders Carlsson.

        * TestResultServer/static-dashboards/flakiness_dashboard_unittests.js:
        (test):

2013-11-05  Robert Plociennik  <r.plociennik@samsung.com>

        [EFL] accessibility/svg-group-element-with-title.html is failing
        https://bugs.webkit.org/show_bug.cgi?id=114151

        Reviewed by Mario Sanchez Prada.

        atk_component_ref_accessible_at_point(), utilized in
        AccessibilityUIElement::elementAtPoint(), is expected to 'get a reference to the
        accessible child, if one exists, at the coordinate point specified' and not
        explicitly return self in case of lack of child elements. This contradicts with
        expected behavior of elementAtPoint(). Therefore, elementAtPoint() is
        changed to return self regardless of coordinates specified, provided no child
        element could be retrieved, effectively mimicing the behaviour of equivalent
        Mac implementation in accessibilityHitTest().

        * DumpRenderTree/atk/AccessibilityUIElementAtk.cpp:
        (AccessibilityUIElement::elementAtPoint): Fixed.
        * WebKitTestRunner/InjectedBundle/atk/AccessibilityUIElementAtk.cpp:
        (WTR::AccessibilityUIElement::elementAtPoint): Fixed.

2013-11-05  Gyuyoung Kim  <gyuyoung.kim@samsung.com>

        [CSS] Enable css-image-orientation on EFL and GTK ports.
        https://bugs.webkit.org/show_bug.cgi?id=123698

        Reviewed by Beth Dakin.

        r157909 added wrong early return for css-image-orientation. It causes about 20 regressions in layout test
        when enabling css-image-orientaiton. This fixes those wrong implementation as well as enables it on EFL
        and GTK ports by default.

        * Scripts/webkitperl/FeatureList.pm:

2013-11-04  Alexey Proskuryakov  <ap@apple.com>

        DumpRenderTree should reset its preferences file on launch
        https://bugs.webkit.org/show_bug.cgi?id=29751

        Reviewed by Dan Bernstein.

        Using NSArgumentDomain was not a good idea. While it works with NSUserDefaults
        and CFPreferencesCopyAppValue family of functions, it doesn't work with
        CFPreferencesCopyValue(..., kCFPreferencesCurrentApplication, ...).

        So, now we'll just set defaults in the current application.

        * DumpRenderTree/mac/DumpRenderTree.mm: (setDefaultsToConsistentValuesForTesting):
        - Delete the defaults.
        - Removed CFPreferencesSetAppValue calls, as -setValuesForKeysWithDictionary: does the same.
        - The comment about [NSUserDefaults standardUserDefaults] indirectly initializing NSApplication was incorrect.

        * WebKitTestRunner/mac/main.mm: (setDefaultsToConsistentValuesForTesting):
        Switched to -setValuesForKeysWithDictionary for consistency.

2013-11-04  Filip Pizlo  <fpizlo@apple.com>

        Running FTL tests shouldn't reduce coverage on DFG tests
        https://bugs.webkit.org/show_bug.cgi?id=123780

        Reviewed by Geoffrey Garen.

        * Scripts/run-jsc-stress-tests:

2013-11-04  Anders Carlsson  <andersca@apple.com>

        More WKRemoteObjectRegistry work
        https://bugs.webkit.org/show_bug.cgi?id=123754

        Reviewed by Dan Bernstein.

        * TestWebKitAPI/Tests/WebKit2ObjC/WKRemoteObjectRegistry.mm:
        (TestWebKitAPI::TEST):
        Use the correct bundle test name. Call Util::run.

        * TestWebKitAPI/Tests/mac/WKRemoteObjectRegistry_Bundle.mm:
        (-[BundleObject sayHello]):
        (-[BundleObject testMethodWithString:double:integer:]):
        Add BundleObject implementation. Register the bundle object with
        the remote object registry. Call _handleMessageWithName:body: on the incoming message.

2013-11-04  Krzysztof Czech  <k.czech@samsung.com>

        [EFL] Change ATK version to 2.10.0
        https://bugs.webkit.org/show_bug.cgi?id=123727

        Reviewed by Mario Sanchez Prada.

        Provided new API to retrieve text at a given offset.

        * efl/jhbuild.modules:

2013-11-04  Robert Plociennik  <r.plociennik@samsung.com>

        [EFL] accessibility/textarea-line-for-index.html is failing
        https://bugs.webkit.org/show_bug.cgi?id=112015

        Reviewed by Mario Sanchez Prada.

        Provided implementation for AccessibilityUIElement::lineForIndex().

        * DumpRenderTree/atk/AccessibilityUIElementAtk.cpp:
        (AccessibilityUIElement::lineForIndex): Implemented.
        * WebKitTestRunner/InjectedBundle/atk/AccessibilityUIElementAtk.cpp:
        (WTR::AccessibilityUIElement::lineForIndex): Implemented.

2013-11-04  Krzysztof Czech  <k.czech@samsung.com>

        [EFL] accessibility/button-press-action.html
        https://bugs.webkit.org/show_bug.cgi?id=111993

        Reviewed by Mario Sanchez Prada.

        Provided an implementation for AccessibilityUIElement::isPressActionSupported.

        * DumpRenderTree/atk/AccessibilityUIElementAtk.cpp:
        (AccessibilityUIElement::isPressActionSupported):
        * WebKitTestRunner/InjectedBundle/atk/AccessibilityUIElementAtk.cpp:
        (WTR::AccessibilityUIElement::isPressActionSupported):

2013-11-03  Patrick Gansterer  <paroga@webkit.org>

        Add test for ListHashSet::removeLast()
        https://bugs.webkit.org/show_bug.cgi?id=121810

        Reviewed by Anders Carlsson.

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

2013-11-02  Filip Pizlo  <fpizlo@apple.com>

        LLVM assertion failures should funnel into WTF's crash handling
        https://bugs.webkit.org/show_bug.cgi?id=123682

        Reviewed by Geoffrey Garen.
        
        Need to disable LLVM's crash overrides so that we can do our own crash overrides.

        * Scripts/configure-llvm:

2013-11-01  Andy Estes  <aestes@apple.com>

        Teach check-for-webkit-framework-include-consistency to ignore stale iOS Private headers that might exist in build directories due to r158443
        https://bugs.webkit.org/show_bug.cgi?id=123636

        Reviewed by Andreas Kling.

        * Scripts/check-for-webkit-framework-include-consistency:

2013-11-01  Anders Carlsson  <andersca@apple.com>

        Begin work on encoding argument types
        https://bugs.webkit.org/show_bug.cgi?id=123631

        Reviewed by Dan Bernstein.

        Add another test method.

        * TestWebKitAPI/Tests/WebKit2ObjC/WKRemoteObjectRegistry.mm:
        * TestWebKitAPI/Tests/mac/WKRemoteObjectRegistry_Shared.h:

2013-11-01  Afonso R. Costa Jr.  <afonso.costa@samsung.com>

        Expose setApplicationCacheOriginQuota via window.internals
        https://bugs.webkit.org/show_bug.cgi?id=87838

        Reviewed by Joseph Pecoraro.

        * DumpRenderTree/TestRunner.cpp: Move setApplicationCacheOriginQuota
        to window.internals
        (TestRunner::staticFunctions):
        * DumpRenderTree/TestRunner.h: Ditto.
        * DumpRenderTree/blackberry/TestRunnerBlackBerry.cpp: Remove setApplicationCacheOriginQuota.
        * DumpRenderTree/efl/TestRunnerEfl.cpp: Ditto.
        * DumpRenderTree/gtk/TestRunnerGtk.cpp: Ditto.
        * DumpRenderTree/mac/TestRunnerMac.mm: Ditto.
        * DumpRenderTree/win/TestRunnerWin.cpp: Ditto.
        * WebKitTestRunner/InjectedBundle/Bindings/TestRunner.idl: Ditto.
        * WebKitTestRunner/InjectedBundle/TestRunner.cpp: Ditto.
        * WebKitTestRunner/InjectedBundle/TestRunner.h: Ditto.

2013-10-31  Mark Lam  <mark.lam@apple.com>

        REGRESSION: Crashes in -[UIDelegate webView:frame:exceededDatabaseQuotaForSecurityOrigin:database:].
        https://bugs.webkit.org/show_bug.cgi?id=123383.

        Reviewed by Geoffrey Garen.

        Removed an inappropriate assertion in DumpRenderTree/mac/UIDelegate.mm and
        added 2 attributes (databaseDefaultQuota and databaseMaxQuota) to allow
        tests to set appropriate quota settings to exercise quota expansion tests
        when needed.

        * DumpRenderTree/TestRunner.cpp:
        (TestRunner::TestRunner):
        (getDatabaseDefaultQuotaCallback):
        (getDatabaseMaxQuotaCallback):
        (setDatabaseDefaultQuotaCallback):
        (setDatabaseMaxQuotaCallback):
        (TestRunner::staticValues):
        * DumpRenderTree/TestRunner.h:
        (TestRunner::databaseDefaultQuota):
        (TestRunner::setDatabaseDefaultQuota):
        (TestRunner::databaseMaxQuota):
        (TestRunner::setDatabaseMaxQuota):
        * DumpRenderTree/blackberry/DumpRenderTree.cpp:
        (BlackBerry::WebKit::DumpRenderTree::exceededDatabaseQuota):
        * DumpRenderTree/efl/DumpRenderTreeView.cpp:
        (onExceededDatabaseQuota):
        * DumpRenderTree/mac/UIDelegate.mm:
        (-[UIDelegate webView:frame:exceededDatabaseQuotaForSecurityOrigin:database:]):
        * DumpRenderTree/win/UIDelegate.cpp:
        (UIDelegate::exceededDatabaseQuota):
        * WebKitTestRunner/InjectedBundle/Bindings/TestRunner.idl:
        * WebKitTestRunner/InjectedBundle/InjectedBundlePage.cpp:
        (WTR::InjectedBundlePage::didExceedDatabaseQuota):
        * WebKitTestRunner/InjectedBundle/TestRunner.cpp:
        (WTR::TestRunner::TestRunner):
        * WebKitTestRunner/InjectedBundle/TestRunner.h:
        (WTR::TestRunner::databaseDefaultQuota):
        (WTR::TestRunner::setDatabaseDefaultQuota):
        (WTR::TestRunner::databaseMaxQuota):
        (WTR::TestRunner::setDatabaseMaxQuota):
        * WebKitTestRunner/TestController.cpp:
        (WTR::TestController::createOtherPage):
        (WTR::TestController::createWebViewWithOptions):

2013-10-31  Anders Carlsson  <andersca@apple.com>

        Add a WKRemoteObject class
        https://bugs.webkit.org/show_bug.cgi?id=123586

        Reviewed by Dan Bernstein.

        * TestWebKitAPI/Tests/WebKit2ObjC/WKRemoteObjectRegistry.mm:
        (TestWebKitAPI::TEST):
        Add a conformsToProtocol: test.

2013-10-30  Ryosuke Niwa  <rniwa@webkit.org>

        build.webkit.org should have a clean build button
        https://bugs.webkit.org/show_bug.cgi?id=123559

        Reviewed by Darin Adler.

        Add a new "clean" forced scheduler. When a build was created by this scheduler, CleanBuildIfScheduled
        step executes clean-build script that removes the WebKitBuild directory.

        Also added make-passwords-json.py which creates a fake passwords.json from config.json for testing purposes.

        * BuildSlaveSupport/build.webkit.org-config/make-passwords-json.py: Added.
        * BuildSlaveSupport/build.webkit.org-config/master.cfg:
        (CleanBuildIfScheduled): Added.
        (CleanBuildIfScheduled.start): Added. Don't do a clean build if if this build wasn't schecueld by
        the clean build scheduler.
        (DeleteStaleBuildFiles): Added.
        (DeleteStaleBuildFiles.start): Added. Don't delete stale build files if this build was scheduled by
        the clean build scheduler since everything in the WebKitBuild directory had already been removed.
        (Factory.__init__): Always add CleanBuildIfScheduled.  The step itself checks whether to run
        clean-build script or hide itself.
        (loadBuilderConfig): Added the new clean build scheduler. Also make ForceScheduler future proof; in newer
        versions of buildbot, builderNames needs to be a list of regular strings.
        * BuildSlaveSupport/clean-build: Added.

2013-10-31  Filip Pizlo  <fpizlo@apple.com>

        Remove CachedTranscendentalFunction because caching math functions is an ugly idea
        https://bugs.webkit.org/show_bug.cgi?id=123574

        Reviewed by Mark Hahnenberg.

        Make it easier to see that a test doesn't have an -expected file.

        * Scripts/run-jsc-stress-tests:

2013-10-31  Tamas Gergely  <gertom@inf.u-szeged.hu>

        Run tests as if they are expected to pass when --force is given.
        https://bugs.webkit.org/show_bug.cgi?id=112890

        Reviewed by Ryosuke Niwa.

        The --force switch of new-run-webkit-tests is now forces all tests to
        be run with 'PASS' as expected result.

        * Scripts/webkitpy/layout_tests/controllers/manager.py:
        (Manager.run):
        * Scripts/webkitpy/layout_tests/models/test_expectations.py:
        (TestExpectations.__init__):
        (TestExpectations._add_expectations):
        * Scripts/webkitpy/layout_tests/run_webkit_tests.py:
        (parse_args):
        (_set_up_derived_options):

2013-10-31  Geoffrey Garen  <ggaren@apple.com>

        Added Mark Lam as a reviewer.

        Unreviewed.

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

2013-10-30  Alexey Proskuryakov  <ap@apple.com>

        Teach the style checker about ENUM_CLASS
        https://bugs.webkit.org/show_bug.cgi?id=123528

        Reviewed by Andy Estes.

        * Scripts/webkitpy/style/checkers/cpp.py:
        (_EnumState.process_clean_line): Make content of an ENUM_CLASS declaration
        equivalent to enum content for checking.
        (check_braces): Allow semicolon at the end.

        * Scripts/webkitpy/style/checkers/cpp_unittest.py:
        (NoNonVirtualDestructorsTest.test_enum_casing):
        (NoNonVirtualDestructorsTest.test_enum_trailing_semicolon):
        (WebKitStyleTest.test_braces):
        Test it.

2013-10-30  Ryosuke Niwa  <rniwa@webkit.org>

        kill-old-processes should kill Web Socket script
        https://bugs.webkit.org/show_bug.cgi?id=123546

        Reviewed by Benjamin Poulain.

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

2013-10-30  Alexey Proskuryakov  <ap@apple.com>

        Set svn:ignore for .pyc files created for test-webkitpy.

        * Scripts/webkitpy/layout_tests/reftests: Added property svn:ignore.
        * Scripts/webkitpy/performance_tests: Added property svn:ignore.
        * Scripts/webkitpy/to_be_moved: Added property svn:ignore.
        * Scripts/webkitpy/w3c: Added property svn:ignore.

2013-10-30  Alexey Proskuryakov  <ap@apple.com>

        85 inspector tests asserting in DrawingAreaProxyImpl::updateAcceleratedCompositingMode()
        when there is a stale WebKitTestRunner preference
        https://bugs.webkit.org/show_bug.cgi?id=115115

        Reviewed by Darin Adler.

        Delete stale preferences on launch.

        * WebKitTestRunner/TestController.h:
        * WebKitTestRunner/TestController.cpp:
        (WTR::TestController::initialize): Now that we don't have preferences stored from
        the previous run, we need th reinstate them before creating a WKView. Not all preferences
        can be applied to an existing view retroactively.
        (WTR::TestController::resetPreferencesToConsistentValues): Split out of resetStateToConsistentValues,
        because there is no injected bundle yet when calling this function from initialize().

        * WebKitTestRunner/mac/main.mm: (setDefaultsToConsistentValuesForTesting): Delete
        the preferences.

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

2013-10-30  Anders Carlsson  <andersca@apple.com>

        Try to fix the 32-bit build.
        
        * TestWebKitAPI/Tests/WebKit2ObjC/WKRemoteObjectRegistry.mm:
        * TestWebKitAPI/Tests/mac/WKRemoteObjectRegistry_Bundle.mm:

2013-10-30  Anders Carlsson  <andersca@apple.com>

        Begin fleshing out an API test for WKRemoteObjectRegistry
        https://bugs.webkit.org/show_bug.cgi?id=123531

        Reviewed by Andreas Kling.

        Add a very simple test that doesn't really test anything for now.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WebKit2ObjC/WKRemoteObjectRegistry.mm: Added.
        * TestWebKitAPI/Tests/mac/WKRemoteObjectRegistry_Bundle.mm: Added.
        * TestWebKitAPI/Tests/mac/WKRemoteObjectRegistry_Shared.h: Added.

2013-10-30  Filip Pizlo  <fpizlo@apple.com>

        Remove unnecessary touch

        Rubber stamped by Mark Hahnenberg.

        * Scripts/run-jsc-stress-tests:

2013-10-30  Samuel White  <samuel_white@apple.com>

        AX: Add samuel_white@apple.com to accessibility watchlist cc rules
        https://bugs.webkit.org/show_bug.cgi?id=123515

        Reviewed by Chris Fleizach.

        Adding myself and jcraig@apple.com (per his request) to the accessibility watchlist. Also
        updating contributors.json with permission from bweinstein@apple.com to make this possible.

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

2013-10-30  Patrick Gansterer  <paroga@webkit.org>

        [WIN] Add executable entry points to DRT and WinLauncher
        https://bugs.webkit.org/show_bug.cgi?id=121837

        Reviewed by Brent Fulgham.

        This allows to compile and run the executables without DLLLauncher.

        * DumpRenderTree/win/DumpRenderTree.cpp:
        (main):
        (dllLauncherEntryPoint):
        * WinLauncher/WinLauncher.cpp:
        (wWinMain):
        (dllLauncherEntryPoint):

2013-10-30  Filip Pizlo  <fpizlo@apple.com>

        run-jsc-stress-tests should handle ".." in paths and "slow!" in cmd's
        https://bugs.webkit.org/show_bug.cgi?id=123521

        Reviewed by Mark Hahnenberg.

        * Scripts/run-jsc-stress-tests:

2013-10-30  Alexey Proskuryakov  <ap@apple.com>

        Mavericks: 128 tests are failing due to pixel differences
        https://bugs.webkit.org/show_bug.cgi?id=123488

        Reviewed by Simon Fraser.

        Apple font preferences cannot be fully reset after they've been read, so we
        need to set them using CFPreferences before initializing NSApplication.

        In theory, this should be an issue on WebKit2 as well, but somehow it doesn't
        appear to be. I guess we can figure out the reasons for this difference when/if
        any observable problems start to occur.

        * DumpRenderTree/mac/DumpRenderTree.mm:
        (setDefaultsToConsistentValuesForTesting): Only set defaults here, move other work
        to prepareConsistentTestingEnvironment().
        (main): Call setDefaultsToConsistentValuesForTesting before [NSApplication sharedApplication]
        (which is unnecessary anyway since NSUserDefaults will implicitly call it, but seems
        useful to keep in case we change out approach to defaults again).

2013-10-29  Andy Estes  <aestes@apple.com>

        Teach the style checker how to handle Objective-C categories and NS_ENUM
        https://bugs.webkit.org/show_bug.cgi?id=123482

        Reviewed by Dan Bernstein.

        * Scripts/webkitpy/style/checkers/cpp.py:
        (check_spacing_for_function_call): Allow a space before '(' in a line
        starting with @interface or @implementation, since this is defining an
        Objective-C category rather than a function.
        (check_braces): The opening brace of an NS_ENUM should not be on its
        own line.
        * Scripts/webkitpy/style/checkers/cpp_unittest.py: Added unit tests.

2013-10-30  Robert Plociennik  <r.plociennik@samsung.com>

        [EFL] accessibility/textarea-selected-text-range.html is failing
        https://bugs.webkit.org/show_bug.cgi?id=112016

        Reviewed by Mario Sanchez Prada.

        Provided implementation for AccessibilityUIElement::selectedTextRange() and
        AccessibilityUIElement::setSelectedTextRange().

        * DumpRenderTree/atk/AccessibilityUIElementAtk.cpp:
        (AccessibilityUIElement::selectedTextRange): Implemented.
        (AccessibilityUIElement::setSelectedTextRange): Implemented
        * WebKitTestRunner/InjectedBundle/atk/AccessibilityUIElementAtk.cpp:
        (WTR::AccessibilityUIElement::selectedTextRange): Implemented.
        (WTR::AccessibilityUIElement::setSelectedTextRange): Implemented.

2013-10-30  Robert Plociennik  <r.plociennik@samsung.com>

        [GTK] accessibility/svg-remote-element.html is failing
        https://bugs.webkit.org/show_bug.cgi?id=101185

        Reviewed by Chris Fleizach.

        Implemented missing methods by mimicing existing functionality in
        AccessibilityObject::clickPoint() using available ATK API.

        * DumpRenderTree/atk/AccessibilityUIElementAtk.cpp:
        (AccessibilityUIElement::clickPointX): Implemented.
        (AccessibilityUIElement::clickPointY): Implemented.
        * WebKitTestRunner/InjectedBundle/atk/AccessibilityUIElementAtk.cpp:
        (WTR::AccessibilityUIElement::clickPointX): Implemented.
        (WTR::AccessibilityUIElement::clickPointY): Implemented.

2013-10-30  Tamas Gergely  <gertom@inf.u-szeged.hu>

        Removed Windows platform configurations from WebKitTestRunner.
        https://bugs.webkit.org/show_bug.cgi?id=123152

        Reviewed by Csaba Osztrogonác.

        Removed Windows specific parts from the source files, Windows specific
        subdirectory (win) and Visual Studio property files from the WebKitTestRunner,
        as the platform is no longer supported by this tool.

        * WebKitTestRunner/Configurations/InjectedBundleCFLite.vsprops: Removed.
        * WebKitTestRunner/Configurations/InjectedBundleCommon.vsprops: Removed.
        * WebKitTestRunner/Configurations/InjectedBundleCoreFoundation.vsprops: Removed.
        * WebKitTestRunner/Configurations/WebKitTestRunnerCFLite.vsprops: Removed.
        * WebKitTestRunner/Configurations/WebKitTestRunnerCommon.vsprops: Removed.
        * WebKitTestRunner/Configurations/WebKitTestRunnerCoreFoundation.vsprops: Removed.
        * WebKitTestRunner/Configurations/WebKitTestRunnerCoreGraphics.vsprops: Removed.
        * WebKitTestRunner/InjectedBundle/AccessibilityController.cpp:
        (WTR::AccessibilityController::rootElement):
        (WTR::AccessibilityController::focusedElement):
        * WebKitTestRunner/InjectedBundle/AccessibilityController.h:
        * WebKitTestRunner/InjectedBundle/AccessibilityUIElement.h:
        * WebKitTestRunner/InjectedBundle/InjectedBundleMain.cpp:
        * WebKitTestRunner/InjectedBundle/TestRunner.h:
        * WebKitTestRunner/PlatformWebView.h:
        * WebKitTestRunner/TestController.cpp:
        (WTR::TestController::initialize):
        * WebKitTestRunner/TestInvocation.cpp:
        (WTR::createWKURL):
        * WebKitTestRunner/cg/TestInvocationCG.cpp:
        * WebKitTestRunner/config.h:
        * WebKitTestRunner/win/InjectedBundle.vcproj: Removed.
        * WebKitTestRunner/win/InjectedBundleDebug.vsprops: Removed.
        * WebKitTestRunner/win/InjectedBundleDebugAll.vsprops: Removed.
        * WebKitTestRunner/win/InjectedBundleDebugCairoCFLite.vsprops: Removed.
        * WebKitTestRunner/win/InjectedBundleGenerated.vcproj: Removed.
        * WebKitTestRunner/win/InjectedBundleGeneratedCommon.vsprops: Removed.
        * WebKitTestRunner/win/InjectedBundlePostBuild.cmd: Removed.
        * WebKitTestRunner/win/InjectedBundlePreBuild.cmd: Removed.
        * WebKitTestRunner/win/InjectedBundleProduction.vsprops: Removed.
        * WebKitTestRunner/win/InjectedBundleRelease.vsprops: Removed.
        * WebKitTestRunner/win/InjectedBundleReleaseCairoCFLite.vsprops: Removed.
        * WebKitTestRunner/win/PlatformWebViewWin.cpp: Removed.
        * WebKitTestRunner/win/TestControllerWin.cpp: Removed.
        * WebKitTestRunner/win/TestInvocationWin.cpp: Removed.
        * WebKitTestRunner/win/WebKitTestRunner.vcproj: Removed.
        * WebKitTestRunner/win/WebKitTestRunnerDebug.vsprops: Removed.
        * WebKitTestRunner/win/WebKitTestRunnerDebugAll.vsprops: Removed.
        * WebKitTestRunner/win/WebKitTestRunnerDebugCairoCFLite.vsprops: Removed.
        * WebKitTestRunner/win/WebKitTestRunnerLauncher.vcproj: Removed.
        * WebKitTestRunner/win/WebKitTestRunnerLauncherCommon.vsprops: Removed.
        * WebKitTestRunner/win/WebKitTestRunnerLauncherDebug.vsprops: Removed.
        * WebKitTestRunner/win/WebKitTestRunnerLauncherDebugAll.vsprops: Removed.
        * WebKitTestRunner/win/WebKitTestRunnerLauncherDebugCairoCFLite.vsprops: Removed.
        * WebKitTestRunner/win/WebKitTestRunnerLauncherProduction.vsprops: Removed.
        * WebKitTestRunner/win/WebKitTestRunnerLauncherRelease.vsprops: Removed.
        * WebKitTestRunner/win/WebKitTestRunnerLauncherReleaseCairoCFLite.vsprops: Removed.
        * WebKitTestRunner/win/WebKitTestRunnerPostBuild.cmd: Removed.
        * WebKitTestRunner/win/WebKitTestRunnerPreBuild.cmd: Removed.
        * WebKitTestRunner/win/WebKitTestRunnerProduction.vsprops: Removed.
        * WebKitTestRunner/win/WebKitTestRunnerRelease.vsprops: Removed.
        * WebKitTestRunner/win/WebKitTestRunnerReleaseCairoCFLite.vsprops: Removed.
        * WebKitTestRunner/win/build-generated-files.sh: Removed.
        * WebKitTestRunner/win/main.cpp: Removed.

2013-10-29  Alexey Proskuryakov  <ap@apple.com>

        Result of focus-option-control-on-page.html depends on system preferences
        https://bugs.webkit.org/show_bug.cgi?id=123304

        Reviewed by Simon Fraser.

        * DumpRenderTree/mac/DumpRenderTree.mm: (setDefaultsToConsistentValuesForTesting):
        Override a preference that WebKit reads to decide what Tab does, so that current
        user default doesn't affect tests.

        * WebKitTestRunner/mac/main.mm: (setDefaultsToConsistentValuesForTesting):
        Ditto.

2013-10-29  Filip Pizlo  <fpizlo@apple.com>

        It should be possible to specify extra tests to run-javascriptcore-tests
        https://bugs.webkit.org/show_bug.cgi?id=123495

        Reviewed by Oliver Hunt.
        
        This adds two ways to specify additional tests: the option --extra-tests=<blah>, and
        the environment variable EXTRA_JSC_TESTS.
        
        Those two values (the command-line option and the environment variable) are passed
        as extra arguments to run-jsc-stress-tests.
        
        To make this extra super useful, run-jsc-stress-tests now allows yaml configuration
        files to be recursive: if a "- collection:" line is found, the string is handled
        just as if it was a command-line argument. This allows you to use --extra-tests=file
        where file contains a bunch of "- collection:" lines, and this is equivalent to each
        of those lines being a command-line argument.

        * Scripts/run-javascriptcore-tests:
        * Scripts/run-jsc-stress-tests:

2013-10-29  Ryosuke Niwa  <rniwa@webkit.org>

        Add Mavericks builders to the old flakiness dashboard.

        * TestResultServer/static-dashboards/builders.jsonp:
        * TestResultServer/static-dashboards/flakiness_dashboard.js:

2013-10-29  Seokju Kwon  <seokju@webkit.org>

        Fix memory leak in Tools/DumpRenderTree/TestNetscapePlugIn/main.cpp
        https://bugs.webkit.org/show_bug.cgi?id=123478

        Reviewed by Anders Carlsson.

        * DumpRenderTree/TestNetscapePlugIn/main.cpp:
        (NPP_Destroy): Add a missing free() for 'obj->evaluateScriptOnMouseDownOrKeyDown'.

2013-10-29  Lucas Forschler  <lforschler@apple.com>

        Move the SEO bots from testers to archivers.
        
        Unreviewed.
        
        * BuildSlaveSupport/build.webkit.org-config/config.json:

2013-10-29  Hugo Parente Lima  <hugo.lima@openbossa.org>

        Adding Nix files in Source/Platform to trunk
        https://bugs.webkit.org/show_bug.cgi?id=118331

        Reviewed by Benjamin Poulain.

        Add a special rule for Nix API files located at Source/Platform/nix.

        * Scripts/webkitpy/style/checker.py:

 2013-10-29  Nadav Rotem  <nrotem@apple.com>
 
         Add myself as a comitter.
         https://bugs.webkit.org/show_bug.cgi?id=123455
 
         Reviewed by Anders Carlsson.
 
         * Scripts/webkitpy/common/config/contributors.json:
 
2013-10-29  Lucas Forschler  <lforschler@apple.com>

        Teach the WebKit2 testers to abort early by setting the shouldAbortEarly property to True.
        https://bugs.webkit.org/show_bug.cgi?id=123450

        Reviewed by Alexey Proskuryakov.

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

2013-10-29  Alexey Proskuryakov  <ap@apple.com>

        [Mac] Rationalize user defaults override code
        https://bugs.webkit.org/show_bug.cgi?id=123436

        Reviewed by Dan Bernstein.

        * DumpRenderTree/mac/DumpRenderTree.mm:
        (resetWebPreferencesToConsistentValues): Renamed from resetDefaultsToConsistentValues,
        because this function only resets WebPreferences now.
        (setDefaultsToConsistentValuesForTesting): Moved code for setting the defaults
        here, because tests never change them, and they only need to be set once, not
        before each test. Removed long obsolete workaround for HIToolbox preferences.
        Don't call resetWebPreferencesToConsistentValues, because it will be called before
        the first test anyway.
        (main): Don't set AppleMagnifiedMode here, moved that to setDefaultsToConsistentValuesForTesting.
        (resetWebViewToConsistentStateBeforeTesting): Moved TestRunner::setSerializeHTTPLoads
        and setlocale calls out of resetWebPreferencesToConsistentValues().
        Added AppleAquaAntiAliasingChanged notification that we had in WK2, because it's
        also needed in WK1.

        * WebKitTestRunner/InjectedBundle/mac/InjectedBundleMac.mm:
        (WTR::InjectedBundle::platformInitialize): Use literal syntax for defaults
        dictionary.

        * WebKitTestRunner/mac/main.mm:
        (setDefaultsToConsistentValuesForTesting): Factored out of main(), and changed to
        use NSArgumentDomain for everything.

2013-10-29  Philippe Normand  <pnormand@igalia.com>

        [GTK] enable media-stream in build-webkit
        https://bugs.webkit.org/show_bug.cgi?id=123144

        Reviewed by Martin Robinson.

        * Scripts/webkitperl/FeatureList.pm: Enable media-stream build
        for the GTK+ port.

2013-10-29  Gyuyoung Kim  <gyuyoung.kim@samsung.com>

        EFL 32 bit buildbot doesn't work on dashboard
        https://bugs.webkit.org/show_bug.cgi?id=123435

        Reviewed by Csaba Osztrogonác.

        32 bit buildbot doesn't work on dashboard because name is different from buildbot list.

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

2013-10-28  Simon Fraser  <simon.fraser@apple.com>

        Floating left the header broke other pages, and this CSS has no way to customize
        per-page.

        * BuildSlaveSupport/build.webkit.org-config/public_html/default.css:

2013-10-28  Simon Fraser  <simon.fraser@apple.com>

        Remove underlines on the bot names in the header.
        
        * BuildSlaveSupport/build.webkit.org-config/public_html/default.css:
        (td.LastBuild a):

2013-10-28  Gyuyoung Kim  <gyuyoung.kim@samsung.com>

        Add EFL release bots to the buildbot dashboard
        https://bugs.webkit.org/show_bug.cgi?id=123430

        Reviewed by Darin Adler.

        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Images/EFL.png: Added.
        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Scripts/WebKitBuildbot.js:
        (WebKitBuildbot): add 64 bits release wk2 and wk1 testers and 32 bits release builder.
        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Styles/Main.css:
        (table.queue-grid tr.platform.linux-efl img.logo): use the EFL logo in its dashboard line.

2013-10-28  Simon Fraser  <simon.fraser@apple.com>

        More waterfall tweaking.

        * BuildSlaveSupport/build.webkit.org-config/public_html/default.css:
        (body > .header):
        (td.LastBuild):
        (td.LastBuild a):
        (td.LastBuild,td.Activity a,td.Change a,td.Builder a):

2013-10-28  Simon Fraser  <simon.fraser@apple.com>

        More waterfall tweaking.

        * BuildSlaveSupport/build.webkit.org-config/public_html/default.css:
        (body.interface):
        (body > hr):
        (div.content h1):
        (body > .header):
        (td.Activity a,td.Change a,td.Builder a):
        (td.Builder):

2013-10-28  Simon Fraser  <simon.fraser@apple.com>

        Apply changes to default.css, revert buildbot.css which seems to be unused.

        * BuildSlaveSupport/build.webkit.org-config/public_html/buildbot.css:
        (body):
        (body, td):
        (a:link,a:visited,a:active):
        (td.Time):
        (td.Activity):
        (.exception, td.offline):
        * BuildSlaveSupport/build.webkit.org-config/public_html/default.css:
        (body.interface):
        (.auth):
        (td.LastBuild):
        (td.Time):
        (td.Activity):
        (.offline,td.offline,.retry):

2013-10-28  Simon Fraser  <simon.fraser@apple.com>

        Prettify the waterfall page, and make it a little more space-efficient.
        
        * BuildSlaveSupport/build.webkit.org-config/public_html/buildbot.css:
        (body, td):
        (body.interface):
        (.auth):
        (.header):
        (div.content h1):
        (a):
        (a:link,a:active):
        (a:link,a:visited,a:active):
        (td.LastBuild):
        (td.Time):
        (td.Activity):
        (.exception, td.offline, .retry):

2013-10-28  Simon Fraser  <simon.fraser@apple.com>

        Fix Lion readableName (spotted by Dan Bernstein).

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

2013-10-28  Simon Fraser  <simon.fraser@apple.com>

        Add tooltips to the platform icons in Dashboard
        https://bugs.webkit.org/show_bug.cgi?id=123429

        Reviewed by Alexey Proskuryakov.
        
        Add a human readable name to Buildbot.Platform entries, and use it to
        show a tooltip on the ring image.

        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Scripts/Buildbot.js:
        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Scripts/Main.js:
        (documentReady):

2013-10-28  Simon Fraser  <simon.fraser@apple.com>

        Allow explicit sort order for Dashboard platforms
        https://bugs.webkit.org/show_bug.cgi?id=123419

        Reviewed by Tim Hatcher.
        
        Assign a specific sort order to Dashboard platforms, rather than
        just using object property order.

        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Scripts/Buildbot.js:
        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Scripts/BuildbotQueue.js:
        (BuildbotQueue):
        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Scripts/Main.js:
        (documentReady):

2013-10-28  Simon Fraser  <simon.fraser@apple.com>

        Tidy up main http://build.webkit.org page
        https://bugs.webkit.org/show_bug.cgi?id=123413

        Reviewed by Alexey Proskuryakov.
        
        Break the list of links into sections. Add some font style.

        * BuildSlaveSupport/build.webkit.org-config/templates/root.html:

2013-10-28  Myles C. Maxfield  <mmaxfield@apple.com>

        Parsing support for -webkit-text-decoration-skip: ink
        https://bugs.webkit.org/show_bug.cgi?id=123358

        Reviewed by Dean Jackson.

        Adding ENABLE(CSS3_TEXT_DECORATION)

        * Scripts/webkitperl/FeatureList.pm:

2013-10-28  Lucas Forschler  <lforschler@apple.com>

        Add additional Apple Mavericks test bots.
        
        Unreviewed.
        
        * BuildSlaveSupport/build.webkit.org-config/config.json:

2013-10-28  Bastien Nocera <hadess@hadess.net>

        Name all the GLib timeout sources
        https://bugs.webkit.org/show_bug.cgi?id=123229

        Reviewed by Anders Carlsson.

        Give a name to GLib timeout sources, this is helpful when
        profiling WebKitGTK applications.

2013-10-28  Bastien Nocera <hadess@hadess.net>

        Replace 0 timeouts g_timeout_add() by g_idle_add()
        https://bugs.webkit.org/show_bug.cgi?id=123260

        Reviewed by Carlos Garcia Campos.

        A zero timeout should be equivalent to using g_idle_add_full(G_PRIORITY_DEFAULT, ...)
        without the nagging feeling that the wrong API was used.

        * DumpRenderTree/gtk/DumpRenderTree.cpp: Use g_idle_add() instead
        of 0-timer.
        (topLoadingFrameLoadFinished):
        * DumpRenderTree/gtk/EventSender.cpp: Ditto.
        (scheduleAsynchronousClickCallback):
        (scheduleAsynchronousKeyDownCallback):

2013-10-25  Anton Obzhirov  <a.obzhirov@samsung.com>

        [GTK] [WebKit2] CanHandleRequest API test fails
        https://bugs.webkit.org/show_bug.cgi?id=88453

        Reviewed by Martin Robinson.

        * Scripts/run-gtk-tests:
        (TestRunner):

2013-10-25  Ryosuke Niwa  <rniwa@webkit.org>

        Build fix after r157815. Don't resolve the path from webkit_base. Use the relative path as is.

        * Scripts/webkitpy/port/base.py:
        (Port.repository_paths):

2013-10-25  Jer Noble  <jer.noble@apple.com>

        [WTF] Add a multiplication operator (and a few others) to MediaTime
        https://bugs.webkit.org/show_bug.cgi?id=123137

        Reviewed by Eric Carlson.

        Add tests for new MediaTime operators.

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

2013-10-24  Mark Rowe  <mrowe@apple.com>

        Remove references to OS X 10.7 from Xcode configuration settings.

        Now that we're not building for OS X 10.7 they're no longer needed.

        Reviewed by Anders Carlsson.

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

2013-10-24  Mark Rowe  <mrowe@apple.com>

        <rdar://problem/15312643> Prepare for the mysterious future.

        Reviewed by David Kilzer.

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

2013-10-24  Daniel Bates  <dabates@apple.com>

        Crash in WebCore::NavigationScheduler::startTimer()
        https://bugs.webkit.org/show_bug.cgi?id=123288
        <rdar://problem/14055644>

        Reviewed by Alexey Proskuryakov.

        Add API test.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/mac/WillPerformClientRedirectToURLCrash.html: Added.
        * TestWebKitAPI/Tests/mac/WillPerformClientRedirectToURLCrash.mm: Added.

2013-10-24  Gyuyoung Kim  <gyuyoung.kim@samsung.com>

        [GTK] Disable css-image-orientation
        https://bugs.webkit.org/show_bug.cgi?id=123257

        Reviewed by Martin Robinson.

        CSS image orientation isn't stable yet. So, test regression happen since r157909.
        This feature should be enabled again after it is stable.

        * Scripts/webkitperl/FeatureList.pm:

2013-10-24  Peter Molnar  <pmolnar.u-szeged@partner.samsung.com>

        Fix argument passing for jhbuild.
        https://bugs.webkit.org/show_bug.cgi?id=123253

        Reviewed by Gustavo Noronha Silva.

        The update-webkit-libs-jhbuild previously didn't allowed
        extra arguments to be passed to jhbuild.

        * Scripts/update-webkit-libs-jhbuild:
        (runJhbuild):
        * Scripts/update-webkitefl-libs:

2013-10-24  Sanghyup Lee  <sh53.lee@samsung.com>

        [EFL] Compilation warning in DumpRenderTreeView.cpp on 64-Bit
        https://bugs.webkit.org/show_bug.cgi?id=123251

        Reviewed by Csaba Osztrogonác.

        Replace %llu by PRIu64 macro to print an uint64_t value and silent a
        compilation warning on 64-Bit.

        * DumpRenderTree/efl/DumpRenderTreeView.cpp:
        (onExceededDatabaseQuota):

2013-10-24  Ryuan Choi  <ryuan.choi@samsung.com>

        [EFL] Build break with latest EFL 1.8 libraries.
        https://bugs.webkit.org/show_bug.cgi?id=123245

        Reviewed by Gyuyoung Kim.

        After fixed build break on EFL 1.8 at r138326, EFL libraries are changed
        Eo typedef and splitted header files which contain version macro.

        * TestWebKitAPI/PlatformWebView.h: Changed Eo typedef.
        * WebKitTestRunner/InjectedBundle/TestRunner.h: Ditto.
        * WebKitTestRunner/PlatformWebView.h: Ditto.

2013-10-24  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GObject bindings] Make EventTarget interface introspectable
        https://bugs.webkit.org/show_bug.cgi?id=77835

        Reviewed by Gustavo Noronha Silva.

        * Scripts/webkitpy/style/checker.py: Add exceptions for custom
        GObject DOM bindings headers.

2013-10-23  Lucas Forschler  <lforschler@apple.com>

        Add two more mac bots to the Mavericks Test Queue.
        
        Unreviewed.
        
        * BuildSlaveSupport/build.webkit.org-config/config.json:

2013-10-23  Filip Pizlo  <fpizlo@apple.com>

        Have a way of dealing with slow tests in run-jsc-stress-tests
        https://bugs.webkit.org/show_bug.cgi?id=123221

        Reviewed by Mark Hahnenberg.
        
        If you add the slow! command to //@ then all subsequent plans are prepended to the run list
        rather than appended to it. This means that slow tests get queued up first and are less likely
        to block completion.

        * Scripts/run-jsc-stress-tests:

2013-10-23  Alex Christensen  <achristensen@webkit.org>

        Explicitly build Win32 or x64 configuration on Windows.
        https://bugs.webkit.org/show_bug.cgi?id=123206

        Reviewed by Brent Fulgham.

        * Scripts/webkitdirs.pm:
        (jscPath):
        (determineConfigurationForVisualStudio):
        (determinePassedConfiguration):
        Add |Win32 to the end of 32-bit Visual Studio build configurations.
        (safariPath):
        * Scripts/build-webkit:
        * Scripts/old-run-webkit-tests:
        * Scripts/run-api-tests:
        (testToolPath):
        * Scripts/run-javascriptcore-tests:
        (testapiPath):
        * Scripts/run-regexp-tests:
        (testapiPath):
        * Scripts/sunspider-compare-results:
        (pathToBuiltJSC):
        Use configuration instead of configurationForVisualStudio, which are now always different.

2013-10-23  Mark Lam  <mark.lam@apple.com>

        Re-instate ProposedDatabases needed by detailsForNameAndOrigin().
        https://bugs.webkit.org/show_bug.cgi?id=123131.

        Reviewed by Geoffrey Garen.

        Updated these files to allow database quotas to grow within a limit for
        testing purposes.

        * DumpRenderTree/blackberry/DumpRenderTree.cpp:
        (BlackBerry::WebKit::DumpRenderTree::exceededDatabaseQuota):
        * DumpRenderTree/efl/DumpRenderTreeView.cpp:
        (onExceededDatabaseQuota):
        * DumpRenderTree/mac/UIDelegate.mm:
        (-[UIDelegate webView:frame:exceededDatabaseQuotaForSecurityOrigin:database:]):
        * DumpRenderTree/win/UIDelegate.cpp:
        (UIDelegate::exceededDatabaseQuota):
        * WebKitTestRunner/InjectedBundle/InjectedBundlePage.cpp:
        (WTR::InjectedBundlePage::didExceedDatabaseQuota):
        * WebKitTestRunner/TestController.cpp:
        (WTR::exceededDatabaseQuota):

2013-10-23  Simon Fraser  <simon.fraser@apple.com>

        It's valid to have a build ID of 0.

        Reviewed by Tim Hatcher.

        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Scripts/BuildbotIteration.js:
        (BuildbotIteration):

2013-10-23  Simon Fraser  <simon.fraser@apple.com>

        Remove Lion bots from the Dashboard.

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

2013-10-23  Mario Sanchez Prada  <mario.prada@samsung.com>

        [GTK] Expose image links properly
        https://bugs.webkit.org/show_bug.cgi?id=84044

        Reviewed by Chris Fleizach.

        Expose the accessible URL if present, as yet another attribute
        for the AccessibilityUIElement wrapper. For coherence with what
        the Mac port does (and what you would expect as the output of
        the layout test), we strip the absolute URL path for relative
        references, if it's the case, leaving the base of the URL path
        out of the exposed string.

        * DumpRenderTree/atk/AccessibilityUIElementAtk.cpp:
        (attributesOfElement): Print the AXURL, if available.
        (AccessibilityUIElement::url): Expose the URL if present. That
        is, if the wrapped AtkObject implements AtkHyperlinkImpl.
        * WebKitTestRunner/InjectedBundle/atk/AccessibilityUIElementAtk.cpp:
        (attributesOfElement): Print the AXURL, if available.
        (WTR::AccessibilityUIElement::url): Expose the URL if present.
        That is, if the wrapped AtkObject implements AtkHyperlinkImpl.

2013-10-23  Simon Fraser  <simon.fraser@apple.com>

        Remove Lion bots.

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

2013-10-22  Simon Fraser  <simon.fraser@apple.com>

        Dashboard repaints constantly
        https://bugs.webkit.org/show_bug.cgi?id=122133

        Reviewed by Tim Horton.
        
        Pulsing shadows are really bad for battery life.

        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Styles/StatusLineView.css:
        (.status-line.bad .bubble):
        (.status-line.bad .message):

2013-10-22  Commit Queue  <commit-queue@webkit.org>

        Unreviewed, rolling out r157835.
        http://trac.webkit.org/changeset/157835
        https://bugs.webkit.org/show_bug.cgi?id=123192

        broke 32-bit builds (Requested by smfr on #webkit).

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

2013-10-22  Jer Noble  <jer.noble@apple.com>

        [WTF] Add a multiplication operator (and a few others) to MediaTime
        https://bugs.webkit.org/show_bug.cgi?id=123137

        Reviewed by Eric Carlson.

        Add tests for new MediaTime operators.

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

2013-10-22  Simon Fraser  <simon.fraser@apple.com>

        Educate webkitpy about Mavericks.

        Reviewed by Ryosuke Niwa.

        * Scripts/webkitpy/common/system/platforminfo.py:
        (PlatformInfo._determine_mac_version):
        * Scripts/webkitpy/common/system/platforminfo_unittest.py:
        (TestPlatformInfo.test_os_version):
        * Scripts/webkitpy/layout_tests/models/test_expectations.py:
        (TestExpectationParser):
        * Scripts/webkitpy/port/builders.py:
        * Scripts/webkitpy/port/mac.py:
        (MacPort):
        * Scripts/webkitpy/port/mac_unittest.py:
        (test_versions):
        (test_baseline_search_path):
        * Scripts/webkitpy/tool/commands/rebaseline_unittest.py:
        (TestRebaselineTest.test_baseline_directory):
        (TestRebaselineExpectations.test_rebaseline_expectations):

2013-10-22  Stephanie Lewis  <slewis@apple.com>

        Update the build trigger list for Mavericks.

        Unreviewed.

        * BuildSlaveSupport/build.webkit.org-config/wkbuild.py:
        (_should_file_trigger_build):

2013-10-22  Simon Fraser  <simon.fraser@apple.com>

        Add Mavericks bots to the dashboard.

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

2013-10-22  Samuel White  <samuel_white@apple.com>

        AX: Add paramAttrs to fetch start and end text markers in a given rect.
        https://bugs.webkit.org/show_bug.cgi?id=122164

        Reviewed by Chris Fleizach.

        Added accessibility element hooks to test endTextMarkerForBounds and startTextMarkerForBounds.

        * DumpRenderTree/AccessibilityUIElement.cpp:
        (endTextMarkerForBoundsCallback):
        (startTextMarkerForBoundsCallback):
        (AccessibilityUIElement::endTextMarkerForBounds):
        (AccessibilityUIElement::startTextMarkerForBounds):
        (AccessibilityUIElement::getJSClass):
        * DumpRenderTree/AccessibilityUIElement.h:
        * DumpRenderTree/mac/AccessibilityUIElementMac.mm:
        (AccessibilityUIElement::endTextMarkerForBounds):
        (AccessibilityUIElement::startTextMarkerForBounds):
        * WebKitTestRunner/InjectedBundle/AccessibilityUIElement.cpp:
        (WTR::AccessibilityUIElement::endTextMarkerForBounds):
        (WTR::AccessibilityUIElement::startTextMarkerForBounds):
        * WebKitTestRunner/InjectedBundle/AccessibilityUIElement.h:
        * WebKitTestRunner/InjectedBundle/Bindings/AccessibilityUIElement.idl:
        * WebKitTestRunner/InjectedBundle/atk/AccessibilityUIElementAtk.cpp:
        (WTR::AccessibilityUIElement::endTextMarkerForBounds):
        (WTR::AccessibilityUIElement::startTextMarkerForBounds):
        * WebKitTestRunner/InjectedBundle/mac/AccessibilityUIElementMac.mm:
        (WTR::AccessibilityUIElement::endTextMarkerForBounds):
        (WTR::AccessibilityUIElement::startTextMarkerForBounds):

2013-10-22  Ryosuke Niwa  <rniwa@webkit.org>

        There should be a way to specify additional repository paths in NRWT
        https://bugs.webkit.org/show_bug.cgi?id=123135

        Reviewed by Alexey Proskuryakov.

        Added --additional-repository-name and --additional-repository-path options to NRWT.
        These options allow us to submit addtional repository information, such as of Safari's
        to the new flakiness dashboard.

        * Scripts/webkitpy/layout_tests/run_webkit_tests.py:
        (parse_args):
        * Scripts/webkitpy/port/base.py:
        (Port.repository_paths):

2013-10-22  Commit Queue  <commit-queue@webkit.org>

        Unreviewed, rolling out r157774.
        http://trac.webkit.org/changeset/157774
        https://bugs.webkit.org/show_bug.cgi?id=123167

        causes python test to fail (Requested by smfr on #webkit).

        * Scripts/webkitpy/layout_tests/controllers/manager.py:
        (Manager.run):
        * Scripts/webkitpy/layout_tests/models/test_expectations.py:
        (TestExpectations.__init__):
        (TestExpectations._add_expectations):
        * Scripts/webkitpy/layout_tests/run_webkit_tests.py:
        (parse_args):
        (_set_up_derived_options):

2013-10-22  Lucas Forschler  <lforschler@apple.com>

        Prepare WebKit Buildbot master for Mavericks.
        This adds the following bot configurations:
            Mavericks Release/Debug builders
            Mavericks Release/Debug WK1 Testers
            Mavericks Release/Debug WK2 Testers

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

2013-10-21  Tamas Gergely  <gertom@inf.u-szeged.hu>

        Run tests as if they are expected to pass when --force is given.
        https://bugs.webkit.org/show_bug.cgi?id=112890

        Reviewed by Ryosuke Niwa.

        The --force switch of new-run-webkit-tests is now forces all tests to
        be run with 'PASS' as expected result.

        * Scripts/webkitpy/layout_tests/controllers/manager.py:
        (Manager.run):
        * Scripts/webkitpy/layout_tests/models/test_expectations.py:
        (TestExpectations.__init__):
        (TestExpectations._add_expectations):
        * Scripts/webkitpy/layout_tests/run_webkit_tests.py:
        (parse_args):
        (_set_up_derived_options):

2013-10-21  Mark Rowe  <mrowe@apple.com>

        Add a version of WebKitSystemInterface for Mavericks.

        Reviewed by Ryosuke Niwa.

        * DumpRenderTree/mac/Configurations/DebugRelease.xcconfig:
        * Scripts/copy-webkitlibraries-to-product-directory:
        * WebKitTestRunner/Configurations/DebugRelease.xcconfig:

2013-10-21  Anders Carlsson  <andersca@apple.com>

        Navigation policy callback not called when performing the same fragment navigation twice
        https://bugs.webkit.org/show_bug.cgi?id=123121
        <rdar://problem/15230466>

        Reviewed by Beth Dakin.

        Add a test.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/mac/FragmentNavigation.html: Added.
        * TestWebKitAPI/Tests/mac/FragmentNavigation.mm: Added.
        (+[WebKit1FragmentNavigationTestDelegate shared]):
        (-[WebKit1FragmentNavigationTestDelegate webView:runJavaScriptAlertPanelWithMessage:initiatedByFrame:]):
        (-[WebKit1FragmentNavigationTestDelegate webView:decidePolicyForNavigationAction:request:frame:decisionListener:]):
        (-[WebKit1FragmentNavigationTestDelegate webView:didFinishLoadForFrame:]):
        (-[WebKit1FragmentNavigationTestDelegate _runNextTestWithWebView:]):
        (TestWebKitAPI::TEST):

2013-10-21  Dan Bernstein  <mitz@apple.com>

        Style checker should allow a space after the @property keyword
        https://bugs.webkit.org/show_bug.cgi?id=123117

        Reviewed by Anders Carlsson.

        * Scripts/webkitpy/style/checkers/cpp.py:
        (check_spacing_for_function_call): Allow a space between @property and the following (
        * Scripts/webkitpy/style/checkers/cpp_unittest.py:
        (CppStyleTest.test_spacing_for_fncall): Added a test case.

2013-10-21  peavo@outlook.com  <peavo@outlook.com>

        [WinCairo] Build does not start.
        https://bugs.webkit.org/show_bug.cgi?id=123059

        Reviewed by Csaba Osztrogonác.

        The function isAppleWinWebKit() does no longer return true for WinCairo, need to add isWinCairo() checks instead.

        * Scripts/build-webkit:

2013-10-21  Zan Dobersek  <zdobersek@igalia.com>

        [Jhbuild] Bump the required Jhbuild revision
        https://bugs.webkit.org/show_bug.cgi?id=123089

        Reviewed by Carlos Garcia Campos.

        * jhbuild/jhbuild-wrapper: Latest versions of the gnome-common tools produce failures when configuring Jhbuild
        due to the configure.ac script using both IT_PROG_INTLTOOL and AM_GNU_GETTEXT macros. This is already fixed
        in the Jhbuild source so a more recent revision of it should be used.

2013-10-19  Alexey Proskuryakov  <ap@apple.com>

        Mac build fix.

        * DumpRenderTree/mac/DumpRenderTree.mm: Cast the length for %lu specifier.

2013-10-19  Alexey Proskuryakov  <ap@apple.com>

        Enable webaudio/ tests on DRT/Mac
        https://bugs.webkit.org/show_bug.cgi?id=86914

        Reviewed by Darin Adler.

        * DumpRenderTree/ForwardingHeaders/runtime/ArrayBufferView.h: Copied from Source/WebCore/ForwardingHeaders/runtime/ArrayBufferView.h.
        * DumpRenderTree/ForwardingHeaders/runtime/JSArrayBufferView.h: Copied from Source/WebCore/ForwardingHeaders/runtime/JSArrayBufferView.h.
        * DumpRenderTree/ForwardingHeaders/runtime/TypedArrayInlines.h: Copied from Source/WebCore/ForwardingHeaders/runtime/TypedArrayInlines.h.
        There is no way to efficiently get TypedArray buffer using API, so we need some internal headers.

        * DumpRenderTree/TestRunner.cpp:
        (setAudioResultCallback): 
        (TestRunner::staticFunctions):
        * DumpRenderTree/TestRunner.h:
        (TestRunner::audioResult):
        (TestRunner::setAudioResult):
        The function has a different name and argument type now, updated accordingly.
        Changed buffer from std::string to std::vector<char>, because it's more idiomatic.

        * DumpRenderTree/mac/DumpRenderTree.mm:
        (dumpAudio): Updated for the new name of audioResult accessor.
        (dump): Print the result in the format webkitpy currently expects.

        * WebKitTestRunner/TestInvocation.cpp:
        (WTR::TestInvocation::dumpAudio): fwrite the whole block at once, splitting into
        chunks made no sense.

        * WebKitTestRunner/InjectedBundle/TestRunner.cpp:
        (WTR::TestRunner::setAudioResult): Added a FIXME about getting off WKBundle SPI.

        * DumpRenderTree/CMakeLists.txt: Added JavaScriptCore/parser to include search list,
        so that "SourceProvider.h" can be found.

2013-10-19  Ryosuke Niwa  <rniwa@webkit.org>

        run-webkit-tests should submit time and modifiers to the new flakiness dashboard
        https://bugs.webkit.org/show_bug.cgi?id=123070

        Reviewed by Alexey Proskuryakov.

        * Scripts/webkitpy/layout_tests/controllers/manager.py:
        (Manager.run):
        * Scripts/webkitpy/layout_tests/models/test_run_results.py:
        (summarize_results): Added include_time_and_modifiers. Report test_run_time and modifiers
        in the test expectations when this argument is set to true.

2013-10-19  Alexey Proskuryakov  <ap@apple.com>

        Mac DumpRenderTree builds without NDEBUG even in release mode
        https://bugs.webkit.org/show_bug.cgi?id=123066

        Reviewed by Dan Bernstein.

        * DumpRenderTree/DumpRenderTree.xcodeproj/project.pbxproj:
        * DumpRenderTree/mac/Configurations/Base.xcconfig:
        Use the same pattern as WebCore and WebKitTestRunner.

2013-10-19  Zan Dobersek  <zdobersek@igalia.com>

        REGRESSION(r155373): Mac WK2 EWS bots is actually Mac WK1 debug
        https://bugs.webkit.org/show_bug.cgi?id=123064

        Reviewed by Ryosuke Niwa.

        Revert r155373 as it is causing incorrect port/platform deduction for the Mac EWS systems.

        * Scripts/webkitpy/common/config/ports.py: Added.
        (DeprecatedPort):
        (DeprecatedPort.name):
        (DeprecatedPort.flag):
        (DeprecatedPort.script_path):
        (DeprecatedPort.script_shell_command):
        (DeprecatedPort.port):
        (DeprecatedPort.makeArgs):
        (DeprecatedPort.update_webkit_command):
        (DeprecatedPort.check_webkit_style_command):
        (DeprecatedPort.prepare_changelog_command):
        (DeprecatedPort.build_webkit_command):
        (DeprecatedPort.run_javascriptcore_tests_command):
        (DeprecatedPort.run_webkit_unit_tests_command):
        (DeprecatedPort.run_webkit_tests_command):
        (DeprecatedPort.run_python_unittests_command):
        (DeprecatedPort.run_perl_unittests_command):
        (DeprecatedPort.run_bindings_tests_command):
        (MacPort):
        (MacWK2Port):
        (MacWK2Port.run_webkit_tests_command):
        (WinPort):
        (WinPort.run_bindings_tests_command):
        (GtkPort):
        (GtkPort.build_webkit_command):
        (GtkPort.run_webkit_tests_command):
        (GtkWK2Port):
        (GtkWK2Port.build_webkit_command):
        (GtkWK2Port.run_webkit_tests_command):
        (QtPort):
        (QtPort.build_webkit_command):
        (QtPort.run_webkit_tests_command):
        (QtWK2Port):
        (QtWK2Port.build_webkit_command):
        (QtWK2Port.run_webkit_tests_command):
        (EflPort):
        (EflPort.build_webkit_command):
        (EflWK2Port):
        (EflWK2Port.build_webkit_command):
        * Scripts/webkitpy/common/config/ports_mock.py: Added.
        (MockPort):
        (MockPort.name):
        (MockPort.check_webkit_style_command):
        (MockPort.update_webkit_command):
        (MockPort.build_webkit_command):
        (MockPort.prepare_changelog_command):
        (MockPort.run_python_unittests_command):
        (MockPort.run_perl_unittests_command):
        (MockPort.run_javascriptcore_tests_command):
        (MockPort.run_webkit_unit_tests_command):
        (MockPort.run_webkit_tests_command):
        (MockPort.run_bindings_tests_command):
        * Scripts/webkitpy/common/config/ports_unittest.py: Added.
        (DeprecatedPortTest):
        (DeprecatedPortTest.test_mac_port):
        (DeprecatedPortTest.test_gtk_port):
        (DeprecatedPortTest.test_gtk_wk2_port):
        (DeprecatedPortTest.test_efl_port):
        (DeprecatedPortTest.test_qt_port):
        (DeprecatedPortTest.test_qt_wk2_port):
        * Scripts/webkitpy/port/base.py:
        (Port._port_flag_for_scripts):
        (Port._wk2_port_name):
        * Scripts/webkitpy/port/base_unittest.py:
        (PortTest.test_build_path):
        * Scripts/webkitpy/port/efl_unittest.py:
        (EflPortTest.test_show_results_html_file):
        * Scripts/webkitpy/port/gtk_unittest.py:
        (GtkPortTest.test_get_crash_log):
        * Scripts/webkitpy/port/mac_unittest.py:
        (test_64bit):
        * Scripts/webkitpy/port/test.py:
        (TestPort.virtual_test_suites):
        * Scripts/webkitpy/tool/bot/flakytestreporter.py:
        (FlakyTestReporter.__init__):
        * Scripts/webkitpy/tool/bot/irc_command.py:
        (Rollout._update_working_copy):
        * Scripts/webkitpy/tool/commands/download_unittest.py:
        * Scripts/webkitpy/tool/commands/earlywarningsystem.py:
        (AbstractEarlyWarningSystem.run_command):
        * Scripts/webkitpy/tool/commands/queues.py:
        (PatchProcessingQueue.begin_work_queue):
        (CommitQueue.run_command):
        * Scripts/webkitpy/tool/main.py:
        (WebKitPatch.__init__):
        (WebKitPatch.deprecated_port):
        (WebKitPatch.handle_global_options):
        * Scripts/webkitpy/tool/mocktool.py:
        (MockTool.__init__):
        (MockTool.deprecated_port):
        * Scripts/webkitpy/tool/steps/build.py:
        (Build.build):
        * Scripts/webkitpy/tool/steps/checkstyle.py:
        (CheckStyle.run):
        * Scripts/webkitpy/tool/steps/commit.py:
        (Commit._check_test_expectations):
        * Scripts/webkitpy/tool/steps/preparechangelog.py:
        (PrepareChangeLog.run):
        * Scripts/webkitpy/tool/steps/preparechangelogforrevert.py:
        (PrepareChangeLogForRevert.run):
        * Scripts/webkitpy/tool/steps/runtests.py:
        (RunTests.run):
        * Scripts/webkitpy/tool/steps/runtests_unittest.py:
        (RunTestsTest.test_webkit_run_unit_tests):
        * Scripts/webkitpy/tool/steps/steps_unittest.py:
        (StepsTest.test_runtests_args):
        * Scripts/webkitpy/tool/steps/update.py:
        (Update._update_command):
        * Scripts/webkitpy/tool/steps/update_unittest.py:
        (UpdateTest.test_update_command_non_interactive):
        (UpdateTest.test_update_command_interactive):

2013-10-19  Andreas Kling  <akling@apple.com>

        RefPtr::releaseNonNull() incorrectly increments the refcount.
        <https://webkit.org/b/123063>

        Add an API test to verify that no extra refs are added when calling
        RefPtr::releaseNonNull().

        Reviewed by Anders Carlsson.

2013-10-18  Rik Cabanier <cabanier@adobe.com>
        Add Rik Cabanier to list of committers
        https://bugs.webkit.org/show_bug.cgi?id=123031

        reviewed by Dirk Schulze.

        * Tools/Scripts/webkitpy/common/config/contributors.json: Added name.

2013-10-18  Denis Nomiyama  <d.nomiyama@samsung.com>

        [ATK] Fix invalid signal to set objects to an unknown state "layout-complete"
        https://bugs.webkit.org/show_bug.cgi?id=122970

        Reviewed by Mario Sanchez Prada.

        Removed an invalid signal to set an object state to layout-complete
        that does not exist. It was replaced by ATK:AtkDocument:load-complete.

        * DumpRenderTree/atk/AccessibilityCallbacksAtk.cpp:
        (axObjectEventListener): Replaced layout-complete with load-complete.
        (connectAccessibilityCallbacks): Connect callback to new listener for
        ATK:AtkDocument:load-complete.
        (disconnectAccessibilityCallbacks): Disconnect callback to new listener
        for ATK:AtkDocument:load-complete.
        * WebKitTestRunner/InjectedBundle/atk/AccessibilityNotificationHandlerAtk.cpp:
        (axObjectEventListener): Replaced layout-complete with load-complete.
        (WTR::AccessibilityNotificationHandler::connectAccessibilityCallbacks):
        Connect callback to new listener for ATK:AtkDocument:load-complete.
        (WTR::AccessibilityNotificationHandler::disconnectAccessibilityCallbacks):
        Disconnect callback to new listener for ATK:AtkDocument:load-complete.

2013-10-18  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] Generate API documentation for GObject DOM bindings
        https://bugs.webkit.org/show_bug.cgi?id=121538

        Reviewed by Gustavo Noronha Silva.

        The .symbols file that is now generated for checking GObject DOM
        bindings API compatibility while building can also be used to
        generate the files needed to produce the gtk-doc
        documentation. The new script generate-webkitdom-doc-files can
        generate the docs.sgml and sections.txt files from the given list
        of .symbols files.

        * gtk/GNUmakefile.am: Add rules to generate webkitdomgtk-docs.sgml
        and webkitdomgtk-sections.txt as well as rules to install the
        generated WebKitDOMGTK documentation.
        * gtk/generate-gtkdoc:
        (webkitdom_docs_html_path): New helper function that returns the
        path where the DOM API documentation has been generated.
        (get_webkit2_options): Include DOM API docs to the list of xref
        dependencies.
        (get_webkit1_options): Ditto.
        (get_webkitdom_options): Return the gtk-doc options to generate
        the DOM API docs.
        (get_webkitdom_options.derived_sources_path):
        (get_webkitdom_options.src_path):
        * gtk/generate-webkitdom-doc-files: Added.
        (WebKitDOMDocGenerator):
        (WebKitDOMDocGenerator.write_header):
        (WebKitDOMDocGenerator.write_section):
        (WebKitDOMDocGenerator.write_footer):
        (WebKitDOMDocGeneratorDocs):
        (WebKitDOMDocGeneratorDocs.write_header):
        (write_section):
        (write_footer):
        (WebKitDOMDocGeneratorSections):
        (WebKitDOMDocGeneratorSections.__init__):
        (WebKitDOMDocGeneratorSections._dom_class):
        (WebKitDOMDocGeneratorSections._dom_class_decamelize):
        (WebKitDOMDocGeneratorSections._symbol_list):
        (WebKitDOMDocGeneratorSections.write_section):

2013-10-17  Alex Christensen  <achristensen@webkit.org>

        Run JavaScriptCore tests again on Windows.
        https://bugs.webkit.org/show_bug.cgi?id=122787

        Reviewed by Tim Horton.

        * Scripts/build-jsc:
        (buildMyProject): Use JavaScriptCore.sln to build JavaScriptCore and WTF.
        * Scripts/run-javascriptcore-tests: Don't run stress tests on WinCairo.
        * Scripts/webkitdirs.pm:
        (determineConfigurationForVisualStudio):
        (determineConfigurationProductDir):
        Build directory should end with bin64 and configuration should end with |x64 on Win64.
        (isAppleWinWebKit):
        (copyInspectorFrontendFiles):
        (setPathForRunningWebKitApp):
        Separated WinCairo directories and options from AppleWin.

2013-10-17  Mihnea Ovidenie  <mihnea@adobe.com>

        Unreviewed. Add myself as a reviewer.

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

2013-10-17  Andreas Kling  <akling@apple.com>

        Make it possible to assign a PassRef to a RefPtr.
        <https://webkit.org/b/122943>

        Added a small API test for RefPtr=(PassRef) so we know this code
        will compile (and work.)

        Reviewed by Antti Koivisto.

2013-10-16  Filip Pizlo  <fpizlo@apple.com>

        We need test coverage for just the Baseline JIT
        https://bugs.webkit.org/show_bug.cgi?id=122929

        Reviewed by Sam Weinig.
        
        Adds no-LLInt versions of all tests. For the Mozilla tests, also add a BaselineJIT-only
        variant.

        * Scripts/run-jsc-stress-tests:

2013-10-16  Ryosuke Niwa  <rniwa@webkit.org>

        Support multiple repositories in submitting results to --results-server-host
        https://bugs.webkit.org/show_bug.cgi?id=122935

        Reviewed by Anders Carlsson.

        Remoevd --got-revision and added the logic to extract revision information
        from multiple repositories as done in run-perf-tests.

        * Scripts/webkitpy/layout_tests/controllers/manager.py:
        (Manager.upload_results):
        * Scripts/webkitpy/layout_tests/run_webkit_tests.py:
        (parse_args):

2013-10-16  Darin Adler  <darin@apple.com>

        Add PassRef and createRefCounted so we can improve creation of RefCounted objects
        https://bugs.webkit.org/show_bug.cgi?id=122904

        Reviewed by Anders Carlsson.

        * TestWebKitAPI/Tests/WTF/Ref.cpp: Added some basic tests for adoptRef and PassRef.

2013-10-16  Darin Adler  <darin@apple.com>

        Need tests for RefPtr self-assignment and self-move-assignment.

        * TestWebKitAPI/Tests/WTF/RefPtr.cpp: Added tests.

2013-10-16  Robert Plociennik  <r.plociennik@samsung.com>

        [EFL] Minibrowser can't load child window's location
        https://bugs.webkit.org/show_bug.cgi?id=122485

        Reviewed by Gyuyoung Kim.

        * MiniBrowser/efl/main.c: Now calling window_create() without the url parameter
            followed by an explicit call to ewk_view_url_set() where appropriate.
        (on_key_down):
        (on_window_create):
        (window_create):
        (elm_main):

2013-10-15  Sergio Correia  <sergio.correia@openbossa.org>

        [EFL][WK2] Make SeccompFilters build again after r156349 and r156353
        https://bugs.webkit.org/show_bug.cgi?id=122872

        Reviewed by Anders Carlsson.

        * TestWebKitAPI/PlatformEfl.cmake: Mark SeccompFilters API test as
        failing.

2013-10-15  Dean Jackson  <dino@apple.com>

        Add ENABLE_WEB_ANIMATIONS flag
        https://bugs.webkit.org/show_bug.cgi?id=122871

        Reviewed by Tim Horton.

        Eventually might be http://dev.w3.org/fxtf/web-animations/
        but this is just engine-internal work at the moment.

        * Scripts/webkitperl/FeatureList.pm:

2013-10-15  Darin Adler  <darin@apple.com>

        Add some API tests for Vector, RefPtr, and Ref
        https://bugs.webkit.org/show_bug.cgi?id=122840

        Reviewed by Andreas Kling.

        * TestWebKitAPI/CMakeLists.txt: Added new files.
        * TestWebKitAPI/GNUmakefile.am: Ditto.
        * TestWebKitAPI/TestWebKitAPI.vcxproj/TestWebKitAPI.vcxproj: Ditto.
        * TestWebKitAPI/TestWebKitAPI.vcxproj/TestWebKitAPI.vcxproj.filters: Ditto.
        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj: Ditto.

        * TestWebKitAPI/Tests/WTF/Ref.cpp: Added.
        * TestWebKitAPI/Tests/WTF/RefLogger.h: Added.
        * TestWebKitAPI/Tests/WTF/RefPtr.cpp: Added.
        * TestWebKitAPI/Tests/WTF/Vector.cpp: Added move-only insert tests.

2013-10-14  Roger Fong  <roger_fong@apple.com>

        Adding myself to CC list for some components.

        * Scripts/webkitpy/common/config/watchlist:

2013-10-13  Darin Adler  <darin@apple.com>

        Deprecate or remove deleteAllValues functions; there are only a few call sites left
        https://bugs.webkit.org/show_bug.cgi?id=122738

        Reviewed by Anders Carlsson.

        * DumpRenderTree/win/DRTDataObject.cpp:
        (DRTDataObject::~DRTDataObject):
        * DumpRenderTree/win/UIDelegate.cpp:
        (DRTUndoStack::~DRTUndoStack):
        (DRTUndoStack::clear):
        Renamed deleteAllValues to deprecatedDeleteAllValues.

        * Scripts/do-webcore-rename: Updated to perform this rename, as is traditional.

2013-10-13  Alexey Proskuryakov  <ap@apple.com>

        build.webkit.org/dashboard incorrectly shows interrupted builds as green
        https://bugs.webkit.org/show_bug.cgi?id=122732

        Reviewed by Tim Hatcher.

        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Scripts/BuildbotIteration.js:
        (BuildbotIteration.prototype.update): Removed a special case for status 4 (EXCEPTION).
        I don't see it occur any time in recent history, but judging from what happens for
        status 5 (RETRY), we can just finish this function normally.
        Record overall text description for iteration as BuildbotIteration.text.

        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Scripts/BuildbotTesterQueueView.js:
        (BuildbotTesterQueueView.prototype.update.appendBuilderQueueStatus): If an iteration is a failure,
        but no tests failed, make it yellow, and use buildbot-provided description for it.

2013-10-13  Alexey Proskuryakov  <ap@apple.com>

        Remove Chromium specific code from flakiness dashboard
        https://bugs.webkit.org/show_bug.cgi?id=122714

        Reviewed by Sam Weinig.

        Also removed code related to GPU tests and virtual suites.
        "Fallbacks map" was chromium only too, not sure why they needed special handling there.

        * TestResultServer/model/jsonresults_unittest.py:
        * TestResultServer/static-dashboards/builders.js:
        * TestResultServer/static-dashboards/dashboard_base.js:
        * TestResultServer/static-dashboards/flakiness_dashboard.html:
        * TestResultServer/static-dashboards/flakiness_dashboard.js:
        * TestResultServer/static-dashboards/flakiness_dashboard_tests.css:
        * TestResultServer/static-dashboards/flakiness_dashboard_unittests.js:
        * TestResultServer/static-dashboards/history.js:
        * TestResultServer/static-dashboards/loader.js:
        * TestResultServer/static-dashboards/ui.js:
        * TestResultServer/templates/uploadform.html:

2013-10-11  Timothy Hatcher  <timothy@apple.com>

        Remove preference support for picking the old Web Inspector.
        https://bugs.webkit.org/show_bug.cgi?id=122655

        Reviewed by Alexey Proskuryakov.

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

2013-10-11  Filip Pizlo  <fpizlo@apple.com>

        Fix 64-bit build on everything but Windows.

        Rubber stamped by Brent Fulgham.

        * Scripts/webkitdirs.pm:
        (argumentsForConfiguration):

2013-10-11  Alexey Proskuryakov  <ap@apple.com>

        Touch a file to see how auto-update works.

        Rubber-stamped by Tim Hatcher.

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

2013-10-11  Alexey Proskuryakov  <ap@apple.com>

        LeaksViewer fails to present recent results list if current build is still updating svn
        https://bugs.webkit.org/show_bug.cgi?id=122670

        Fixed an obvious mistake in the previous patch.

        * BuildSlaveSupport/build.webkit.org-config/public_html/LeaksViewer/RecentBuildsLoader.js:
        (RecentBuildsLoader.prototype.start):

2013-10-11  Alexey Proskuryakov  <ap@apple.com>

        LeaksViewer fails to present recent results list if current build is still updating svn
        https://bugs.webkit.org/show_bug.cgi?id=122670

        Reviewed by Adam Roben.

        * BuildSlaveSupport/build.webkit.org-config/public_html/LeaksViewer/RecentBuildsLoader.js:
        (RecentBuildsLoader.prototype.start): Skip builds that don't have an svn revision yet.

2013-10-11  Brent Fulgham  <bfulgham@apple.com>

        Unreviewed build fix for --64-bit target.

        * Scripts/webkitdirs.pm:
        (argumentsForConfiguration): Use 'isWin64' test, since @ARGV value may have
        been removed by this point.
        (hasArgument): Remove unused temporary.

2013-10-10  Gustavo Noronha Silva  <gustavo.noronha@collabora.com>

        webkit-patch failure-reason has a quite low limit for 'too many failures'
        https://bugs.webkit.org/show_bug.cgi?id=122556

        Reviewed by Darin Adler.

        * Scripts/webkitpy/tool/commands/queries.py:
        (FailureReason._explain_failures_for_builder): adjust the number of too many failures
        to match what the layout test runners use these days.

2013-10-10  Gustavo Noronha Silva  <gustavo.noronha@collabora.com>

        webkit-patch failure-reason should allow specifying failures one is interested in
        https://bugs.webkit.org/show_bug.cgi?id=122554

        Reviewed by Darin Adler.

        * Scripts/webkitpy/tool/commands/queries.py:
        (FailureReason):
        (FailureReason._explain_failures_for_builder): keep track of explained failures and drop out of the
        loop if the ones we're interested in been explained.
        (FailureReason._done_explaining): check the failures we're interested in have been explained, if any.
        (FailureReason.execute): initialize failures to explain and the explained set.

2013-10-10  Filip Pizlo  <fpizlo@apple.com>

        Make sure that DataTypes.h is in the binary drop.

        Rubber stamped by Michael Saboff.

        * Scripts/export-llvm-build:

2013-10-10  Filip Pizlo  <fpizlo@apple.com>

        FTL: Soft-link LLVM as a workaround for LLVM's static initializers and exit-time destructors
        https://bugs.webkit.org/show_bug.cgi?id=122566

        Reviewed by Mark Rowe.

        * Scripts/configure-llvm:

2013-10-10  Mark Rowe  <mrowe@apple.com>

        <rdar://problem/13341666> WebKit should always build against an SDK.

        Have all projects default to building against the OS X Internal SDK for the Production
        configuration. For the Debug and Release configurations, look for UseInternalSDK.xcconfig
        to determine whether the OS X Internal SDK should be used. If not, use the normal OS X SDK.

        Reviewed by Dan Bernstein.

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

2013-10-10  Gustavo Noronha Silva  <gns@gnome.org>

        Unreviewed gardening, the inspector protocol timeouts are also affecting TestInspectorServer.

        * Scripts/run-gtk-tests:
        (TestRunner): skip TestInspectorServer.

2013-10-10  Andres Gomez  <agomez@igalia.com>

        [GTK] Provide search functionality to MiniBrowser
        https://bugs.webkit.org/show_bug.cgi?id=117631

        Reviewed by Carlos Garcia Campos.

        Adds a search bar to MiniBrowser with the minimum functionality
        and a new button to the toolbar for showing the new search
        bar. Typical keyboard shortcuts are also added.

        * MiniBrowser/gtk/BrowserSearchBar.c: Added.
        (doSearch):
        (searchNext):
        (searchPrevious):
        (searchCloseButtonClickedCallback):
        (searchEntryMenuIconPressedCallback):
        (searchEntryClearIconReleasedCallback):
        (searchEntryChangedCallback):
        (searchEntryActivatedCallback):
        (searchPrevButtonClickedCallback):
        (searchNextButtonClickedCallback):
        (searchMenuCheckButtonToggledCallback):
        (browser_search_bar_init):
        (browserSearchBarFinalize):
        (browser_search_bar_class_init):
        (browser_search_bar_new):
        (browser_search_bar_add_accelerators):
        (browser_search_bar_open):
        (browser_search_bar_close):
        * MiniBrowser/gtk/BrowserSearchBar.h: Added.
        * MiniBrowser/gtk/BrowserWindow.c:
        (webViewEnterFullScreen): Closes new search bar.
        (webViewLeaveFullScreen): Opens new search bar if previously
        visible.
        (searchCallback): Added. Shows and hides the new search bar.
        (browser_window_init): Added search button to the toolbar.
        (browserWindowConstructed): Creates the new search bar.
        * MiniBrowser/gtk/GNUmakefile.am: Added new files to compilation.

2013-10-09  Gustavo Noronha Silva  <gustavo.noronha@collabora.com>

        webkit-patch failure-reason fails with UnicodeDecodeError when name has non-ascii characters
        https://bugs.webkit.org/show_bug.cgi?id=122552

        Reviewed by Darin Adler.

        * Scripts/webkitpy/common/checkout/commitinfo.py:
        (CommitInfo.blame_string): ensure objects are made into unicode strings, not regular ones that
        will cause UnicodeDecodeError for non-ascii characters.

2013-10-09  Alexey Proskuryakov  <ap@apple.com>

        Would like a link to dashboard from build.webkit.org main page
        https://bugs.webkit.org/show_bug.cgi?id=122577

        Reviewed by Tim Hatcher.

        * BuildSlaveSupport/build.webkit.org-config/templates/root.html: Added.

2013-10-09  Brent Fulgham  <bfulgham@apple.com>

        [Win] Check for MathML fonts and warn user if they are missing.
        https://bugs.webkit.org/show_bug.cgi?id=122568

        Reviewed by Tim Horton.

        * Scripts/webkitdirs.pm:
        (checkRequiredSystemConfig): Use common gperf/bison/flex tests, rather than
        Windows-specific code I added previously.
        (fontExists): Added
        (checkInstalledTools): Add check for MathML fonts.

2013-10-09  Alexey Proskuryakov  <ap@apple.com>

        http://build.webkit.org/dashboard/ doesn't link to webkitpy failures
        https://bugs.webkit.org/show_bug.cgi?id=122471

        Reviewed by Tim Hatcher.

        Added links to webkitpy, webkitperl and bindings-tests results.

        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Scripts/Buildbot.js:
        (Buildbot.prototype.apiTestResultsURLForIteration):
        (Buildbot.prototype.webkitpyTestResultsURLForIteration):
        (Buildbot.prototype.webkitperlTestResultsURLForIteration):
        (Buildbot.prototype.bindingsTestResultsURLForIteration):
        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Scripts/BuildbotTesterQueueView.js:
        (BuildbotTesterQueueView.prototype.update.appendBuilderQueueStatus):

2013-10-09  Alexey Proskuryakov  <ap@apple.com>

        Move some functions from WebKitBuildbot to Buildbot class.

        Suggested by Tim Hatcher.

        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Scripts/Buildbot.js:
        (Buildbot.prototype.javascriptTestResultsURLForIteration):
        (Buildbot.prototype.apiTestResultsURLForIteration):
        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Scripts/WebKitBuildbot.js:
        (WebKitBuildbot.prototype.layoutTestResultsURLForIteration):

2013-10-09  Timothy Hatcher  <timothy@apple.com>

        Add API tests to the Dashbord page.

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

        Reviewed by Timothy Hatcher.

        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Scripts/BuildbotTesterQueueView.js:
        (BuildbotTesterQueueView.prototype.update.appendBuilderQueueStatus):
        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Scripts/WebKitBuildbot.js:
        (WebKitBuildbot.prototype.apiTestResultsURLForIteration):

2013-10-09  Timothy Hatcher  <timothy@apple.com>

        Attempt to fix faulty Dashboard iteration updating by always rebuilding test result objects.

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

        Reviewed by Alexey Proskuryakov.

        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Scripts/BuildbotIteration.js:
        (BuildbotIteration.prototype.update):

2013-10-09  Alexey Proskuryakov  <ap@apple.com>

        build.webkit.org/dashboard doesn't provide a results link when there issues at multiple steps
        https://bugs.webkit.org/show_bug.cgi?id=122573

        Reviewed by Tim Hatcher.

        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Scripts/BuildbotTesterQueueView.js:
        (BuildbotTesterQueueView.prototype.update.appendBuilderQueueStatus): Provide a URL.

        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Scripts/Buildbot.js:
        (Buildbot.prototype.buildPageURLForIteration): Added.

2013-10-09  Alexey Proskuryakov  <ap@apple.com>

        http://build.webkit.org/dashboard/ links to a wrong jscore-test results page
        https://bugs.webkit.org/show_bug.cgi?id=122569

        Reviewed by Tim Hatcher.

        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Scripts/WebKitBuildbot.js:
        (WebKitBuildbot.prototype.javascriptTestResultsURLForIteration): "actual.html" used
        to be produced by the old Mozilla test harness that we don't use any more.

2013-10-09  Gustavo Noronha Silva  <gustavo.noronha@collabora.com>

        Add GTK 64 bits release to the buildbot dashboard
        https://bugs.webkit.org/show_bug.cgi?id=122548

        Reviewed by Darin Adler.

        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Images/GTK.png: Added.
        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Scripts/WebKitBuildbot.js:
        (WebKitBuildbot): add 64 bits release wk2 and wk1 testers.
        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Styles/Main.css:
        (table.queue-grid tr.platform.linux-gtk img.logo): use the GTK+ logo in its dashboard line.

2013-10-09  Mario Sanchez Prada  <mario.prada@samsung.com>

        [ATK] Implement new API in AtkText: atk_text_get_string_at_offset()
        https://bugs.webkit.org/show_bug.cgi?id=120638

        Reviewed by Gustavo Noronha Silva.

        * gtk/jhbuild.modules: Raised ATK and AT-SPI versions to 2.10.0, so we
        can check both the old and new APIs to retrieve text at a given offset.

2013-10-08  Alex Christensen  <achristensen@webkit.org>

        Improved WinLauncher.
        https://bugs.webkit.org/show_bug.cgi?id=122536

        Reviewed by Brent Fulgham.

        * WinLauncher/PrintWebUIDelegate.cpp:
        (PrintWebUIDelegate::runJavaScriptAlertPanelWithMessage): Added.
        (PrintWebUIDelegate::runJavaScriptConfirmPanelWithMessage): Added.
        * WinLauncher/PrintWebUIDelegate.h: Removed stubs.
        * WinLauncher/WinLauncher.cpp:
        (createCrashReport): Use the executable name instead of "WinLauncher".
        * WinLauncher/WinLauncher.vcxproj/WinLauncher.exe.manifest: Removed.
        * WinLauncher/WinLauncher.vcxproj/WinLauncherLibCommon.props: Link to Wininet.lib.
        * win/DLLLauncher/DLLLauncherMain.cpp: Remove VS2005 dependency for WinCairo.

2013-10-08  Mark Lam  <mark.lam@apple.com>

        Fix ruby LoadError when running run-javascriptcore-tests.
        https://bugs.webkit.org/show_bug.cgi?id=122519.

        Reviewed by Mark Hahnenberg.

        The scripts needed to explicitly require 'rubygems' for older versions of ruby
        (versions before 1.9).

        * Scripts/jsc-stress-test-helpers/profiler-test-helper:
        * Scripts/run-jsc-stress-tests:

2013-10-08  Christophe Dumez  <ch.dumez@sisa.samsung.com>

        Unreviewed, add my new email to contributors.json.

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

2013-10-08  Brent Fulgham  <bfulgham@apple.com>

        Unreviewed build correction.

        * Scripts/webkitpy/port/win.py:
        (WinPort.write_registry_value): Use string representation of error message to avoid
        format conversion problem.

2013-10-07  Brent Fulgham  <bfulgham@apple.com>

        [Win] Add checks for proper build and test environment
        https://bugs.webkit.org/show_bug.cgi?id=122466

        Reviewed by Darin Adler.

        This patch makes two changes:
        1. Update webkitdirs.pm to check for some common misconfigurations and provide helpful warnings or
           error messages so that people know what to fix to get things working.
        2. Modify the win.py port to handle the 32-bit and 64-bit test environments, as well as making sure
           the various environment settings are properly configured for our test environment.

        * Scripts/webkitdirs.pm:
        (checkInstalledTools): Add checks for some common Cygwin configuration problems that have
        caused problems in the past.
        (setupAppleWinEnv):
        * Scripts/webkitpy/port/win.py:
        (WinPort):
        (WinPort.read_registry_string): Parameterize for run architecture and registry root.
        (WinPort.write_registry_value): Parameterize registry writing by data type (string versus
        DWORD, etc.)
        (WinPort.write_registry_string): Revise to call new generic registry write function.
        (WinPort.setup_crash_log_saving): Revise for new API
        (WinPort.restore_crash_log_saving): Ditto
        (WinPort.prevent_error_dialogs): Add new methods to prevent Windows dialogs that block our test
        servers from running.
        (WinPort.allow_error_dialogs): Ditto.
        (WinPort.setup_test_run): Call new API to turn off user input dialogs on program failure.
        (WinPort.clean_up_test_run): Call new API to reactivatea user input dialogs after test run finished.

2013-10-08  Philippe Normand  <pnormand@igalia.com>

        [GStreamer] enable v4l2 plugin
        https://bugs.webkit.org/show_bug.cgi?id=122503

        Reviewed by Martin Robinson.

        * gtk/jhbuild.modules: Enable the plugin, it now builds fine since
        we updated our GStreamer version to 1.0.8.

2013-10-08  Mario Sanchez Prada  <mario.prada@samsung.com>

        [ATK] Expose state of aria-invalid as ATK_STATE_INVALID_ENTRY
        https://bugs.webkit.org/show_bug.cgi?id=122104

        Reviewed by Chris Fleizach.

        Updated stringAttributeValue to double check that the exposure of
        aria-invalid as a state is consistent with its exposure as a text
        attribute as well, when it applies (implementations of AtkText).

        * DumpRenderTree/atk/AccessibilityUIElementAtk.cpp:
        (AccessibilityUIElement::stringAttributeValue): Add double check.
        * WebKitTestRunner/InjectedBundle/atk/AccessibilityUIElementAtk.cpp:
        (WTR::AccessibilityUIElement::stringAttributeValue): Ditto.

2013-10-07  Filip Pizlo  <fpizlo@apple.com>

        run-jsc-stress-tests progress meter should update more quickly on older Rubies
        https://bugs.webkit.org/show_bug.cgi?id=122459

        Reviewed by Darin Adler.

        * Scripts/run-jsc-stress-tests:

2013-10-07  Gustavo Noronha Silva  <gns@gnome.org>

        [buildbot] parse tests that are reported as crashed correctly for GTK+
        https://bugs.webkit.org/show_bug.cgi?id=122476

        Reviewed by Martin Robinson.

        * BuildSlaveSupport/build.webkit.org-config/master.cfg:
        (RunGtkAPITests.commandComplete): parse the crashed tests output so that is reported
        as a failure of the API tests.

2013-10-07  Gustavo Noronha Silva  <gns@gnome.org>

        Unreviewed. Skipping API test that is causing the next one to crash,
        see https://bugs.webkit.org/show_bug.cgi?id=121970.

        * Scripts/run-gtk-tests:
        (TestRunner):

2013-10-07  Gustavo Noronha Silva  <gustavo.noronha@collabora.com>

        [GTK] run-gtk-tests does not distinguish between failure and crashes
        https://bugs.webkit.org/show_bug.cgi?id=122135

        Reviewed by Martin Robinson.

        The GTK+ API test runner does not distinguish between failures and crashes. This change
        makes it do that, so it's easier for us to spot the more important/higher priority crash
        case.

        * Scripts/run-gtk-tests:
        (TestRunner._run_test_command): return the exit code instead of a boolean true/false,
        so we have more information on how the process ended.
        (TestRunner._run_test): check the exit code to distinguish between crashes and failures.
        (TestRunner.run_tests): report crashes.

2013-10-07  Gustavo Noronha Silva  <gns@gnome.org>

        [GTK] Missing packages for APT on install-dependencies
        https://bugs.webkit.org/show_bug.cgi?id=121555

        Reviewed by Martin Robinson.

        * gtk/install-dependencies: add packages that are needed for
        building WebKit itself and the jhbuild dependencies.

2013-10-07  Anders Carlsson  <andersca@apple.com>

        Fix test failures.

        * Scripts/webkitpy/port/base.py:
        (Port.to.start_helper):
        * Scripts/webkitpy/port/mock_drt.py:
        (MockDRTPort.start_helper):

2013-10-07  Anders Carlsson  <andersca@apple.com>

        Always force discrete mode when running layout tests
        https://bugs.webkit.org/show_bug.cgi?id=122465

        Reviewed by Tim Horton.

        This should speed up WebGL tests and hopefully prevent race conditions that may cause window server crashes from happening.
        
        * DumpRenderTree/DumpRenderTree.xcodeproj/project.pbxproj:
        Link with IOKit.

        * DumpRenderTree/mac/LayoutTestHelper.m:
        (installLayoutTestColorProfile):
        Check installColorProfile.

        (restoreUserColorProfile):
        Check installColorProfile.

        (lockDownDiscreteGraphics):
        New function to force discrete graphics.

        (main):
        Add '--install-color-profile' option.

        * Scripts/webkitpy/layout_tests/controllers/manager.py:
        (Manager._set_up_run):
        Always start the helper, but pass self._options.pixel_tests to it.

        * Scripts/webkitpy/port/mac.py:
        (MacPort.start_helper):
        Pass --install-color-profile' to the helper if pixel_tests is true.

2013-10-07  Timothy Hatcher  <timothy@apple.com>

        Properly count binding test failures as failures.

        Fix the total for multiple failures in different steps too by avoiding undefined.

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

        Reviewed by Alexey Proskuryakov.

        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Scripts/BuildbotTestResults.js:
        (BuildbotTestResults):
        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Scripts/BuildbotTesterQueueView.js:
        (BuildbotTesterQueueView.prototype.update.appendBuilderQueueStatus):

2013-10-07  Gustavo Noronha Silva  <gustavo.noronha@collabora.com>

        [GTK] Fails to build with jhbuild with newer system glib
        https://bugs.webkit.org/show_bug.cgi?id=122132

        Reviewed by Martin Robinson.

        Newer glib includes new symbols that some system libraries which we depend on, such as pango, have
        started relying on. glib is not a dependency that should change test results, and is provided in
        jhbuild with the intention of supporting the other bits that do, so using a newer stable release
        should not be an issue.

        * gtk/jhbuild.modules:

2013-10-06  Filip Pizlo  <fpizlo@apple.com>

        run-jsc-stress-tests shouldn't print its goofy progress meter when running on the bots
        https://bugs.webkit.org/show_bug.cgi?id=122437

        Reviewed by Antoine Quint.

        * Scripts/run-jsc-stress-tests:

2013-10-06  Filip Pizlo  <fpizlo@apple.com>

        Unreviewed, fix build on old Rubies.

        * Scripts/run-jsc-stress-tests:

2013-10-06  Filip Pizlo  <fpizlo@apple.com>

        Unified test infrastructure via the jsc shell
        https://bugs.webkit.org/show_bug.cgi?id=120696

        Reviewed by Oliver Hunt.
        
        Make run-jsc-stress-tests smart enough to be able to handle different styles of test
        output (silent or noisy) and different styles of test failure (just bad exit code,
        text diff, filtering for some magical text, etc.). This allows me to get rid of the
        layout-test-helper. It also allows me to switch all of the old Mozilla tests to
        running in run-jsc-stress-tests.
        
        Also removes all of the code paths that defended against not having shellwords. Just
        install the shellwords gem if you want to run tests.
        
        Also removes the non-parallel test running code. No reason for it to exist anymore.
        
        This is a massive increase in test coverage. It uncovered bugs. I fixed two of them
        as part of this patch, and left three more as new bugzillas.

        * Scripts/create-mozilla-js-test-list: Added.
        * Scripts/jsc-stress-test-helpers/check-mozilla-failure: Added.
        * Scripts/jsc-stress-test-helpers/layout-test-helper: Removed.
        * Scripts/run-javascriptcore-tests:
        * Scripts/run-jsc-stress-tests:

2013-10-05  Filip Pizlo  <fpizlo@apple.com>

        run-jsc-stress-tests should be less verbose
        https://bugs.webkit.org/show_bug.cgi?id=122397

        Reviewed by Sam Weinig.
        
        It now just prints something like:
        
         965/1831 ....
        
        Where the first number is the number of tests that completed, the second number is the
        number of tests total, and the dots are the number of tests running right now - which is
        useful towards the end when you're waiting for the last slow tests to finish.
        
        It will also print out the output from failing tests and it will print a line for skipped
        tests (to annoy you into getting them into a shape where they can be unskipped). For
        example, for LayoutTests, it will print just the diff, if the test fails. It's cool.

        * Scripts/run-jsc-stress-tests:

2013-10-05  Filip Pizlo  <fpizlo@apple.com>

        Allow skipping of run-jsc-stress-tests that are configured using yaml files
        https://bugs.webkit.org/show_bug.cgi?id=122385

        Reviewed by Sam Wieinig.
        
        Make tests run via YAML be able to do the parse-for-commands trick that allows
        us to skip tests and do other custom per-test stuff.

        * Scripts/jsc-stress-test-helpers/layout-test-helper:
        * Scripts/run-jsc-stress-tests:

2013-10-05  Filip Pizlo  <fpizlo@apple.com>

        Unreviewed, fix tests on older Rubies.

        * Scripts/run-jsc-stress-tests:

2013-10-05  Anders Carlsson  <andersca@apple.com>

        Don't filter the weak symbols.

        * Scripts/check-for-weak-vtables-and-externals:

2013-10-04  Filip Pizlo  <fpizlo@apple.com>

        Have run-javascriptcore-tests run JS LayoutTests using run-jsc-stress-tests so that it runs in parallel
        https://bugs.webkit.org/show_bug.cgi?id=122376

        Reviewed by Mark Hahnenberg.

        * Scripts/jsc-stress-test-helpers/layout-test-helper: Added.
        * Scripts/run-javascriptcore-tests:
        (printThingsFound):
        * Scripts/run-jsc-stress-tests:

2013-10-04  Filip Pizlo  <fpizlo@apple.com>

        It should be even easier to run and debug a failing JSC stress test
        https://bugs.webkit.org/show_bug.cgi?id=122337

        Reviewed by Oliver Hunt.
        
        If a test fails, you can now just say:

        sh WebKitBuild/Debug/jsc-stress-results/regress/script-tests/emscripten-cube2hash.js.ftl-eager-no-cjit

        and get the reproduction. You don't have to set any environment variables like before.
        Also if you want to debug the failing test you can now just say:

        sh WebKitBuild/Debug/jsc-stress-results/regress/script-tests/emscripten-cube2hash.js.ftl-eager-no-cjit lldb --

        Broadly, any arguments passed to the reproduction script are prepended to the command to
        run the test. This is sort of quirky and won't work for some tests (for example the
        profiler tests run a ruby script that runs some other stuff) but it'll work for most of
        them and that's good enough for now.

        * Scripts/run-jsc-stress-tests:

2013-10-04  Brent Fulgham  <bfulgham@apple.com>

        [Windows] Correct run-path when using 64-bit binaries.

        Reviewed by David Kilzer.

        * Scripts/webkitdirs.pm:
        (determineConfigurationProductDir): If running in 64-bit mode, use the 'bin64'
        directory. Otherwise use the existing 'bin32' directory.

2013-10-04  Brent Fulgham  <bfulgham@apple.com>

        Teach webkitdirs.pm to honor the --64-bit flag
        https://bugs.webkit.org/show_bug.cgi?id=122357

        Reviewed by David Kilzer.

        * Scripts/webkitdirs.pm:
        (argumentsForConfiguration): Modify to check if --64-bit is supplied
        by the user.
        (findMatchingArguments): Added.
        (hasArgument): Added.
        (checkForArgumentAndRemoveFromArrayRef): Refactor to use the new
        findMatchingArguments subroutine.

2013-10-04  Alexey Proskuryakov  <ap@apple.com>

        Update svn-config for new Visual Studio extensions
        https://bugs.webkit.org/show_bug.cgi?id=122344

        Reviewed by Brent Fulgham.

        * svn-config: Add new Visual Studio extensions.

2013-10-04  Alex Christensen  <achristensen@webkit.org>

        Made WinLauncher have better error handling, crash reporting, and modifiability.
        https://bugs.webkit.org/show_bug.cgi?id=122319

        Reviewed by Brent Fulgham.

        * WinLauncher/WinLauncher.cpp:
        (WinLauncherWebHost::didFailProvisionalLoadWithError):
        Don't display the numerous "Cancelled" messages that are obviously from the user.
        (createCrashReport): Added.
        (dllLauncherEntryPoint):
        Made main loop back into while loop and write a crash report if it crashes.
        * WinLauncher/WinLauncher.vcxproj/WinLauncherLib.vcxproj:
        * WinLauncher/WinLauncher.vcxproj/WinLauncherLib.vcxproj.filters:
        Added WinLauncherReplace.h.
        * WinLauncher/WinLauncher.vcxproj/WinLauncherLibCommon.props:
        Added linking to DbgHelp.lib.
        * WinLauncher/WinLauncherReplace.h:
        Added to make modifying WinLauncher behaviour and appearance easy.
        (processCrashDump): Added.

2013-10-04  Dirk Pranke  <dpranke@chromium.org>

        remove dpranke from webkitpy watchlist
        https://bugs.webkit.org/show_bug.cgi?id=122331

        Reviewed by Brent Fulgham.

        * Scripts/webkitpy/common/config/watchlist:

2013-10-04  Tim Horton  <timothy_horton@apple.com>

        [mac][wk2] ScrollPinningBehaviors, SpacebarScrolling, and ScrollByLineCommands fail after r156793
        https://bugs.webkit.org/show_bug.cgi?id=122299

        Reviewed by Beth Dakin.

        * TestWebKitAPI/Tests/WebKit2/SpacebarScrolling.cpp:
        * TestWebKitAPI/Tests/WebKit2/mac/EditorCommands.mm:
        The last fix didn't work; instead of trying to block, turn off threaded scrolling for all three tests.

2013-10-04  Alexey Proskuryakov  <ap@apple.com>

        Watchlist is broken after <http://trac.webkit.org/r156880>

        * Scripts/webkitpy/common/config/watchlist: Remove an incorrect change.

2013-10-04  Brent Fulgham  <bfulgham@apple.com>

        Remove Qt features from build and test tools
        https://bugs.webkit.org/show_bug.cgi?id=122312

        Reviewed by Anders Carlsson.

        * Scripts/build-dumprendertree:
        * Scripts/build-jsc:
        * Scripts/build-webkit:
        * Scripts/build-webkittestrunner:
        * Scripts/old-run-webkit-tests:
        (openDumpTool):
        (buildPlatformResultHierarchy):
        (buildPlatformTestHierarchy):
        (readSkippedFiles):
        * Scripts/run-launcher:
        * Scripts/run-qtwebkit-tests: Removed.
        * Scripts/run-webkit-tests:
        (useNewRunWebKitTests):
        * Scripts/update-webkit:
        * Scripts/webkit-build-directory:
        * Scripts/webkitdirs.pm:
        (argumentsForConfiguration):
        (jscProductDir):
        (builtDylibPathForName):
        (isAppleWebKit):
        (launcherPath):
        (launcherName):
        (checkRequiredSystemConfig):
        (setupCygwinEnv):
        (copyInspectorFrontendFiles):
        (setPathForRunningWebKitApp):
        * Scripts/webkitpy/common/checkout/baselineoptimizer.py:
        * Scripts/webkitpy/common/checkout/baselineoptimizer_unittest.py:
        (BaselineOptimizerTest.test_mac_future):
        (BaselineOptimizerTest.test_win_does_not_drop_to_win_7sp0):
        (BaselineOptimizerTest.test_common_directory_includes_root):
        (BaselineOptimizerTest.test_virtual_ports_filtered):
        * Scripts/webkitpy/common/checkout/changelog_unittest.py:
        (test_parse_reviewer_text):
        * Scripts/webkitpy/common/config/watchlist:
        * Scripts/webkitpy/layout_tests/run_webkit_tests_integrationtest.py:
        (PortTest.disabled_test_chromium_mac_lion_in_test_shell_mode):
        * Scripts/webkitpy/port/base.py:
        (Port.__init__):
        (Port._port_flag_for_scripts):
        (Port._wk2_port_name):
        * Scripts/webkitpy/port/builders.py:
        * Scripts/webkitpy/port/factory.py:
        (platform_options):
        (PortFactory):
        (PortFactory._default_port):
        * Scripts/webkitpy/port/factory_unittest.py:
        (FactoryTest.test_gtk):
        * Scripts/webkitpy/port/qt.py: Removed.
        * Scripts/webkitpy/port/qt_unittest.py: Removed.
        * Scripts/webkitpy/style/checker.py:
        * Scripts/webkitpy/style/checker_unittest.py:
        (GlobalVariablesTest.test_path_rules_specifier):
        * Scripts/webkitpy/style/checkers/cmake.py:
        (CMakeChecker):
        * Scripts/webkitpy/style/checkers/cpp.py:
        (_classify_include):
        (check_include_line):
        (check_identifier_name_in_declaration):
        * Scripts/webkitpy/style/checkers/cpp_unittest.py:
        (OrderOfIncludesTest.test_classify_include):
        (WebKitStyleTest.test_names):
        * Scripts/webkitpy/style/checkers/test_expectations_unittest.py:
        (TestExpectationsTestCase.test_determine_port_from_expectations_path):
        * Scripts/webkitpy/tool/commands/rebaseline_unittest.py:
        (TestRebaselineTest.test_baseline_directory):
        * Scripts/webkitpy/tool/main.py:
        (WebKitPatch):

2013-10-03  Gyuyoung Kim  <gyuyoung.kim@samsung.com>

        Unreviewed. Add myself to some watchlists.

        * Scripts/webkitpy/common/config/watchlist:

2013-10-03  Ryosuke Niwa  <rniwa@webkit.org>

        Remove Qt builders from the flakiness dashboard.

        * TestResultServer/static-dashboards/builders.jsonp:
        * TestResultServer/static-dashboards/flakiness_dashboard.js:
        * TestResultServer/static-dashboards/flakiness_dashboard_unittests.js:
        * TestResultServer/static-dashboards/loader_unittests.js:

2013-10-03  Tim Horton  <timothy_horton@apple.com>

        [mac][wk2] ScrollPinningBehaviors, SpacebarScrolling, and ScrollByLineCommands fail after r156793
        https://bugs.webkit.org/show_bug.cgi?id=122299

        Reviewed by Beth Dakin.

        * TestWebKitAPI/Tests/WebKit2/ScrollPinningBehaviors.cpp:
        Disable threaded scrolling.

        * TestWebKitAPI/Tests/WebKit2/SpacebarScrolling.cpp:
        * TestWebKitAPI/Tests/WebKit2/mac/EditorCommands.mm:
        Synchronously wait for the scrolling thread to inform the main thread of the new scroll position.

2013-10-03  Anders Carlsson  <andersca@apple.com>

        Use numeric strings in the OS version dictionary
        https://bugs.webkit.org/show_bug.cgi?id=122300

        Reviewed by Mark Rowe.

        * Scripts/webkitpy/common/system/platforminfo.py:
        (PlatformInfo._determine_mac_version):

2013-10-03  Alexey Proskuryakov  <ap@apple.com>

        Fix LeaksViewer to load leaks results from MountainLion, not Lion.

        Rubber-stamped by Tim Horton.

        * BuildSlaveSupport/build.webkit.org-config/public_html/LeaksViewer/LeaksViewer.js:
        (LeaksViewer._displayURLPrompt):

2013-10-03  Dan Bernstein  <mitz@apple.com>

        REGRESSION (r156811): Objective-C JavaScriptCore API test failing on Mountain Lion bots
        https://bugs.webkit.org/show_bug.cgi?id=122260

        Reviewed by Alexey Proskuryakov.

        For the API to work, the tests need to be compiled with a newer version of the LLVM
        compiler. Until the bots are updated to that version, disable the tests on 10.8.

        * TestWebKitAPI/Tests/mac/WebViewDidCreateJavaScriptContext.mm:

2013-10-02  Mario Sanchez Prada  <mario.prada@samsung.com>

        [ATK] Expose aria-invalid as a text attribute (not object attribute)
        https://bugs.webkit.org/show_bug.cgi?id=122015

        Reviewed by Chris Fleizach.

        Adapted DRT and WKTR to check the exposure of the aria-invalid
        attribute as a text attribute, instead of an object attribute.

        Also, done some refactoring of the code to try to keep things
        simpler and more coherent, by defining new helper functions,
        simplifying code, moving static variables and functions into
        unnammed namespaces and so on, without altering the logic other
        than for checking the text attribute for aria-invalid.

        * DumpRenderTree/atk/AccessibilityUIElementAtk.cpp:
        (coreAttributeToAtkAttribute): Consider 'invalid' as the name of
        the attribute exposed by the ATK wrapper, not 'aria-invalid'.
        Also, never return an empty string if not falling through any of
        the cases checked here, and return the original attribute instead.
        (atkAttributeValueToCoreAttributeValue): New helper function to
        match the attributes values returned by the ATK wrapper with the
        values expected by the layout tests. Moved the mappings for the
        values of AXSortDirection here as well.
        (getAttributeSet): New helper function to retrieve a list of
        attributes (an AtkAttributeSet) from an AtkObject using the right
        API depending on whether we want the object attributes or the text
        attributes (in case the object implements AtkText).
        (getAttributeSetValueForId): Simplified by using getAttributeSet
        and atkAttributeValueToCoreAttributeValue. Also, added a new
        parameter to indicater whether we are interested in object
        attributes or text attributes.
        (getAtkAttributeSetAsString): Ditto.
        (attributesOfElement): Updated to pass the new required parameter
        to getAtkAttributeSetAsString, indicating that we want the object
        attributes in this case, for backwards compatibility.
        (indexRangeInTable): Moved up in the file into the unnammed namespace.
        (alterCurrentValue): Ditto.
        (AccessibilityUIElement::stringAttributeValue): After moving most
        of the code here to the new helper functions, simplified it by
        just checking whether the required attribute is provided as an
        object attribute or, if that's not the case, as a text attribute.
        (AccessibilityUIElement::isAttributeSupported): Ditto.
        (AccessibilityUIElement::intValue): Updated to pass the new
        required parameter to getAttributeSetValueForId, indicating that
        we want the object attributes in this case.
        (AccessibilityUIElement::hasPopup): Ditto.

        * WebKitTestRunner/InjectedBundle/atk/AccessibilityUIElementAtk.cpp:
        (WTR::coreAttributeToAtkAttribute): Same changes than for DRT.
        (WTR::atkAttributeValueToCoreAttributeValue): Ditto.
        (WTR::getAttributeSet): Ditto.
        (WTR::getAttributeSetValueForId): Ditto.
        (WTR::getAtkAttributeSetAsString): Ditto.
        (WTR::attributesOfElement): Ditto.
        (WTR::AccessibilityUIElement::stringAttributeValue): Ditto.
        (WTR::AccessibilityUIElement::isAttributeSupported): Ditto.
        (WTR::AccessibilityUIElement::intValue): Ditto.
        (WTR::AccessibilityUIElement::hasPopup): Ditto.

2013-10-02  Ryosuke Niwa  <rniwa@webkit.org>

        EWS build fix after the Qt EWS removal.

        * QueueStatusServer/model/attachment.py:
        (Attachment._calculate_queue_positions):

2013-10-02  Anders Carlsson  <andersca@apple.com>

        Remove Qt code from Tools/
        https://bugs.webkit.org/show_bug.cgi?id=122227

        Reviewed by Andreas Kling.

        * DumpRenderTree/WorkQueue.cpp:
        * DumpRenderTree/blackberry/src.pro: Removed.
        * DumpRenderTree/qt/DumpRenderTree.pro: Removed.
        * DumpRenderTree/qt/DumpRenderTree.qrc: Removed.
        * DumpRenderTree/qt/DumpRenderTreeMain.cpp: Removed.
        * DumpRenderTree/qt/DumpRenderTreeQt.cpp: Removed.
        * DumpRenderTree/qt/DumpRenderTreeQt.h: Removed.
        * DumpRenderTree/qt/EventSenderQt.cpp: Removed.
        * DumpRenderTree/qt/EventSenderQt.h: Removed.
        * DumpRenderTree/qt/GCControllerQt.cpp: Removed.
        * DumpRenderTree/qt/TestNetscapePlugin/TestNetscapePlugin.pro: Removed.
        * DumpRenderTree/qt/TestRunnerQt.cpp: Removed.
        * DumpRenderTree/qt/TestRunnerQt.h: Removed.
        * DumpRenderTree/qt/TextInputControllerQt.cpp: Removed.
        * DumpRenderTree/qt/TextInputControllerQt.h: Removed.
        * DumpRenderTree/qt/WorkQueueItemQt.cpp: Removed.
        * DumpRenderTree/qt/WorkQueueItemQt.h: Removed.
        * DumpRenderTree/qt/fonts/AHEM____.TTF: Removed.
        * DumpRenderTree/qt/resources/user.css: Removed.
        * DumpRenderTree/qt/testplugin.cpp: Removed.
        * DumpRenderTree/qt/testplugin.h: Removed.
        * ImageDiff/ImageDiff.pro: Removed.
        * ImageDiff/qt/ImageDiff.cpp: Removed.
        * MiniBrowser/qt/BrowserWindow.cpp: Removed.
        * MiniBrowser/qt/BrowserWindow.h: Removed.
        * MiniBrowser/qt/MiniBrowser.pro: Removed.
        * MiniBrowser/qt/MiniBrowser.qrc: Removed.
        * MiniBrowser/qt/MiniBrowserApplication.cpp: Removed.
        * MiniBrowser/qt/MiniBrowserApplication.h: Removed.
        * MiniBrowser/qt/UrlLoader.cpp: Removed.
        * MiniBrowser/qt/UrlLoader.h: Removed.
        * MiniBrowser/qt/icons/checkbox_checked.png: Removed.
        * MiniBrowser/qt/icons/checkbox_unchecked.png: Removed.
        * MiniBrowser/qt/icons/contents_width.png: Removed.
        * MiniBrowser/qt/icons/favicon.png: Removed.
        * MiniBrowser/qt/icons/find.png: Removed.
        * MiniBrowser/qt/icons/folder.png: Removed.
        * MiniBrowser/qt/icons/info.png: Removed.
        * MiniBrowser/qt/icons/next.png: Removed.
        * MiniBrowser/qt/icons/plus.png: Removed.
        * MiniBrowser/qt/icons/previous.png: Removed.
        * MiniBrowser/qt/icons/refresh.png: Removed.
        * MiniBrowser/qt/icons/stop.png: Removed.
        * MiniBrowser/qt/icons/titlebar.png: Removed.
        * MiniBrowser/qt/icons/touch.png: Removed.
        * MiniBrowser/qt/icons/touchpoint.png: Removed.
        * MiniBrowser/qt/icons/up.png: Removed.
        * MiniBrowser/qt/js/MultiSelect.js: Removed.
        * MiniBrowser/qt/main.cpp: Removed.
        * MiniBrowser/qt/qml/AlertDialog.qml: Removed.
        * MiniBrowser/qt/qml/AuthenticationDialog.qml: Removed.
        * MiniBrowser/qt/qml/BrowserWindow.qml: Removed.
        * MiniBrowser/qt/qml/CheckBox.qml: Removed.
        * MiniBrowser/qt/qml/ColorChooser.qml: Removed.
        * MiniBrowser/qt/qml/ConfirmDialog.qml: Removed.
        * MiniBrowser/qt/qml/Dialog.qml: Removed.
        * MiniBrowser/qt/qml/DialogButton.qml: Removed.
        * MiniBrowser/qt/qml/DialogLineInput.qml: Removed.
        * MiniBrowser/qt/qml/FilePicker.qml: Removed.
        * MiniBrowser/qt/qml/ItemSelector.qml: Removed.
        * MiniBrowser/qt/qml/MockTouchPoint.qml: Removed.
        * MiniBrowser/qt/qml/PromptDialog.qml: Removed.
        * MiniBrowser/qt/qml/ProxyAuthenticationDialog.qml: Removed.
        * MiniBrowser/qt/qml/ScrollIndicator.qml: Removed.
        * MiniBrowser/qt/qml/ViewportInfoItem.qml: Removed.
        * MiniBrowser/qt/raw/DerivedSources.pri: Removed.
        * MiniBrowser/qt/raw/MiniBrowserRaw.pro: Removed.
        * MiniBrowser/qt/raw/Target.pri: Removed.
        * MiniBrowser/qt/raw/View.cpp: Removed.
        * MiniBrowser/qt/raw/View.h: Removed.
        * MiniBrowser/qt/utils.cpp: Removed.
        * MiniBrowser/qt/utils.h: Removed.
        * QtTestBrowser/QtTestBrowser.pro: Removed.
        * QtTestBrowser/QtTestBrowser.qrc: Removed.
        * QtTestBrowser/cookiejar.cpp: Removed.
        * QtTestBrowser/cookiejar.h: Removed.
        * QtTestBrowser/favicon.png: Removed.
        * QtTestBrowser/fpstimer.cpp: Removed.
        * QtTestBrowser/fpstimer.h: Removed.
        * QtTestBrowser/launcherwindow.cpp: Removed.
        * QtTestBrowser/launcherwindow.h: Removed.
        * QtTestBrowser/locationedit.cpp: Removed.
        * QtTestBrowser/locationedit.h: Removed.
        * QtTestBrowser/mainwindow.cpp: Removed.
        * QtTestBrowser/mainwindow.h: Removed.
        * QtTestBrowser/qttestbrowser.cpp: Removed.
        * QtTestBrowser/urlloader.cpp: Removed.
        * QtTestBrowser/urlloader.h: Removed.
        * QtTestBrowser/useragentlist.txt: Removed.
        * QtTestBrowser/utils.cpp: Removed.
        * QtTestBrowser/utils.h: Removed.
        * QtTestBrowser/webinspector.h: Removed.
        * QtTestBrowser/webpage.cpp: Removed.
        * QtTestBrowser/webpage.h: Removed.
        * QtTestBrowser/webview.cpp: Removed.
        * QtTestBrowser/webview.h: Removed.
        * TestWebKitAPI/DerivedSources.pri: Removed.
        * TestWebKitAPI/InjectedBundle.pri: Removed.
        * TestWebKitAPI/PlatformWebView.h:
        * TestWebKitAPI/TestWebKitAPI.pri: Removed.
        * TestWebKitAPI/TestWebKitAPI.pro: Removed.
        * TestWebKitAPI/Tests.pri: Removed.
        * TestWebKitAPI/Tests/JavaScriptCore/JavaScriptCore.pro: Removed.
        * TestWebKitAPI/Tests/WTF/IntegerToStringConversion.cpp:
        * TestWebKitAPI/Tests/WTF/WTF.pro: Removed.
        * TestWebKitAPI/Tests/WebKit2/WebKit2.pro: Removed.
        * TestWebKitAPI/qt/InjectedBundleControllerQt.cpp: Removed.
        * TestWebKitAPI/qt/PlatformUtilitiesQt.cpp: Removed.
        * TestWebKitAPI/qt/PlatformWebViewQt.cpp: Removed.
        * TestWebKitAPI/qt/main.cpp: Removed.
        * Tools.pro: Removed.
        * WebKitTestRunner/DerivedSources.pri: Removed.
        * WebKitTestRunner/EventSenderProxy.h:
        * WebKitTestRunner/InjectedBundle/DerivedSources.pri: Removed.
        * WebKitTestRunner/InjectedBundle/InjectedBundle.pro: Removed.
        * WebKitTestRunner/InjectedBundle/InjectedBundlePage.cpp:
        (WTR::InjectedBundlePage::resetAfterTest):
        (WTR::InjectedBundlePage::dumpDOMAsWebArchive):
        (WTR::InjectedBundlePage::didClearWindowForFrame):
        * WebKitTestRunner/InjectedBundle/Target.pri: Removed.
        * WebKitTestRunner/InjectedBundle/TestRunner.h:
        * WebKitTestRunner/InjectedBundle/qt/ActivateFontsQt.cpp: Removed.
        * WebKitTestRunner/InjectedBundle/qt/InjectedBundleQt.cpp: Removed.
        * WebKitTestRunner/InjectedBundle/qt/TestRunnerQt.cpp: Removed.
        * WebKitTestRunner/PlatformWebView.h:
        * WebKitTestRunner/Target.pri: Removed.
        * WebKitTestRunner/TestController.cpp:
        (WTR::TestController::resetStateToConsistentValues):
        * WebKitTestRunner/TestController.h:
        * WebKitTestRunner/WebKitTestRunner.pro: Removed.
        * WebKitTestRunner/qt/EventSenderProxyQt.cpp: Removed.
        * WebKitTestRunner/qt/PlatformWebViewQt.cpp: Removed.
        * WebKitTestRunner/qt/TestControllerQt.cpp: Removed.
        * WebKitTestRunner/qt/TestInvocationQt.cpp: Removed.
        * WebKitTestRunner/qt/WebKitTestRunner.qrc: Removed.
        * WebKitTestRunner/qt/main.cpp: Removed.
        * WebKitTestRunner/qt/resources/user.css: Removed.
        * qmake/.qmake.cache: Removed.
        * qmake/.qmake.conf: Removed.
        * qmake/README: Removed.
        * qmake/config.tests/README: Removed.
        * qmake/config.tests/fontconfig/fontconfig.cpp: Removed.
        * qmake/config.tests/fontconfig/fontconfig.pro: Removed.
        * qmake/config.tests/gccdepends/empty.cpp: Removed.
        * qmake/config.tests/gccdepends/gccdepends.pro: Removed.
        * qmake/config.tests/glx/glx.cpp: Removed.
        * qmake/config.tests/glx/glx.pro: Removed.
        * qmake/config.tests/gnuld/gnuld.pro: Removed.
        * qmake/config.tests/gnuld/main.cpp: Removed.
        * qmake/config.tests/libXcomposite/libXcomposite.cpp: Removed.
        * qmake/config.tests/libXcomposite/libXcomposite.pro: Removed.
        * qmake/config.tests/libXrender/libXrender.cpp: Removed.
        * qmake/config.tests/libXrender/libXrender.pro: Removed.
        * qmake/config.tests/libwebp/libwebp.cpp: Removed.
        * qmake/config.tests/libwebp/libwebp.pro: Removed.
        * qmake/config.tests/libxml2/libxml2.cpp: Removed.
        * qmake/config.tests/libxml2/libxml2.pro: Removed.
        * qmake/config.tests/libxslt/libxslt.cpp: Removed.
        * qmake/config.tests/libxslt/libxslt.pro: Removed.
        * qmake/config.tests/libzlib/libzlib.cpp: Removed.
        * qmake/config.tests/libzlib/libzlib.pro: Removed.
        * qmake/dump-features.pl: Removed.
        * qmake/mkspecs/features/configure.prf: Removed.
        * qmake/mkspecs/features/default_post.prf: Removed.
        * qmake/mkspecs/features/default_pre.prf: Removed.
        * qmake/mkspecs/features/features.prf: Removed.
        * qmake/mkspecs/features/features.pri: Removed.
        * qmake/mkspecs/features/force_static_libs_as_shared.prf: Removed.
        * qmake/mkspecs/features/functions.prf: Removed.
        * qmake/mkspecs/features/gprof.prf: Removed.
        * qmake/mkspecs/features/mac/default_post.prf: Removed.
        * qmake/mkspecs/features/mac/default_pre.prf: Removed.
        * qmake/mkspecs/features/minimal_qt.prf: Removed.
        * qmake/mkspecs/features/production_build.prf: Removed.
        * qmake/mkspecs/features/rpath.prf: Removed.
        * qmake/mkspecs/features/unix/default_post.prf: Removed.
        * qmake/mkspecs/features/unix/default_pre.prf: Removed.
        * qmake/mkspecs/features/unix/icc.prf: Removed.
        * qmake/mkspecs/features/use_all_in_one_files.prf: Removed.
        * qmake/mkspecs/features/valgrind.prf: Removed.
        * qmake/mkspecs/features/webkit_modules.prf: Removed.
        * qmake/mkspecs/features/win32/default_post.prf: Removed.
        * qmake/mkspecs/features/win32/default_pre.prf: Removed.
        * qmake/mkspecs/modules/angle.prf: Removed.
        * qmake/mkspecs/modules/javascriptcore.prf: Removed.
        * qmake/mkspecs/modules/webcore.prf: Removed.
        * qmake/mkspecs/modules/webkit1.prf: Removed.
        * qmake/mkspecs/modules/webkit2.prf: Removed.
        * qmake/mkspecs/modules/wtf.prf: Removed.

2013-10-02  Tim Horton  <timothy_horton@apple.com>

        [mac] Stop using DrawingAreaImpl on PLATFORM(MAC) 
        https://bugs.webkit.org/show_bug.cgi?id=121859
        <rdar://problem/15069359>

        Reviewed by Anders Carlsson.

        * WebKitTestRunner/TestInvocation.cpp:
        (WTR::shouldUseThreadedScrolling):
        (WTR::updateThreadedScrollingForCurrentTest):
        (WTR::TestInvocation::invoke):
        * WebKitTestRunner/mac/PlatformWebViewMac.mm:
        (-[TestRunnerWKView initWithFrame:contextRef:pageGroupRef:relatedToPage:useThreadedScrolling:]):
        (WTR::PlatformWebView::PlatformWebView):
        (WTR::PlatformWebView::viewSupportsOptions):
        Rename the tiled drawing switch to threaded scrolling, since that's really
        all it switches now that we use tiled drawing everywhere.

        Use an unbuffered window, as well, to avoid snapshotting issues on some platforms
        and to more closely match the case we're interested in testing.

2013-10-02  Anders Carlsson  <andersca@apple.com>

        Move AHEM____.TTF from qt/fonts/ to fonts/.

        Rubber-stamped by Andreas Kling.

        * DumpRenderTree/DumpRenderTree.xcodeproj/project.pbxproj:
        * DumpRenderTree/fonts/AHEM____.TTF: Renamed from Tools/DumpRenderTree/qt/fonts/AHEM____.TTF.

2013-10-02  Ádám Kallai  <kadam@inf.u-szeged.hu>

        Remove Qt bots and EWS from trunk.
        https://bugs.webkit.org/show_bug.cgi?id=122210.

        Reviewed by Allan Sandfeld Jensen.

        Remove Qt buil dbots.

        * BuildSlaveSupport/build.webkit.org-config/config.json:
        * BuildSlaveSupport/build.webkit.org-config/master.cfg:
        (appendCustomBuildFlags):
        (RunGtkAPITests.getText2):
        (Factory.__init__):
        (TestFactory.__init__):
        (BuildAndTestFactory.__init__):
        (loadBuilderConfig):
        * BuildSlaveSupport/build.webkit.org-config/mastercfg_unittest.py:

2013-10-02  Ádám Kallai  <kadam@inf.u-szeged.hu>

        Remove Qt bots and EWS from trunk.
        https://bugs.webkit.org/show_bug.cgi?id=122210.

        Reviewed by Allan Sandfeld Jensen.

        Remove Qt EWS bots.

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

2013-10-01  Timothy Hatcher  <timothy@apple.com>

        Fix singular labels for test failures.

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

        Reviewed by Joseph Pecoraro.

        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Scripts/BuildbotTesterQueueView.js:
        (BuildbotTesterQueueView.prototype.update.appendBuilderQueueStatus):

2013-10-01  Timothy Hatcher  <timothy@apple.com>

        Don't keep appending iterations each time the queue updates.

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

        Reviewed by Joseph Pecoraro.

        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Scripts/BuildbotQueue.js:
        (BuildbotQueue.prototype.update):

2013-10-01  Timothy Hatcher  <timothy@apple.com>

        Properly sort iterations in the Dashboard by revision for out-of-order queues.

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

        Reviewed by Brent Fulgham.

        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Scripts/BuildbotIteration.js:
        (BuildbotIteration):
        (BuildbotIteration.prototype.update):
        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Scripts/BuildbotQueue.js:
        (BuildbotQueue.prototype.update):
        (BuildbotQueue.prototype.sortIterations):

2013-10-01  Timothy Hatcher  <timothy@apple.com>

        Fix some exceptions seen in the Buildbot Dashboard when looking at unloaded iterations.

        Also fix some URLs to not have extras slashes and add a page title.

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

        Reviewed by Joseph Pecoraro.

        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Scripts/BuildbotTesterQueueView.js:
        (BuildbotTesterQueueView.prototype.update.appendBuilderQueueStatus):
        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Scripts/WebKitBuildbot.js:
        (WebKitBuildbot.prototype.buildLogURLForIteration):
        (WebKitBuildbot.prototype.layoutTestResultsURLForIteration):
        (WebKitBuildbot.prototype.javascriptTestResultsURLForIteration):
        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/index.html:

2013-10-01  Alexey Proskuryakov  <ap@apple.com>

        [Mac] Set NSApplication current event while sending events directly to views
        https://bugs.webkit.org/show_bug.cgi?id=122179

        Reviewed by Darin Adler.

        DumpRenderTree and WebKitTestRunner send events directly to WebHMTLView or WKView,
        which doesn't update [NSApp currentEvent]. But there are many places in WebKit that
        use the current event.

        * DumpRenderTree/mac/EventSendingController.mm:
        (-[EventSendingController mouseDown:withModifiers:]):
        (-[EventSendingController mouseUp:withModifiers:]):
        (-[EventSendingController mouseMoveToX:Y:]):
        (-[EventSendingController mouseScrollByX:andY:continuously:]):
        (-[EventSendingController contextClick]):
        (-[EventSendingController keyDown:withModifiers:withLocation:]):
        * WebKitTestRunner/mac/EventSenderProxy.mm:
        (WTR::EventSenderProxy::mouseDown):
        (WTR::EventSenderProxy::mouseUp):
        (WTR::EventSenderProxy::mouseMoveTo):
        (WTR::EventSenderProxy::keyDown):
        (WTR::EventSenderProxy::mouseScrollBy):
        Update the current event. We were already using the SPI in WebKit.

2013-10-01  Joseph Pecoraro  <pecoraro@apple.com>

        Buildbot Dashboard: Fix JSHint issue: 'perlTestResults' used out of scope.
        https://bugs.webkit.org/show_bug.cgi?id=122183

        Reviewed by Timothy Hatcher.

        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Scripts/BuildbotIteration.js:
        (BuildbotIteration.prototype.update):

2013-10-01  Timothy Hatcher  <timothy@apple.com>

        Tweaks to the Buildbot Dashboard

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

        Reviewed by Alexey Proskuryakov.

        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Scripts/BuildbotBuilderQueueView.js:
        (BuildbotBuilderQueueView.prototype.update.appendBuilderQueueStatus):
        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Scripts/BuildbotQueueView.js:
        (BuildbotQueueView.prototype.revisionLinksForIteration):
        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Scripts/BuildbotTesterQueueView.js:
        (BuildbotTesterQueueView.prototype.update.appendBuilderQueueStatus):
        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Scripts/Initialization.js: Added.
        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Scripts/Main.js:
        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Scripts/WebKitBuildbot.js:
        (WebKitBuildbot.prototype.buildLogURLForIteration):
        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/index.html:

2013-10-01  Commit Queue  <commit-queue@webkit.org>

        Unreviewed, rolling out r156725.
        http://trac.webkit.org/changeset/156725
        https://bugs.webkit.org/show_bug.cgi?id=122176

        broke all the mismatch tests again (Requested by thorton on
        #webkit).

        * WebKitTestRunner/mac/PlatformWebViewMac.mm:
        (WTR::PlatformWebView::PlatformWebView):

2013-10-01  Alex Christensen  <achristensen@webkit.org>

        Implemented createWebViewWithRequest in WinLauncher.
        https://bugs.webkit.org/show_bug.cgi?id=122069

        Reviewed by Brent Fulgham.

        * WinLauncher/PrintWebUIDelegate.cpp:
        (PrintWebUIDelegate::createWebViewWithRequest): Added.
        * WinLauncher/PrintWebUIDelegate.h:
        Removed createWebViewWithRequest stub.

2013-10-01  Tim Horton  <timothy_horton@apple.com>

        [wk2] WebKitTestRunner's window snapshots are blank with tiled drawing
        https://bugs.webkit.org/show_bug.cgi?id=122006
        <rdar://problem/15095197>

        Reviewed by Dean Jackson.

        * WebKitTestRunner/mac/PlatformWebViewMac.mm:
        (WTR::PlatformWebView::PlatformWebView):
        Layer-back the root view in WebKitTestRunner's window, to work around a bug
        where the window server snapshot API returns blank snapshots.

        Re-landing after r156724, this should not break everything now.

2013-10-01  Tim Horton  <timothy_horton@apple.com>

        [mac] 1x emulation on Retina hardware shouldn't use SPI
        https://bugs.webkit.org/show_bug.cgi?id=122152
        <rdar://problem/15119384>

        Reviewed by Anders Carlsson.

        * DumpRenderTree/mac/DumpRenderTree.mm:
        (createWebViewAndOffscreenWindow):
        (main):
        * DumpRenderTree/mac/DumpRenderTreeWindow.h:
        * DumpRenderTree/mac/DumpRenderTreeWindow.mm:
        * WebKitTestRunner/mac/PlatformWebViewMac.mm:
        (WTR::PlatformWebView::PlatformWebView):
        * WebKitTestRunner/mac/main.mm:
        (main):
        Register for AppleMagnifiedMode instead of using _setWindowResolution:displayIfChanged:.

2013-09-30  Sam Weinig  <sam@webkit.org>

        check-webkit-style should not warn about use of C++11 “>>”  instead of “> >"
        https://bugs.webkit.org/show_bug.cgi?id=116474

        Reviewed by Ryosuke Niwa.

        * Scripts/webkitpy/style/checkers/cpp.py:
        * Scripts/webkitpy/style/checkers/cpp_unittest.py:

2013-09-30  Sam Weinig  <sam@webkit.org>

        Remove support for DOMFileSystem
        https://bugs.webkit.org/show_bug.cgi?id=122137

        Reviewed by Anders Carlsson.

        * Scripts/webkitperl/FeatureList.pm:
        * Scripts/webkitpy/style/checkers/cpp.py:
        (check_spacing):
        * Scripts/webkitpy/style/checkers/cpp_unittest.py:
        (CppStyleTest.test_spacing_for_binary_ops):
        * qmake/mkspecs/features/features.pri:

2013-09-30  Mark Rowe  <mrowe@apple.com>

        More build fixage for builds with SDKs.

        * WebKitTestRunner/Configurations/Base.xcconfig:
        * WebKitTestRunner/Configurations/BaseTarget.xcconfig:

2013-09-30  Timothy Hatcher  <timothy@apple.com>

        Add initial version of a new Buildbot dashboard view.

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

        Reviewed by Alexey Proskuryakov.

        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Images/Lion.png: Added.
        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Images/Lion@2x.png: Added.
        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Images/Mavericks.png: Added.
        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Images/Mavericks@2x.png: Added.
        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Images/MountainLion.png: Added.
        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Images/MountainLion@2x.png: Added.
        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Images/PlatformRing.png: Added.
        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Images/PlatformRing@2x.png: Added.
        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Images/Windows7.png: Added.
        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Images/Windows7@2x.png: Added.
        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Images/Windows8.png: Added.
        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Images/Windows8@2x.png: Added.
        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Images/WindowsXP.png: Added.
        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Images/WindowsXP@2x.png: Added.
        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Scripts/BaseObject.js: Added.
        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Scripts/Buildbot.js: Added.
        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Scripts/BuildbotBuilderQueueView.js: Added.
        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Scripts/BuildbotIteration.js: Added.
        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Scripts/BuildbotQueue.js: Added.
        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Scripts/BuildbotQueueView.js: Added.
        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Scripts/BuildbotTestResults.js: Added.
        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Scripts/BuildbotTesterQueueView.js: Added.
        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Scripts/Main.js: Added.
        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Scripts/StatusLineView.js: Added.
        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Scripts/Utilities.js: Added.
        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Scripts/WebKitBuildbot.js: Added.
        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Styles/BuildbotBuilderQueueView.css: Added.
        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Styles/BuildbotQueueView.css: Added.
        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Styles/BuildbotTesterQueueView.css: Added.
        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Styles/Main.css: Added.
        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Styles/StatusLineView.css: Added.
        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/index.html: Added.

2013-09-30  Benjamin Poulain  <benjamin@webkit.org>

        Remove the code guarded by STYLE_SCOPED
        https://bugs.webkit.org/show_bug.cgi?id=122123

        Reviewed by Anders Carlsson.

        * DumpRenderTree/gtk/DumpRenderTree.cpp:
        (resetDefaultsToConsistentValues):
        * Scripts/webkitperl/FeatureList.pm:
        * qmake/mkspecs/features/features.pri:

2013-09-30  Mark Rowe  <mrowe@apple.com>

        Fix the build when building against an SDK.

        Xcode helpfully prepends $(SDKROOT) to the paths in FRAMEWORK_SEARCH_PATHS when generating
        the compiler command lines. It can't know to do this for the system framework search paths
        we add manually via OTHER_CFLAGS though, so we need to prefix them with $(SDKROOT) ourself.

        * DumpRenderTree/mac/Configurations/BaseTarget.xcconfig:
        * WebKitTestRunner/Configurations/BaseTarget.xcconfig:

2013-09-30  Brent Fulgham  <bfulgham@apple.com>

        [Windows] Unreviewed test fix. Prevent crash when changing URL paths during testing.

        A shared BSTR value (_bstr_t) was being reallocated outside the smart pointer, causing
        it to be double-freed.

        * WinLauncher/WinLauncher.cpp:
        (EditProc): Be explicit about type passed to loadURL.
        (loadURL): Create a shallow copy of the BSTR so we only allocate memory if needed. Use _bstr_t so
        that reallocating the BSTR is done with the knowledge of the smart pointer.

2013-09-30  Allan Sandfeld Jensen  <allan.jensen@digia.com>

        [Qt] Fix force_static_libs_as_shared in WebKit2
        https://bugs.webkit.org/show_bug.cgi?id=121961

        Reviewed by Csaba Osztrogonác.

        Get rid of the unused WebKit2QML library

        * qmake/mkspecs/features/webkit_modules.prf:
        * qmake/mkspecs/modules/webkit2qml.prf: Removed.

2013-09-30  Krzysztof Wolanski  <k.wolanski@samsung.com>

        [EFL] Fix incorrect click counting in EventSenderProxy
        https://bugs.webkit.org/show_bug.cgi?id=122098

        Reviewed by Gyuyoung Kim.

        Previously used two types of recording time, which conflicted with each other.

        * WebKitTestRunner/efl/EventSenderProxyEfl.cpp:
        (WTR::EventSenderProxy::mouseUp):

2013-09-30  Zan Dobersek  <zdobersek@igalia.com>

        [webkitpy] Make the Xvfb screen depth overridable
        https://bugs.webkit.org/show_bug.cgi?id=122089

        Reviewed by Gyuyoung Kim.

        Make the Xvfb screen depth overridable by checking if the XVFB_SCREEN_DEPTH environment variable
        was set. The default value that's used if the variable wasn't set is 24.

        * Scripts/webkitpy/port/xvfbdriver.py:
        (XvfbDriver._xvfb_screen_depth):
        (XvfbDriver._start):
        * Scripts/webkitpy/port/xvfbdriver_unittest.py:
        (XvfbDriverTest.make_driver):
        (XvfbDriverTest.test_start_no_pixel_tests):
        (XvfbDriverTest.test_start_pixel_tests):
        (XvfbDriverTest.test_start_arbitrary_worker_number):
        (XvfbDriverTest.test_next_free_display):
        (XvfbDriverTest.test_start_next_worker):

2013-09-29  Mark Rowe  <mrowe@apple.com>

        Fix the Lion build.

        Ensure that C++ and Objective-C++ files build with the right compiler flags.

        * DumpRenderTree/mac/Configurations/BaseTarget.xcconfig:
        * WebKitTestRunner/Configurations/BaseTarget.xcconfig:

2013-09-28  Mark Rowe  <mrowe@apple.com>

        Fix some failures with newer versions of clang.

        Some CoreGraphics headers generate warnings under newer versions of clang. Since they're system headers the warnings would
        usually be suppressed, but we're adding the frameworks to the non-system framework search path so they're no longer treated
        as system headers. We address this by removing the system paths from FRAMEWORK_SEARCH_PATHS and using the -iframework compiler
        flag in OTHER_CFLAGS to add the paths to the system framework search path. We have to set OTHER_CFLAGS at the target level
        in order for it to coexist with the ASAN-related OTHER_CFLAGS that's set in DebugRelease.xcconfig.

        Reviewed by Dan Bernstein.

        * DumpRenderTree/mac/Configurations/Base.xcconfig:
        * DumpRenderTree/mac/Configurations/BaseTarget.xcconfig: A new .xcconfig file that's included by all target-specific .xcconfig files.
        * DumpRenderTree/mac/Configurations/DebugRelease.xcconfig:
        * DumpRenderTree/mac/Configurations/DumpRenderTree.xcconfig:
        * DumpRenderTree/mac/Configurations/ImageDiff.xcconfig:
        * DumpRenderTree/mac/Configurations/TestNetscapePlugIn.xcconfig:
        * WebKitTestRunner/Configurations/Base.xcconfig:
        * WebKitTestRunner/Configurations/BaseTarget.xcconfig: A new .xcconfig file that's included by all target-specific .xcconfig files.
        * WebKitTestRunner/Configurations/DebugRelease.xcconfig:
        * WebKitTestRunner/Configurations/InjectedBundle.xcconfig:
        * WebKitTestRunner/Configurations/WebKitTestRunner.xcconfig:

2013-09-27  Commit Queue  <commit-queue@webkit.org>

        Unreviewed, rolling out r156569.
        http://trac.webkit.org/changeset/156569
        https://bugs.webkit.org/show_bug.cgi?id=122035

        broke a lot of mismatch tests (Requested by thorton on
        #webkit).

        * WebKitTestRunner/mac/PlatformWebViewMac.mm:
        (WTR::PlatformWebView::PlatformWebView):

2013-09-27  Alexey Proskuryakov  <ap@apple.com>

        Don't retry failures on Apple MountainLion Release WK1 tester
        https://bugs.webkit.org/show_bug.cgi?id=122026

        Reviewed by Mark Rowe.

        * BuildSlaveSupport/build.webkit.org-config/config.json: Added --no-retry-failures
        on this bot.

2013-09-27  Alexey Proskuryakov  <ap@apple.com>

        Don't hardcode builder specific configuration in buildbot master.cfg
        https://bugs.webkit.org/show_bug.cgi?id=122023

        Reviewed by Mark Rowe.

        * BuildSlaveSupport/build.webkit.org-config/config.json: Added an additionalArguments
        property to Qt Mountain Lion Release, making it run pixel tests.

        * BuildSlaveSupport/build.webkit.org-config/master.cfg:
        (RunWebKitTests.start): Use additionalArguments.
        (RunWebKit2Tests.start): Don't hardcode individual bot behavior here.

2013-09-27  Tim Horton  <timothy_horton@apple.com>

        [wk2] WebKitTestRunner's window snapshots are blank with tiled drawing
        https://bugs.webkit.org/show_bug.cgi?id=122006
        <rdar://problem/15095197>

        Reviewed by Dean Jackson.

        * WebKitTestRunner/mac/PlatformWebViewMac.mm:
        (WTR::PlatformWebView::PlatformWebView):
        Layer-back the root view in WebKitTestRunner's window, to work around a bug
        where the window server snapshot API returns blank snapshots.

2013-09-27  Mario Sanchez Prada  <mario.prada@samsung.com>

        [GTK] GTK does not expose heading level correctly. Was: accessibility/heading-level.html is failing
        https://bugs.webkit.org/show_bug.cgi?id=106924

        Reviewed by Chris Fleizach.

        Consider headings levels as values to be returned in intValue()
        both in DRT and WKTR, so we can share more tests with other ports.

        * DumpRenderTree/atk/AccessibilityUIElementAtk.cpp:
        (AccessibilityUIElement::intValue): Consider headings too.
        * WebKitTestRunner/InjectedBundle/atk/AccessibilityUIElementAtk.cpp:
        (WTR::AccessibilityUIElement::intValue): Ditto.

2013-09-26  Darin Adler  <darin@apple.com>

        rename KURL to URL
        https://bugs.webkit.org/show_bug.cgi?id=16214

        Reviewed by Andreas Kling.

        * many files: Renamed, using script.

2013-09-27  Darin Adler  <darin@apple.com>

        Fix Python scripts test failures.

        * Scripts/webkitpy/style/checkers/cpp.py:
        (_FunctionState.modifiers_and_return_type): Added this back. Used only by tests
        now, not by the checker itself.

2013-09-27  Denis Nomiyama  <d.nomiyama@samsung.com>

        [GTK][WK2] Logging of accessibility events is not disabled between tests
        https://bugs.webkit.org/show_bug.cgi?id=121957

        Reviewed by Mario Sanchez Prada.

        Fixed an issue in AccessibilityNotificationHandler where the destructor
        was not disconnecting accessibility event callbacks if logging was on.
        The decision of disconnecting events can solely rely on the existence of
        notification handlers because logging uses the global notification
        handler.

        * WebKitTestRunner/InjectedBundle/atk/AccessibilityNotificationHandlerAtk.cpp:
        (WTR::AccessibilityNotificationHandler::disconnectAccessibilityCallbacks): Fixed
        disconnection when logging is on.

2013-09-27  Patrick Gansterer  <paroga@webkit.org>

        Add general CMakeLists.txt for DRT
        https://bugs.webkit.org/show_bug.cgi?id=119268

        Reviewed by Gyuyoung Kim.

        The new file allows better sharing between ports.

        * CMakeLists.txt:
        * DumpRenderTree/CMakeLists.txt: Added.
        * DumpRenderTree/PlatformEfl.cmake: Added.
        * DumpRenderTree/efl/CMakeLists.txt: Removed.

2013-09-27  Allan Sandfeld Jensen  <allan.jensen@digia.com>

        [Qt] Fix force_static_libs_as_shared in WebKit2
        https://bugs.webkit.org/show_bug.cgi?id=121961

        Reviewed by Csaba Osztrogonác.

        Reenable force_static_libs_as_shared when building WebKit2.

        * qmake/mkspecs/features/default_post.prf:

2013-09-27  Allan Sandfeld Jensen  <allan.jensen@digia.com>

        [Qt] Mock implementations of positioning and orientation not used
        https://bugs.webkit.org/show_bug.cgi?id=121956

        Reviewed by Csaba Osztrogonác.

        Move production_build checks to sanitizeFeatures where its value is actually known.

        * qmake/mkspecs/features/features.prf:
        * qmake/mkspecs/features/features.pri:

2013-09-27  Mario Sanchez Prada  <mario.prada@samsung.com>

        [ATK] Normalize checks in entry points for DRT and WKTR
        https://bugs.webkit.org/show_bug.cgi?id=121959

        Reviewed by Chris Fleizach.

        Always check if we have a proper instance of AtkObject,
        implementing the interfaces that we might need for each case, at
        the entry point of every method of AccessibilityUIElement for ATK,
        and do those checks in an uniform way across DRT and WKTR, to
        avoid confusion and issues when modifying these files in the future.

        * DumpRenderTree/atk/AccessibilityUIElementAtk.cpp:
        (AccessibilityUIElement::getChildren): Use normalized checks.
        (AccessibilityUIElement::getChildrenWithRange): Ditto.
        (AccessibilityUIElement::rowCount): Ditto.
        (AccessibilityUIElement::columnCount): Ditto.
        (AccessibilityUIElement::childrenCount): Ditto.
        (AccessibilityUIElement::elementAtPoint): Ditto.
        (AccessibilityUIElement::getChildAtIndex): Ditto.
        (AccessibilityUIElement::allAttributes): Ditto.
        (AccessibilityUIElement::titleUIElement): Ditto.
        (AccessibilityUIElement::parentElement): Ditto.
        (AccessibilityUIElement::attributesOfChildren): Ditto.
        (AccessibilityUIElement::role): Ditto.
        (AccessibilityUIElement::title): Ditto.
        (AccessibilityUIElement::description): Ditto.
        (AccessibilityUIElement::stringValue): Ditto.
        (AccessibilityUIElement::language): Ditto.
        (AccessibilityUIElement::x): Ditto.
        (AccessibilityUIElement::y): Ditto.
        (AccessibilityUIElement::width): Ditto.
        (AccessibilityUIElement::height): Ditto.
        (AccessibilityUIElement::orientation): Ditto.
        (AccessibilityUIElement::intValue): Ditto.
        (AccessibilityUIElement::minValue): Ditto.
        (AccessibilityUIElement::maxValue): Ditto.
        (indexRangeInTable): Ditto.
        (AccessibilityUIElement::cellForColumnAndRow): Ditto.
        (AccessibilityUIElement::stringAttributeValue): Ditto.
        (alterCurrentValue): Ditto.
        (AccessibilityUIElement::press): Ditto.
        (AccessibilityUIElement::documentEncoding): Ditto.
        (AccessibilityUIElement::documentURI): Ditto.
        (AccessibilityUIElement::hasPopup): Ditto.

        * WebKitTestRunner/InjectedBundle/atk/AccessibilityUIElementAtk.cpp:
        (WTR::indexRangeInTable): Use normalized checks.
        (WTR::alterCurrentValue): Ditto.
        (WTR::AccessibilityUIElement::getChildren): Ditto.
        (WTR::AccessibilityUIElement::getChildrenWithRange): Ditto.
        (WTR::AccessibilityUIElement::childrenCount): Ditto.
        (WTR::AccessibilityUIElement::elementAtPoint): Ditto.
        (WTR::AccessibilityUIElement::indexOfChild): Ditto.
        (WTR::AccessibilityUIElement::childAtIndex): Ditto.
        (WTR::AccessibilityUIElement::titleUIElement): Ditto.
        (WTR::AccessibilityUIElement::parentElement): Ditto.
        (WTR::AccessibilityUIElement::attributesOfChildren): Ditto.
        (WTR::AccessibilityUIElement::allAttributes): Ditto.
        (WTR::AccessibilityUIElement::stringAttributeValue): Ditto.
        (WTR::AccessibilityUIElement::role): Ditto.
        (WTR::AccessibilityUIElement::title): Ditto.
        (WTR::AccessibilityUIElement::description): Ditto.
        (WTR::AccessibilityUIElement::orientation): Ditto.
        (WTR::AccessibilityUIElement::stringValue): Ditto.
        (WTR::AccessibilityUIElement::language): Ditto.
        (WTR::AccessibilityUIElement::x): Ditto.
        (WTR::AccessibilityUIElement::y): Ditto.
        (WTR::AccessibilityUIElement::width): Ditto.
        (WTR::AccessibilityUIElement::height): Ditto.
        (WTR::AccessibilityUIElement::intValue): Ditto.
        (WTR::AccessibilityUIElement::minValue): Ditto.
        (WTR::AccessibilityUIElement::maxValue): Ditto.
        (WTR::AccessibilityUIElement::rowCount): Ditto.
        (WTR::AccessibilityUIElement::columnCount): Ditto.
        (WTR::AccessibilityUIElement::cellForColumnAndRow): Ditto.
        (WTR::AccessibilityUIElement::press): Ditto.
        (WTR::AccessibilityUIElement::documentEncoding): Ditto.
        (WTR::AccessibilityUIElement::documentURI): Ditto.
        (WTR::AccessibilityUIElement::hasPopup): Ditto.

2013-09-27  Mario Sanchez Prada  <mario.prada@samsung.com>

        [ATK] accessibility/aria-sort.html is failing after r156409
        https://bugs.webkit.org/show_bug.cgi?id=121947

        Reviewed by Chris Fleizach.

        Implement AccessibilityUIElement::isSupported for the ATK
        platforms, just by checking whether we have an associated object
        attribute exposed for the wrapper object matching the required
        attribute in the layout test (e.g "AXSortDirection" -> "sort").

        * DumpRenderTree/atk/AccessibilityUIElementAtk.cpp:
        (AccessibilityUIElement::isAttributeSupported): Implemented.
        * WebKitTestRunner/InjectedBundle/atk/AccessibilityUIElementAtk.cpp:
        (WTR::AccessibilityUIElement::isAttributeSupported): Implemented.

2013-09-26  Eric Carlson  <eric.carlson@apple.com>

        [MediaStream] make MediaStream testable
        https://bugs.webkit.org/show_bug.cgi?id=121967

        Reviewed by Dean Jackson.

        * DumpRenderTree/mac/UIDelegate.mm:
        (-[UIDelegate webView:decidePolicyForUserMediaRequestFromOrigin:listener:]): Add a very permissive
            user media request policy delegate.

2013-09-26  Brian J. Burg  <burg@cs.washington.edu>

        build-webkit --inspector-frontend should copy WebInspectorUI files
        https://bugs.webkit.org/show_bug.cgi?id=117851

        Reviewed by Joseph Pecoraro.

        Change the --inspector-frontend build option to additionally build/copy 
        WebInspectorUI by setting it as the only project that needs to be built.

        * Scripts/build-webkit:

2013-09-26  Zan Dobersek  <zdobersek@igalia.com>

        XvfbDriver should set up Xvfb instances providing screens of 8-bit depth
        https://bugs.webkit.org/show_bug.cgi?id=121951

        Reviewed by Carlos Garcia Campos.

        Screens with 24-bit depth are causing problems as it doesn't seem to be possible to fall back to
        software rendering successfully on the GTK 64-bit release builder, resulting in crashes in almost
        500 layout tests that trigger accelerated compositing to be used.

        * Scripts/webkitpy/port/xvfbdriver.py:
        (XvfbDriver._start):
        * Scripts/webkitpy/port/xvfbdriver_unittest.py: Update unit test baselines.
        (XvfbDriverTest.test_start_no_pixel_tests):
        (XvfbDriverTest.test_start_pixel_tests):
        (XvfbDriverTest.test_start_arbitrary_worker_number):
        (XvfbDriverTest.test_next_free_display):
        (XvfbDriverTest.test_start_next_worker):

2013-09-26  Tim Horton  <timothy_horton@apple.com>

        Tiled drawing should not imply threaded scrolling
        https://bugs.webkit.org/show_bug.cgi?id=121874
        <rdar://problem/15071494>

        Reviewed by Sam Weinig.

        * WebKitTestRunner/mac/PlatformWebViewMac.mm:
        (WTR::PlatformWebView::PlatformWebView):
        The existing tiled-drawing layout tests require threaded scrolling to be enabled.

2013-09-26  Commit Queue  <commit-queue@webkit.org>

        Unreviewed, rolling out r156457.
        http://trac.webkit.org/changeset/156457
        https://bugs.webkit.org/show_bug.cgi?id=121960

        Broke webkitpy tests. (Requested by kling on #webkit).

        * Scripts/webkitpy/port/xvfbdriver.py:
        (XvfbDriver._start):

2013-09-26  Zan Dobersek  <zdobersek@igalia.com>

        XvfbDriver should set up Xvfb instances providing screens of 8-bit depth
        https://bugs.webkit.org/show_bug.cgi?id=121951

        Reviewed by Carlos Garcia Campos.

        Screens with 24-bit depth are causing problems as it doesn't seem to be possible to fall back to
        software rendering successfully on the GTK 64-bit release builder, resulting in crashes in almost
        500 layout tests that trigger accelerated compositing to be used.

        * Scripts/webkitpy/port/xvfbdriver.py:
        (XvfbDriver._start):

2013-09-25  Alex Christensen  <achristensen@webkit.org>

        Removed check for Apple Application Support directory in WinCairo port.
        https://bugs.webkit.org/show_bug.cgi?id=121869

        Reviewed by Brent Fulgham.

        * DumpRenderTree/DumpRenderTree.vcxproj/DumpRenderTree/DumpRenderTreeLauncher.vcxproj:
        * DumpRenderTree/DumpRenderTree.vcxproj/ImageDiff/ImageDiffLauncher.vcxproj:
        * WinLauncher/WinLauncher.vcxproj/WinLauncher.vcxproj:
        Use DLLLauncherWinCairo.props for WinCairo ports.
        * win/DLLLauncher/DLLLauncherMain.cpp:
        (wWinMain):
        Don't call modifyPath to check for AAS in the WinCairo port.
        * win/DLLLauncher/DLLLauncherWinCairo.props: Added to define WIN_CAIRO.

2013-09-25  Alex Christensen  <achristensen@webkit.org>

        Enabled AssembleBuildLogs on WinCairo port.
        https://bugs.webkit.org/show_bug.cgi?id=121923

        Reviewed by Brent Fulgham.

        * win/AssembleBuildLogs/AssembleBuildLogs.vcxproj:
        Fixed reference to README, added WinCairo configurations.
        * win/AssembleBuildLogs/AssembleBuildLogs.vcxproj.filters:
        Fixed reference to README.
        * win/AssembleBuildLogs/AssembleLogs.cmd:
        Added ANGLE projects, skipped QTMovieWin for WinCairo, use PlatformArchitecture for Win64.
        * win/AssembleBuildLogs/README: Fixed spelling.

2013-09-25  Patrick Gansterer  <paroga@webkit.org>

        [WIN] Fix MSVC C4146 compiler warning
        https://bugs.webkit.org/show_bug.cgi?id=121838

        Reviewed by Brent Fulgham.

        Fix some variables from unsinged to int to fix the compiler warning
        "unary minus operator applied to unsigned type, result still unsigned".

        * DumpRenderTree/WorkQueueItem.h:
        (BackItem::BackItem):
        (ForwardItem::ForwardItem):
        * DumpRenderTree/win/DumpRenderTree.cpp:
        (createWebViewAndOffscreenWindow):

2013-09-25  Zan Dobersek  <zdobersek@igalia.com>

        [GTK] Switch the 64-bit Release builder to testing layout tests under WK2
        https://bugs.webkit.org/show_bug.cgi?id=121256

        Reviewed by Martin Robinson.

        Switch the GTK 64-bit Release builder to testing the layout tests under WebKit2.
        The GTK 64-bit Release WK2 testing builder is switched to now run layout tests under WebKit1.

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

2013-09-25  Patrick Gansterer  <paroga@webkit.org>

        Add style checker for CMake lists
        https://bugs.webkit.org/show_bug.cgi?id=121764

        Reviewed by Ryosuke Niwa.

        Add an additional check to make sure that list of files are sorted.
        Exclude lists of include directories for now, since the order
        can be importent for compilation of some files.

        * Scripts/webkitpy/style/checkers/cmake.py:
        (CMakeChecker.check):
        (CMakeChecker._check_indent):
        (CMakeChecker):
        (CMakeChecker._check_list_order):
        (CMakeChecker._list_item_path):
        * Scripts/webkitpy/style/checkers/cmake_unittest.py:
        (CMakeCheckerTest.test_check):

2013-09-25  Patrick Gansterer  <paroga@webkit.org>

        CMakeChecker takes unusually long time to run
        https://bugs.webkit.org/show_bug.cgi?id=105662

        Reviewed by Ryosuke Niwa.

        Move the caching mechanism for regular expression of the C++ checker into
        a common file and use it for the CMake and ChangeLog checkers too.

        * Scripts/webkitpy/style/checkers/changelog.py:
        (ChangeLogChecker.check_entry):
        * Scripts/webkitpy/style/checkers/cmake.py:
        (CMakeChecker._process_line):
        (CMakeChecker._check_no_space_cmds):
        (CMakeChecker._check_one_space_cmds):
        (CMakeChecker._check_non_lowercase_cmd):
        * Scripts/webkitpy/style/checkers/common.py:
        (match):
        (search):
        (searchIgnorecase):
        (sub):
        (subn):
        * Scripts/webkitpy/style/checkers/cpp.py:

2013-09-25  Allan Sandfeld Jensen  <allan.jensen@digia.com>

        [Qt] Fix build with Qt 5.2 QtPosition module
        https://bugs.webkit.org/show_bug.cgi?id=121089

        Reviewed by Simon Hausmann.

        QtLocation -> QtPositioning. Make sure we set build type before doing configure checks
        that might depend on them.

        * qmake/mkspecs/features/default_pre.prf:
        * qmake/mkspecs/features/features.prf:

2013-09-25  Mario Sanchez Prada  <mario.prada@samsung.com>

        [ATK] Fix style issues in AccessibilityUIElementAtk
        https://bugs.webkit.org/show_bug.cgi?id=121898

        Reviewed by Chris Fleizach.

        Avoid the '.f' suffix for float literals and use G_VALUE_INIT
        instead of { 0, { { 0 } } } to initialize a GValue.

        * DumpRenderTree/atk/AccessibilityUIElementAtk.cpp:
        (AccessibilityUIElement::clickPointX): Remove suffix.
        (AccessibilityUIElement::clickPointY): Ditto.
        (AccessibilityUIElement::intValue): Use G_VALUE_INIT and remove suffix.
        (AccessibilityUIElement::minValue): Ditto.
        (AccessibilityUIElement::maxValue): Ditto.
        (AccessibilityUIElement::numberAttributeValue): Remove suffix.
        * WebKitTestRunner/InjectedBundle/atk/AccessibilityUIElementAtk.cpp:
        (WTR::AccessibilityUIElement::numberAttributeValue): Remove suffix.
        (WTR::AccessibilityUIElement::x): Ditto.
        (WTR::AccessibilityUIElement::y): Ditto.
        (WTR::AccessibilityUIElement::width): Ditto.
        (WTR::AccessibilityUIElement::height): Ditto.
        (WTR::AccessibilityUIElement::clickPointX): Ditto.
        (WTR::AccessibilityUIElement::clickPointY): Ditto.
        (WTR::AccessibilityUIElement::intValue): Ditto.
        (WTR::AccessibilityUIElement::minValue): Ditto.
        (WTR::AccessibilityUIElement::maxValue): Ditto.

2013-09-25  Krzysztof Czech  <k.czech@samsung.com>

        [EFL] accessibility/loading-iframe-sends-notification.html is failing
        https://bugs.webkit.org/show_bug.cgi?id=112003

        Reviewed by Mario Sanchez Prada.

        Enabled addNotificationListener and removeNotificationListener for EFL port.

        * WebKitTestRunner/InjectedBundle/AccessibilityController.cpp:
        * WebKitTestRunner/InjectedBundle/atk/AccessibilityControllerAtk.cpp:
        (WTR::AccessibilityController::removeNotificationListener):

2013-09-24  Filip Pizlo  <fpizlo@apple.com>

        Crashing under JSC::DFG::SpeculativeJIT::spill visiting citicards.com
        https://bugs.webkit.org/show_bug.cgi?id=121844

        Reviewed by Mark Hahnenberg.

        * Scripts/run-javascriptcore-tests: Be more clear about what test suite failed.

2013-09-24  Alexey Proskuryakov  <ap@apple.com>

        [Mac][WK2] Multiple font tests fail is there is a global setting for font antialiasing threshold
        https://bugs.webkit.org/show_bug.cgi?id=121854

        Reviewed by Anders Carlsson.

        * WebKitTestRunner/InjectedBundle/mac/InjectedBundleMac.mm:
        (WTR::InjectedBundle::platformInitialize): Post a notification to update cached
        settings in underlying frameworks.

2013-09-24  Mark Rowe  <mrowe@apple.com>

        <rdar://problem/14971518> WebKit should build against the Xcode default toolchain when targeting OS X 10.8

        Reviewed by Dan Bernstein.

        * DumpRenderTree/mac/Configurations/Base.xcconfig:
        * MiniBrowser/Configurations/Base.xcconfig:
        * TestWebKitAPI/Configurations/Base.xcconfig:
        * WebKitLauncher/Configurations/Base.xcconfig:
        * WebKitTestRunner/Configurations/Base.xcconfig:

2013-09-24  Denis Nomiyama  <d.nomiyama@samsung.com>

        [ATK] Missing WTR AccessibilityController::addNotificationListener implementation
        https://bugs.webkit.org/show_bug.cgi?id=121674

        Reviewed by Mario Sanchez Prada.

        Implemented the global notification listener for
        AccessibilityController. The signal is generated by
        AXObjectCache::postPlatformNotification() and received by
        axObjectEventListener(). axObjectEventListener will then invoke
        JSObjectCallAsFunction() with the respective callback function.

        There is no additional test for this patch since its implementation will
        be tested by an accessibility layout test that is currently failing
        (accessibility/loading-iframe-sends-notification.html).

        * WebKitTestRunner/InjectedBundle/AccessibilityController.cpp: Removed
        stub implementations of addNotificationListener and
        removeNotificationListener for the GTK port.
        * WebKitTestRunner/InjectedBundle/atk/AccessibilityControllerAtk.cpp:
        (WTR::AccessibilityController::addNotificationListener): Creates the
        notification handler and sets the notification function callback.
        (WTR::AccessibilityController::removeNotificationListener): Removes the
        global handler.

2013-09-24  Anton Obzhirov  <a.obzhirov@samsung.com>

        [GTK] fast/images/exif-orientation-composited.html is failing
        https://bugs.webkit.org/show_bug.cgi?id=119731

        Reviewed by Carlos Garcia Campos.

        Add handling respect image orientation property in DRT.

        * DumpRenderTree/gtk/TestRunnerGtk.cpp:
        (TestRunner::overridePreference):

2013-09-24  Zan Dobersek  <zdobersek@igalia.com>

        [GTK] Bump the GTK+ dependency in the Wayland-specific Jhbuild moduleset
        https://bugs.webkit.org/show_bug.cgi?id=121787

        Reviewed by Gustavo Noronha Silva.

        * gtk/jhbuild-wayland.modules: Bump the GTK+ dependency that's intended for use when building
        with the Wayland target enabled to version 3.10.0.

2013-09-23  Patrick Gansterer  <paroga@webkit.org>

        use NOMINMAX instead of #define min min
        https://bugs.webkit.org/show_bug.cgi?id=73563

        Reviewed by Brent Fulgham.

        Use NOMINMAX instead of #define min/max as a cleaner
        way of ensuring that Windows system header files don't
        define min/max as macro in the first place.

        * DumpRenderTree/DumpRenderTreePrefix.h:
        * DumpRenderTree/cg/ImageDiffCG.cpp:
        * DumpRenderTree/config.h:
        * DumpRenderTree/win/ImageDiffCairo.cpp:
        * WebKitTestRunner/WebKitTestRunnerPrefix.h:
        * WebKitTestRunner/config.h:

2013-09-23  Benjamin Poulain  <benjamin@webkit.org>

        Delete TestWebKitAPI domain or some keys before running TestWebKitAPI
        https://bugs.webkit.org/show_bug.cgi?id=121715 & <rdar://problem/14269434>

        Reviewed by Alexey Proskuryakov.

        Previously, initalizing a WebPreference would change the cache model
        to WebCacheModelDocumentBrowser. That behavior was due to a stale
        preference file on disk.

        This patch fixes the tests by resetting the default, and using the proper
        default values after initializing WebPreference.

        * TestWebKitAPI/Tests/mac/SetAndUpdateCacheModel.mm:
        (TestWebKitAPI::TEST): Use the proper initial value, unrelated
        to the previous runs.

        * TestWebKitAPI/Tests/mac/SetAndUpdateCacheModel.mm:
        (TestWebKitAPI::TEST): This test needs b/f cache to be enabled, so change
        cache model to the one required.

        * TestWebKitAPI/ios/mainIOS.mm:
        (main): Reset the preferences before testing.
        * TestWebKitAPI/mac/mainMac.mm:
        (main): Ditto.

2013-09-23  Benjamin Poulain  <benjamin@webkit.org>

        Delete TestWebKitAPI domain or some keys before running TestWebKitAPI
        https://bugs.webkit.org/show_bug.cgi?id=121715 & <rdar://problem/14269434>

        Reviewed by Alexey Proskuryakov.

        Previously, initalizing a WebPreference would change the cache model
        to WebCacheModelDocumentBrowser. That behavior was due to a stale
        preference file on disk.

        This patch fixes the tests by resetting the default, and using the proper
        default values after initializing WebPreference.

        * TestWebKitAPI/Tests/mac/SetAndUpdateCacheModel.mm:
        (TestWebKitAPI::TEST): Use the proper initial value, unrelated
        to the previous runs.

        * TestWebKitAPI/ios/mainIOS.mm:
        (main): Reset the preferences before testing.
        * TestWebKitAPI/mac/mainMac.mm:
        (main): Ditto.

2013-09-23  Anders Carlsson  <andersca@apple.com>

        ListHashSet should work with move-only types
        https://bugs.webkit.org/show_bug.cgi?id=121802

        Reviewed by Andreas Kling.

        * TestWebKitAPI/Tests/WTF/ListHashSet.cpp:
        (TestWebKitAPI::TEST):
        Add a test for move-only types.

2013-09-23  Alex Christensen  <alex.christensen@flexsim.com>

        Added --64-bit option for Windows build.
        https://bugs.webkit.org/show_bug.cgi?id=121799

        Reviewed by Brent Fulgham.

        * Scripts/webkitdirs.pm:
        (determinePassedConfiguration): Add "|x64" for 64-bit configuration.
        (isWin64): Added.
        (determineIsWin64): Added.

2013-09-23  Anders Carlsson  <andersca@apple.com>

        ListHashSet should use std::reverse_iterator for reverse iterators
        https://bugs.webkit.org/show_bug.cgi?id=121795

        Reviewed by Antti Koivisto.

        Add test for reverse iterators.

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

2013-09-23  Krzysztof Czech  <k.czech@samsung.com>

        [EFL] accessibility/aria-invalid is failing
        https://bugs.webkit.org/show_bug.cgi?id=111986

        Reviewed by Mario Sanchez Prada.

        Adds possibility to retrieve JS context.
        This is part of the implementation of AccessibilityUIElement::addNotificationListener
        from 119883 and 120421.

        * DumpRenderTree/atk/AccessibilityCallbacksAtk.cpp:
        (axObjectEventListener):
        (addAccessibilityNotificationHandler):
        (removeAccessibilityNotificationHandler):
        * WebKitTestRunner/InjectedBundle/atk/AccessibilityNotificationHandlerAtk.cpp:
        (WTR::AccessibilityNotificationHandler::setNotificationFunctionCallback):
        (WTR::AccessibilityNotificationHandler::removeAccessibilityNotificationHandler):

2013-09-20  Mark Rowe  <mrowe@apple.com>

        <https://webkit.org/b/90090> build-webkit should verify that your tools are up-to-date

        Enforce a minimum OS version of 10.7.5 and Xcode version of 4.6.

        Reviewed by David Kilzer.

        * Scripts/webkitdirs.pm:
        (checkRequiredSystemConfig):

2013-09-20  Mario Sanchez Prada  <mario.prada@samsung.com>

        [ATK] Do not expose aria-help in ATK based platforms
        https://bugs.webkit.org/show_bug.cgi?id=121675

        Reviewed by Chris Fleizach.

        Remove the implementations for AccessibilityUIElement::helpText()
        from DRT and WKTR for GTK and EFL, since they are based on the
        AccessibilityObject::helpText() method and the 'aria-help'
        attributes, which is wrong since they should not depend on that
        but in ATK specific API (see also http://webkit.org/b/121684).

        * DumpRenderTree/atk/AccessibilityUIElementAtk.cpp:
        (AccessibilityUIElement::helpText): Added a new and empty
        implementation, now that we are no longer using this in ATK.
        * DumpRenderTree/efl/AccessibilityUIElementEfl.cpp: Removed file
        as the only function provided here was helpText().
        * DumpRenderTree/gtk/AccessibilityUIElementGtk.cpp: Ditto.
        * DumpRenderTree/efl/CMakeLists.txt: AccessibilityUIElementEfl.cpp
        removed from the list of sources to compile.
        * GNUmakefile.am: Likewise, but for AccessibilityUIElementGtk.cpp.
        * WebKitTestRunner/InjectedBundle/atk/AccessibilityUIElementAtk.cpp:
        (WTR::AccessibilityUIElement::helpText): Replaced old implementation
        based in DumpRenderTreeSupportGtk with an empty one.

2013-09-20  Dan Bernstein  <mitz@apple.com>

        Make extract-localizable-strings available to WebCore clients
        https://bugs.webkit.org/show_bug.cgi?id=121699

        Reviewed by Darin Adler.

        * Scripts/extract-localizable-strings: Copied to
        Soure/WebCore/extract-localizaebl-strings.pl, and changed this into a shell script that
        executes the script from its new location. This is a temporary measure until certain code
        that is external to WebKit is adapted to the new location.
        * Scripts/update-webkit-localizable-strings: Changed to call extract-localizable-strings.pl
        from its new location.

2013-09-20  Patrick Gansterer  <paroga@webkit.org>

        Nuke remaining VS2005 tools from the tree.
        https://bugs.webkit.org/show_bug.cgi?id=121691

        Reviewed by Brent Fulgham.

        * CLWrapper/CLWrapper.cpp: Removed.
        * CLWrapper/CLWrapper.sln: Removed.
        * CLWrapper/CLWrapper.vcproj: Removed.
        * MIDLWrapper/MIDLWrapper.cpp: Removed.
        * MIDLWrapper/MIDLWrapper.sln: Removed.
        * MIDLWrapper/MIDLWrapper.vcproj: Removed.
        * Scripts/parallelcl: Removed.
        * vcbin/cl.exe: Removed.
        * vcbin/midl.exe: Removed.

2013-09-20  Mario Sanchez Prada  <mario.prada@samsung.com>

        [GTK] socket_embed_hook hitting NULL-check assertion running TestWebKit2
        https://bugs.webkit.org/show_bug.cgi?id=121294

        Reviewed by Martin Robinson.

        Provide a new patch to deal with the issue in the GTK+ module from
        the internal jhbuild environment. This issue has been reported
        upstream (see https://bugzilla.gnome.org/show_bug.cgi?id=708024).

        * gtk/jhbuild.modules: Apply the new patch to the GTK+ module.
        * gtk/patches/gtk-3.6-do-not-shutdown-accessibility.patch: Added.

2013-09-20  Denis Nomiyama  <d.nomiyama@samsung.com>

        [ATK][WTR] accessibility/aria-invalid.html times out
        https://bugs.webkit.org/show_bug.cgi?id=121668

        Reviewed by Mario Sanchez Prada.

        Fixed WTR::AccessibilityUIElement::stringAttributeValue() to return
        false in case of aria-invalid event with empty value.

        * WebKitTestRunner/InjectedBundle/atk/AccessibilityUIElementAtk.cpp:
        (WTR::AccessibilityUIElement::stringAttributeValue): Returns false in
        case of aria-invalid event with empty value.

2013-09-20  Denis Nomiyama  <d.nomiyama@samsung.com>

        [ATK] Missing WTR AccessibilityUIElement::addNotificationListener implementation
        https://bugs.webkit.org/show_bug.cgi?id=120421

        Reviewed by Mario Sanchez Prada.

        Implemented the notification listener for AccessibilityUIElement for
        WebKitTestRunner. The signal is generated by
        AXObjectCache::postPlatformNotification() and received by
        axObjectEventListener(). axObjectEventListener() will then invoke
        JSObjectCallAsFunction() with the respective callback function. The
        notification handlers are stored in HashMap in
        AccessibilityNotificationHandlerAtk.cpp.

        Moved ATK signal handling (printAccessibilityEvent and
        axObjectEventListener) to AccessibilityNotificationHandlerAtk.cpp.

        * WebKitTestRunner/CMakeLists.txt: Added InjectedBundle/atk to the
        include path.
        * WebKitTestRunner/GNUmakefile.am:
        Added AccessibilityNotificationHandlerAtk.cpp/h.
        * WebKitTestRunner/InjectedBundle/AccessibilityController.cpp: Moved
        listener IDs to AccessibilityNotificationHandlerAtk.cpp.
        * WebKitTestRunner/InjectedBundle/AccessibilityController.h: Moved
        listener IDs to AccessibilityNotificationHandlerAtk.cpp.
        * WebKitTestRunner/InjectedBundle/AccessibilityUIElement.h: Added a
        notification handler for GTK+ and EFL.
        * WebKitTestRunner/InjectedBundle/atk/AccessibilityControllerAtk.cpp:
        Moved printAccessibilityEvent and axObjectEventListener to
        AccessibilityNotificationHandlerAtk.cpp.
        (WTR::AccessibilityController::logAccessibilityEvents): Moved listener
        IDs to AccessibilityNotificationHandlerAtk.cpp.
        (WTR::AccessibilityController::resetToConsistentState): Moved listener
        IDs to AccessibilityNotificationHandlerAtk.cpp.
        * WebKitTestRunner/InjectedBundle/atk/AccessibilityNotificationHandlerAtk.cpp: Added.
        (WTR::printAccessibilityEvent): Prints accessibility events. This
        function was moved from AccessibilityControllerAtk.cpp.
        (WTR::axObjectEventListener): Callback for signals. This function was
        moved from AccessibilityControllerAtk.cpp.
        (WTR::AccessibilityNotificationHandler::AccessibilityNotificationHandler):
        Initialize element and function callback.
        (WTR::AccessibilityNotificationHandler::~AccessibilityNotificationHandler):
        Removes handler from HashMap and disconnects callbacks if necessary.
        (WTR::AccessibilityNotificationHandler::logAccessibilityEvents): Sets
        logging mode and connects callbacks.
        (WTR::AccessibilityNotificationHandler::setNotificationFunctionCallback):
        Sets the notification callback and connects callback to signals.
        (WTR::AccessibilityNotificationHandler::removeAccessibilityNotificationHandler):
        Removes the notification callback from HashMap.
        (WTR::AccessibilityNotificationHandler::connectAccessibilityCallbacks):
        Connects axObjectEventListener to ATK signals.
        (WTR::AccessibilityNotificationHandler::disconnectAccessibilityCallbacks):
        Disconnects callback.
        * WebKitTestRunner/InjectedBundle/atk/AccessibilityNotificationHandlerAtk.h: Added.
        (WTR::AccessibilityNotificationHandler::create): Creates a new instance
        of AccessibilityNotificationHandler.
        (WTR::AccessibilityNotificationHandler::setPlatformElement): Sets the
        element.
        (WTR::AccessibilityNotificationHandler::platformElement): Gets the
        element.
        (WTR::AccessibilityNotificationHandler::notificationFunctionCallback):
        Gets the notification callback.
        * WebKitTestRunner/InjectedBundle/atk/AccessibilityUIElementAtk.cpp:
        (WTR::AccessibilityUIElement::addNotificationListener): Creates
        notification handler, set the platform element and the notification
        callback.
        (WTR::AccessibilityUIElement::removeNotificationListener): Deletes the
        notification handler.
        * WebKitTestRunner/PlatformEfl.cmake:
        Added AccessibilityNotificationHandlerAtk.cpp.

2013-09-20  Allan Sandfeld Jensen  <allan.jensen@digia.com>

        Update features.pri
        https://bugs.webkit.org/show_bug.cgi?id=121670

        Reviewed by Jocelyn Turcotte.

        Remove feature flags that no longer exists and new ones added to FeatureList.pm

        * qmake/mkspecs/features/features.pri:

2013-09-20  Krzysztof Czech  <k.czech@samsung.com>

        [GTK][WK2] accessibility/selection-states.html is failing
        https://bugs.webkit.org/show_bug.cgi?id=116972

        Reviewed by Mario Sanchez Prada.

        isSelectable() was not exposed in Accessibility.

        * WebKitTestRunner/InjectedBundle/Bindings/AccessibilityUIElement.idl:

2013-09-19  Dan Bernstein  <mitz@apple.com>

        Attempted build fix after r156114.

        * Scripts/copy-webkitlibraries-to-product-directory: Removed references to WebCoreSQLite3.

2013-09-19  Alexey Proskuryakov  <ap@apple.com>

        REGRESSION (r129451): run-safari --no-saved-state is broken
        https://bugs.webkit.org/show_bug.cgi?id=121566

        Undo a last minute change that doesn't actually work.

        * Scripts/webkitdirs.pm: (argumentsForRunAndDebugMacWebKitApp): "-1" cannot be passed
        via command line, <rdar://problem/15032886>.

2013-09-19  Dan Bernstein  <mitz@apple.com>

        Add a style guideline regarding spacing in range-based for loops
        https://bugs.webkit.org/show_bug.cgi?id=121620

        Reviewed by Anders Carlsson.

        * Scripts/webkitpy/style/checkers/cpp.py:
        (check_spacing): Added checking that there are spaces around the colon in a range-based for
        loop.
        (CppChecker): Added whitespace/colon to the categories set.
        * Scripts/webkitpy/style/checkers/cpp_unittest.py:
        (WebKitStyleTest.test_spacing): Added two tests for the new check.

2013-09-18  Sam Weinig  <sam@webkit.org>

        Replace use of OwnArrayPtr<Foo> with std::unique_ptr<Foo[]> in Tools
        https://bugs.webkit.org/show_bug.cgi?id=121588

        Reviewed by Anders Carlsson.

        * DumpRenderTree/TestRunner.cpp:
        * ImageDiff/efl/ImageDiff.cpp:
        * TestWebKitAPI/JavaScriptTest.cpp:
        * TestWebKitAPI/PlatformUtilities.cpp:
        * TestWebKitAPI/mac/PlatformUtilitiesMac.mm:
        * WebKitTestRunner/InjectedBundle/EventSendingController.cpp:
        * WebKitTestRunner/InjectedBundle/TestRunner.cpp:
        * WebKitTestRunner/StringFunctions.h:
        * WebKitTestRunner/TestInvocation.cpp:
        * WebKitTestRunner/efl/EventSenderProxyEfl.cpp:
        * WebKitTestRunner/gtk/EventSenderProxyGtk.cpp:

2013-09-18  Bem Jones-Bey  <bjonesbe@adobe.com>

        W3C Test Import script reformats test HTML
        https://bugs.webkit.org/show_bug.cgi?id=119159

        Reviewed by Dirk Pranke.

        Completely rewrite the test conversion process to minimize
        reformatting when adding prefixes, etc. This isn't 100% perfect, there
        are still places where it will end up changing the formatting, but it
        is much better than before. Most notably, the public interface to the
        test converter has changed: now one calls a method instead of creating
        an instance of the test converter class. This is because the test
        converter class now has state, so one really needs a new instance for
        each test.

        Note that this also lays some simple groundwork for being able to use
        a MockHost in the tests.

        * Scripts/webkitpy/w3c/test_converter.py:
        (convert_for_webkit):
        (_W3CTestConverter):
        (_W3CTestConverter.__init__):
        (_W3CTestConverter.output):
        (_W3CTestConverter.add_webkit_prefix_to_unprefixed_properties):
        (_W3CTestConverter.convert_style_data):
        (_W3CTestConverter.convert_attributes_if_needed):
        (_W3CTestConverter.handle_starttag):
        (_W3CTestConverter.handle_endtag):
        (_W3CTestConverter.handle_startendtag):
        (_W3CTestConverter.handle_data):
        (_W3CTestConverter.handle_entityref):
        (_W3CTestConverter.handle_charref):
        (_W3CTestConverter.handle_comment):
        (_W3CTestConverter.handle_decl):
        (_W3CTestConverter.handle_pi):
        * Scripts/webkitpy/w3c/test_converter_unittest.py:
        (W3CTestConverterTest):
        (W3CTestConverterTest.fake_dir_path):
        (W3CTestConverterTest.test_read_prefixed_property_list):
        (verify_no_conversion_happened):
        * Scripts/webkitpy/w3c/test_importer.py:
        (TestImporter.import_tests):

2013-09-18  Filip Pizlo  <fpizlo@apple.com>

        Get rid of the jsc-test-list by moving all not-jsc-capable tests into js/dom
        https://bugs.webkit.org/show_bug.cgi?id=121578

        Rubber stamped by Geoffrey Garen.

        * Scripts/run-layout-jsc:

2013-09-18  Filip Pizlo  <fpizlo@apple.com>

        Unreviewed, fix for Ruby 1.8.

        * Scripts/run-jsc-stress-tests:

2013-09-17  Filip Pizlo  <fpizlo@apple.com>

        run-jsc-stress-tests should make it easier to look at error spew from tests
        https://bugs.webkit.org/show_bug.cgi?id=121531

        Reviewed by Mark Hahnenberg.
        
        This makes two changes:
        
        - The out/err spew from each test is now saved to a .out file in jsc-stress-results.
        
        - The same spew also goes to the console but is prefixed by the test's name.
        
        This required some tee and awk hacks, and then some sh hacks to work around the fact
        that if you do "(foo | bar) || baz", and foo fails, then baz won't run - the ||
        operator will only see a failure of bar failed. So to pass output to tee and awk, I
        needed to do weird things.

        * Scripts/run-jsc-stress-tests:

2013-09-18  Alexey Proskuryakov  <ap@apple.com>

        REGRESSION (r129451): run-safari --no-saved-state is broken
        https://bugs.webkit.org/show_bug.cgi?id=121566

        Reviewed by Mark Rowe.

        * Scripts/webkitdirs.pm: (argumentsForRunAndDebugMacWebKitApp):
        Check arguments, not the newly created empty array. Pass a value that silences warnings.
        While at it, removed a check for Snow Leopard.

2013-09-18  Alex Christensen  <achristensen@webkit.org>

        Improved WinLauncher's URL handling.
        https://bugs.webkit.org/show_bug.cgi?id=121535

        Reviewed by Brent Fulgham.

        * WinLauncher/WinLauncher.cpp:
        (EditProc):
        Use INTERNET_MAX_URL_LENGTH instead of our MAX_URL_LENGTH.
        (loadURL):
        Prepend "http://" to URLs with no scheme.

2013-09-18  Filip Pizlo  <fpizlo@apple.com>

        DFG should support Int52 for local variables
        https://bugs.webkit.org/show_bug.cgi?id=121064

        Reviewed by Oliver Hunt.

        * Scripts/run-jsc-stress-tests:

2013-09-18  peavo@outlook.com  <peavo@outlook.com>

        [Win] TestWebKitAPI does not compile.
        https://bugs.webkit.org/show_bug.cgi?id=121485

        Reviewed by Brent Fulgham.

        It is no longer possible to inherit from WebCore::BitmapImage, which the test relies on.
        Instead, load a bitmap, then destroy the decoded data, which will cause WebCore::frameAtIndex()
        to return null, which is the case we want to test.

        * TestWebKitAPI/Tests/WebCore/win/BitmapImage.cpp:
        (TestWebKitAPI::TEST):

2013-09-18  Mario Sanchez Prada  <mario.prada@samsung.com>

        [ATK] Expose aria-haspopup and aria-sort without the 'aria-' prefix
        https://bugs.webkit.org/show_bug.cgi?id=121495

        Reviewed by Chris Fleizach.

        Adapted DRT and WKTR to deal with the new names for the ATK object
        attributes being exposed for 'aria-haspopup' and 'aria-sort'.

        * DumpRenderTree/atk/AccessibilityUIElementAtk.cpp:
        (coreAttributeToAtkAttribute): Updated translation between ATK and DRT.
        (AccessibilityUIElement::stringAttributeValue): Ditto.
        (AccessibilityUIElement::hasPopup): Ditto.
        * WebKitTestRunner/InjectedBundle/atk/AccessibilityUIElementAtk.cpp:
        (WTR::coreAttributeToAtkAttribute): Updated translation between ATK and WKTR.
        (WTR::AccessibilityUIElement::stringAttributeValue): Ditto.
        (WTR::AccessibilityUIElement::hasPopup): Ditto.

2013-09-18  Commit Queue  <commit-queue@webkit.org>

        Unreviewed, rolling out r156019 and r156020.
        http://trac.webkit.org/changeset/156019
        http://trac.webkit.org/changeset/156020
        https://bugs.webkit.org/show_bug.cgi?id=121540

        Broke tests (Requested by ap on #webkit).

        * Scripts/run-jsc-stress-tests:

2013-09-17  Gwang Yoon Hwang  <ryumiel@company100.net>

        Unreviewed. Add myself as a committer.

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

2013-09-17  Jae Hyun Park  <jae.park@company100.net>

        Unreviewed. Add myself as a committer.

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

2013-09-17  Filip Pizlo  <fpizlo@apple.com>

        DFG should support Int52 for local variables
        https://bugs.webkit.org/show_bug.cgi?id=121064

        Reviewed by Oliver Hunt.

        * Scripts/run-jsc-stress-tests:

2013-09-17  Alex Christensen  <alex.christensen@flexsim.com>

        Added back and forward buttons to WinLauncher.
        https://bugs.webkit.org/show_bug.cgi?id=121212

        Reviewed by Brent Fulgham.

        * WinLauncher/WinLauncher.cpp:
        (resizeSubViews):
        Move new back and forward buttons to correct positions before URL bar.
        (dllLauncherEntryPoint): 
        Store the default button window procedure and replace with my button procedures.
        (EditProc): Updated style and renamed from MyEditProc.
        (BackButtonProc): Added.
        (ForwardButtonProc): Added.

2013-09-17  Michael Saboff  <msaboff@apple.com>

        Unreviewed typo fix after r155999

        Changed en_US.UTB-8 to en_US.UTF-8

        * Scripts/run-javascriptcore-tests:

2013-09-17  Michael Saboff  <msaboff@apple.com>

        run-jsc-stress-tests fails with ruby version 2
        https://bugs.webkit.org/show_bug.cgi?id=121521

        Reviewed by Jessie Berlin.

        Explicitly set LANG to en_US.UTB-8 before starting run-jsc-stress-tests.

        * Scripts/run-javascriptcore-tests:

2013-09-17  Brent Fulgham  <bfulgham@apple.com>

        [Windows] Unreviewed build fix after r155963.

        * DumpRenderTree/win/TestRunnerWin.cpp:
        (TestRunner::evaluateScriptInIsolatedWorld): Pass nullptr rather than 0.

2013-09-17  Anders Carlsson  <andersca@apple.com>

        Fix a typo.

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

2013-09-16  Anders Carlsson  <andersca@apple.com>

        HashMap should work with move-only keys
        https://bugs.webkit.org/show_bug.cgi?id=121310

        Reviewed by Darin Adler.

        * TestWebKitAPI/Tests/WTF/HashMap.cpp:
        (TestWebKitAPI::TEST):
        Add test.

2013-09-17  YuTeh Shen  <shenyute@hotmail.com>

        BrowserMarshal.h build fail
        https://bugs.webkit.org/show_bug.cgi?id=102938

        Reviewed by Carlos Garcia Campos.

        Fix variable name.

        * MiniBrowser/gtk/GNUmakefile.am:

2013-09-16  Brent Fulgham  <bfulgham@apple.com>

        [Windows] Clean up WinLauncher by using smart pointers
        https://bugs.webkit.org/show_bug.cgi?id=121467

        Reviewed by Anders Carlsson.

        * WinLauncher/PrintWebUIDelegate.cpp:
        (PrintWebUIDelegate::webViewPrintingMarginRect): Switch to smart pointers.
        * WinLauncher/WinLauncher.cpp:
        (WinLauncherWebHost::updateAddressBar): Use _bstr_t and smart pointers.
        (WinLauncherWebHost::didFailProvisionalLoadWithError): Ditto.
        (showLastVisitedSites): Smart pointer updates.
        (WinLauncherWebHost::didFinishLoadForFrame): Ditto.
        (setToDefaultPreferences): Ditto.
        (dllLauncherEntryPoint): Ditto.
        (PrintView): Ditto.
        (LaunchInspector): Ditto.
        (NavigateToHistory): Ditto.
        (MyEditProc): Ditto.
        (loadURL): Ditto.

2013-09-16  Brent Fulgham  <bfulgham@apple.com>

        [Windows] Add rudimentary history to WinLauncher.
        https://bugs.webkit.org/show_bug.cgi?id=121463

        Reviewed by Anders Carlsson.

        * WinLauncher/WinLauncher.cpp:
        (updateMenuItemForHistoryItem): Added
        (showLastVisitedSites): Added
        (WinLauncherWebHost::didFinishLoadForFrame): Add history item once
        a new page has been visited.
        (dllLauncherEntryPoint): Deallocate history on exit.
        (NavigateToHistory): Added
        (WndProc): Add handler for history entries
        * WinLauncher/WinLauncher.vcxproj/WinLauncherLib.rc: Add menu items to hold
        up to 10 history slots.
        * WinLauncher/WinLauncher.vcxproj/WinLauncherLibCommon.props: Link against
        Windows utility library to allow use of _bstr_t type.
        * WinLauncher/WinLauncher.vcxproj/WinLauncherLibResource.h: Add menu items
        to hold up to 10 history slots.
        * WinLauncher/stdafx.h: Add <comutil.h> to precompiled headers.

2013-09-16  Gustavo Noronha Silva  <gns@gnome.org>

        [GTK] Make symbol export filter more strict, and disable for dev/test builds
        https://bugs.webkit.org/show_bug.cgi?id=120586

        Reviewed by Martin Robinson.

        * GNUmakefile.am: moved GtkLauncher and documentation builds to their own
        makefiles, so they can be included unconditionally.
        * GtkLauncher/GNUmakefile.am: added.
        * Scripts/webkitdirs.pm:
        (runAutogenForAutotoolsProjectIfNecessary): always pass --enable-developer-mode
        to configure, since we consider builds done through build-webkit to be development
        and test builds.
        * gtk/GNUmakefile.am: added.
        * gtk/common.py: do not use the Scripts directory as a reference to the top path;
        it's not necessary and it will not work now that the Scripts directory is not
        shipped in the tarball.

2013-09-16  Anders Carlsson  <andersca@apple.com>

        WTF::Deque should work with move only types
        https://bugs.webkit.org/show_bug.cgi?id=121446

        Reviewed by Andreas Kling.

        * TestWebKitAPI/Tests/WTF/Deque.cpp:
        (TestWebKitAPI::TEST):
        Add a test.

2013-09-16  Wojciech Bielawski  <w.bielawski@samsung.com>

        [WKTR] WebKitTestRunner's eventSender.contextClick() returns objects without implemented click() method.
        https://bugs.webkit.org/show_bug.cgi?id=98410

        Reviewed by Darin Adler.

        Add implementation of click() method of objects returned by eventSender.contextClick().

        * WebKitTestRunner/InjectedBundle/EventSendingController.cpp:
        (MenuItemPrivateData):
        (WTR::menuItemClickCallback):
        (WTR::getMenuItemTitleCallback):
        (WTR::staticMenuItemFinalize):
        (WTR::getMenuItemClass):
        (WTR::EventSendingController::contextClick):

2013-09-15  Zan Dobersek  <zdobersek@igalia.com>

        Make the GDB webkit.py script compatible with Python v3
        https://bugs.webkit.org/show_bug.cgi?id=121395

        Reviewed by Ryosuke Niwa.

        GDB fails to load the printing helpers from the webkit.py script if Python v3 is used. To avoid that,
        uses of xrange() in the script are replaced with range(), and the print statements are changed into
        the print() function invocations.

        * gdb/webkit.py:
        (guess_string_length):
        (ustring_to_string):
        (lstring_to_string):
        (WTFCStringPrinter.to_string):
        (PrintPathToRootCommand.invoke):

2013-09-15  Zan Dobersek  <zdobersek@igalia.com>

        [webkitpy] perf profiler attaches to WKTR after the WebProcess was launched
        https://bugs.webkit.org/show_bug.cgi?id=119631

        Reviewed by Ryosuke Niwa.

        The perf profiler is attached to the test runner after the test runner has been launched,
        but in the case of WebKitTestRunner, this is done after the WebProcess was spawned by the
        UIProcess, meaning that WebProcess operations will not be profiled.

        To avoid that, the perf profiler is changed to provide a wrapper command for the test runner.
        This is done in the scope of already present support for wrapper scripts (such as valgrind)
        that are settable through the --wrapper option. This causes the perf profiler to correctly
        continue profiling the WebProcess after it was spawned.

        When the profiler is launched, a wait process is launched with the profiler's pid as the
        argument. This ensures we can check that the profiler exited normally. If it did not, its
        output can be corrupted and can cause problems when that output is examined. The after-exit
        report is avoided in that case.

        * Scripts/webkitpy/common/system/profiler.py:
        (Profiler.wrapper_arguments): The method returns an empty list by default.
        (Perf.__init__): Remove unnecessary member variables.
        (Perf.attach_to_pid): Launch the wait process with the profiler's pid as the argument.
        (Perf.wrapper_arguments): Used instead of attaching the profiler to the profiled process' pid,
        the method returns a list of arguments that should be used as a wrapper for the test runner.
        The arguments specify the 'perf record' command, with the output file and the instruction to
        construct the call graph given as well.
        (Perf._first_ten_lines_of_profile): Prettify the output by avoiding the unnecessary trailing
        whitespace in the profile lines.
        (Perf.profile_after_exit): Kill the profiler process through its pid if the wait process is still
        running. If it is running even after that, or if the profiler process produced a non-zero exit
        code, the method reports the profiling failure and returns. Otherwise it continues on reporting
        the top 10 lines of the profile and how to examine the profile further.
        * Scripts/webkitpy/port/driver.py:
        (Driver._command_wrapper): The method is now a member of the Driver class, returning the wrapper
        as specified by the --wrapper option if given, or the profiler wrapper if the profiler is present,
        or an empty list otherwise.
        (Driver.cmd_line):
        * Scripts/webkitpy/port/driver_unittest.py:
        (DriverTest.make_port): Adjusted so mock host or options objects can be specified
        for the testing-specific Port object.
        (DriverTest._assert_wrapper): Pass a MockOptions object with the wrapper value to the make_port method,
        as the Driver._command_wrapper now operates on the option's value directly rather than accepting it through
        a parameter.
        (DriverTest.test_profiler_as_wrapper): Provide a test case to check the correct profiler wrapper is used
        when profiling on the Linux platform with the perf profiler.

2013-09-14  Dan Bernstein  <mitz@apple.com>

        [mac] Check For Framework Include Consistency build phase checks the wrong framework
        https://bugs.webkit.org/show_bug.cgi?id=121215

        Reviewed by Mark Rowe.

        * Scripts/check-for-webkit-framework-include-consistency: Replaced hard-coded paths to
        WebKit.framework’s Headers and PrivateHeaders directories with the current target’s
        public and private headers folder paths. Also tweaked the error messages’ format to make
        Xcode recognize them as errors.

2013-09-14  Alberto Garcia  <berto@igalia.com>

        [GTK] Fails to compile if the build directory is in a different partition
        https://bugs.webkit.org/show_bug.cgi?id=121296

        Reviewed by Martin Robinson.

        Instead of using os.symlink() to install the gtk-doc templates,
        use os.link() first and fall back to os.symlink() if it fails.

        * gtk/gtkdoc.py:
        (GTKDoc._copy_doc_files_to_output_dir.copy_file_replacing_existing):

2013-09-14  Alberto Garcia  <berto@igalia.com>

        [GTK] WebKitGTK+ is linking against libxslt in too many places
        https://bugs.webkit.org/show_bug.cgi?id=121356

        Reviewed by Martin Robinson.

        TestWebCore, WebKitTestRunner and MiniBrowser don't use libxslt,
        so we don't need to link against it.

        * MiniBrowser/gtk/GNUmakefile.am:
        * TestWebKitAPI/GNUmakefile.am:
        * WebKitTestRunner/GNUmakefile.am:

2013-09-14  Ross Burton  <ross.burton@intel.com>

        Uses gtk-doc tools even when --disable-gtk-doc passed
        https://bugs.webkit.org/show_bug.cgi?id=91239

        Reviewed by Martin Robinson.

        Don't run generate-gtkdoc on install if gtk-doc is disabled.

        * GNUmakefile.am:

2013-09-14  Alberto Garcia  <berto@igalia.com>

        [GTK] Fails to compile if the build directory is in a different partition
        https://bugs.webkit.org/show_bug.cgi?id=121296

        Reviewed by Carlos Garcia Campos.

        Use symlinks instead of hard links to support building on a
        different file system.

        * gtk/gtkdoc.py:
        (GTKDoc._copy_doc_files_to_output_dir.copy_file_replacing_existing):

2013-09-13  Darin Adler  <darin@apple.com>

        Use a better name than m_invertibleCTM
        https://bugs.webkit.org/show_bug.cgi?id=121341

        Reviewed by Andreas Kling.

        * Scripts/do-webcore-rename: Updated to do this replace as we do.

2013-09-13  Anders Carlsson  <andersca@apple.com>

        Pick the correct overload when a const reference is passed to appendSlowCase.
        https://bugs.webkit.org/show_bug.cgi?id=121326

        Reviewed by Darin Adler.

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

2013-09-13  Darin Adler  <darin@apple.com>

        Rename confusingly named "runtimeObject" functions
        https://bugs.webkit.org/show_bug.cgi?id=121339

        Reviewed by Sam Weinig.

        * Scripts/do-webcore-rename: Updated to do this replace as usual.

2013-09-13  Filip Pizlo  <fpizlo@apple.com>

        DFG AI assumes that ToThis can never return non-object if it is passed an object, and operationToThis will get the wrong value of isStrictMode() if there's inlining
        https://bugs.webkit.org/show_bug.cgi?id=121330

        Reviewed by Mark Hahnenberg and Oliver Hunt.

        We should run tests even if they don't have expected files yet.
        
        * Scripts/run-layout-jsc:

2013-09-13  Anders Carlsson  <andersca@apple.com>

        Use nullptr instead of 0 in calls to HashMap::add
        https://bugs.webkit.org/show_bug.cgi?id=121322

        Reviewed by Sam Weinig.

        * DumpRenderTree/mac/TestRunnerMac.mm:
        (TestRunner::evaluateScriptInIsolatedWorld):
        * WebKitTestRunner/InjectedBundle/TestRunner.cpp:
        (WTR::TestRunner::evaluateScriptInIsolatedWorld):

2013-09-13  Gustavo Noronha Silva  <gustavo.noronha@collabora.com>

        [GTK] Move to the new web inspector
        https://bugs.webkit.org/show_bug.cgi?id=120647

        Reviewed by Carlos Garcia Campos.

        * GtkLauncher/main.c:
        (main): no longer set WEBKIT_INSPECTOR_PATH.
        * MiniBrowser/gtk/main.c:
        (main): ditto.
        * Scripts/old-run-webkit-tests:
        (openDumpTool): ditto.
        * Scripts/run-gtk-tests: ditto.
        * Scripts/webkitpy/port/gtk.py:
        (GtkPort.setup_environ_for_server): ditto.

2013-09-13  Allan Sandfeld Jensen  <allan.jensen@digia.com>

        [Qt] REGRESSION(r154444): xss-DENIED test results changed
        https://bugs.webkit.org/show_bug.cgi?id=120595

        Reviewed by Jocelyn Turcotte.

        Avoid overwriting Qt meta properties, which we identify by them being undeletable.

        * DumpRenderTree/qt/DumpRenderTreeQt.cpp:
        (DumpRenderTree::initJSObjects):

2013-09-13  Darin Adler  <darin@apple.com>

        Give actions in Range class NON_SHOUTING_NAMES
        https://bugs.webkit.org/show_bug.cgi?id=121280

        Reviewed by Andreas Kling.

        * Scripts/do-webcore-rename: Updated to do this replace, keeping with
        the tradition of checking in the last one we did, along with other
        rename ideas for the future.

2013-09-12  Lucas Forschler  <lforschler@apple.com>

        Create short build logs for errors and warnings.
        https://bugs.webkit.org/show_bug.cgi?id=120614

        Reviewed by Ryosuke Niwa.

        * BuildSlaveSupport/build.webkit.org-config/master.cfg:
            -include StringIO 
        (CompileWebKit.createSummary):
            -add a createSummary function which will parse out errors and warnings into a concise log file for quick viewing

2013-09-12  Roger Fong  <roger_fong@apple.com>

        Update cygwin downloader to search for packages in the right location.

        * CygwinDownloader/cygwin-downloader.py:
        * CygwinDownloader/cygwin-downloader.zip:

2013-09-12  Anders Carlsson  <andersca@apple.com>

        Add rudimentary support for move-only types as values in HashMap
        https://bugs.webkit.org/show_bug.cgi?id=121226

        Reviewed by Andreas Kling.

        * TestWebKitAPI/Tests/WTF/HashMap.cpp:
        (TestWebKitAPI::TEST):
        Add a HashMap<unsigned, MoveOnly> test.

2013-09-12  Gabor Abraham  <abrhm@inf.u-szeged.hu>

        Auto GDB backtrace generation for EFL/GTK/Qt bots.
        https://bugs.webkit.org/show_bug.cgi?id=119338

        Reviewed by Csaba Osztrogonác.

        * Scripts/webkitpy/port/efl.py:
        (EflPort.check_sys_deps):
        (EflPort):
        (EflPort._get_crash_log):
        * Scripts/webkitpy/port/efl_unittest.py:
        (EflPortTest.test_show_results_html_file):
        (EflPortTest):
        (EflPortTest.test_get_crash_log):
        * Scripts/webkitpy/port/gtk.py:
        (GtkPort._get_crash_log):
        * Scripts/webkitpy/port/gtk_unittest.py:
        (GtkPortTest.test_get_crash_log):
        * Scripts/webkitpy/port/linux_get_crash_log.py: Added.
        (GDBCrashLogGenerator):
        (GDBCrashLogGenerator.__init__):
        (GDBCrashLogGenerator._get_gdb_output):
        (GDBCrashLogGenerator.generate_crash_log):
        (GDBCrashLogGenerator.generate_crash_log.match_filename):
        * Scripts/webkitpy/port/linux_get_crash_log_unittest.py: Added.
        (GDBCrashLogGeneratorTest):
        (GDBCrashLogGeneratorTest.test_generate_crash_log):
        (_mock_gdb_output):
        * Scripts/webkitpy/port/qt.py:
        (QtPort.default_child_processes):
        (QtPort):
        (QtPort._get_crash_log):
        * Scripts/webkitpy/port/qt_unittest.py:
        (QtPortTest.test_check_sys_deps):
        (QtPortTest):
        (QtPortTest.test_get_crash_log):

2013-09-12  Peter Gal  <galpeter@inf.u-szeged.hu>

        Unreviewed. Moving myself to the commiters list.

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

2013-09-12  ChangSeok Oh  <changseok.oh@collabora.com>

        [GTK] Add jhbuild-wayland.modules
        https://bugs.webkit.org/show_bug.cgi?id=120455

        Reviewed by Gustavo Noronha Silva.

        Current versions of gtk+, gdk-pixbuf and glib don't fit the requirement for wayland support.
        With this patch, you can build extra gtk+, gdk-pixbuf and glib through jhbuild with exporting
        WEBKIT_EXTRA_MODULESETS.

        * gtk/jhbuild-wayland.modules: Added.

2013-09-12  Mario Sanchez Prada  <mario.prada@samsung.com>

        [GTK][WK2] a11y tests unconditionally launching a11y daemons
        https://bugs.webkit.org/show_bug.cgi?id=120299

        Reviewed by Carlos Garcia Campos.

        Use the right variable name to store a reference to the at-spi2
        bus launcher process, so we can be sure we are terminating it when
        calling _tear_down_testing_environment().

        * Scripts/run-gtk-tests:
        (TestRunner._start_accessibility_daemons): Use _spi_bus_launcher
        instead of _ally_bus_launcher.

2013-09-12  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] run-gtk-tests option --skipped=ignore doesn't work when the entire suite is skipped
        https://bugs.webkit.org/show_bug.cgi?id=121218

        Reviewed by Philippe Normand.

        Skipping the entire suite was added to skip tests when they can't
        be run because of the environment, for example to skip the a11y
        tests when the at-spi daemons fail to start. This is no longer
        true for all the cases, so we can disable the tests that are
        impossible to run instead of skipping them.

        * Scripts/run-gtk-tests:
        (TestRunner.__init__): Initialize the skipped tests list.
        (TestRunner._setup_testing_environment): Add
        TestWebKitAccessibility path to the list of disabled tests when
        at-spi daemon fail to start.
        (TestRunner._should_run_test_program): Check first if the test
        program is disabled and then whether it's skipped honoring the
        skipped command line option.

2013-09-12  Samuel White  <samuel_white@apple.com>

        <meter> element text value exposed as AXTitle; should be exposing AXValueDescription
        https://bugs.webkit.org/show_bug.cgi?id=117651

        Reviewed by Mario Sanchez Prada.

        Prepended 'AXValueDescription: ' to valueDescription output and updated impacted tests.

        * DumpRenderTree/mac/AccessibilityUIElementMac.mm:
        (AccessibilityUIElement::valueDescription):
        * WebKitTestRunner/InjectedBundle/mac/AccessibilityUIElementMac.mm:
        (WTR::AccessibilityUIElement::valueDescription):

2013-09-12  Denis Nomiyama  <d.nomiyama@samsung.com>

        REGRESSION(r154781): accessibility/notification-listeners.html is failing
        https://bugs.webkit.org/show_bug.cgi?id=120669

        Reviewed by Chris Fleizach.

        Fixed 4 problems that were causing notification-listeners.html to fail.

        Notifications for AXFocusedUIElementChanged and AXValueChanged had to be
        implemented in axObjectEventListener().

        A notification for AXFocusedUIElementChanged was incorrectly sent when
        the element lost focus.

        Global notification was not dispatched if an element notification was
        present in the HashMap.

        connectAccessibilityCallbacks() was connecting signals to callbacks
        multiple times because it was not checking if
        disconnectAccessibilityCallbacks() had an early return if there were
        active handlers.

        * DumpRenderTree/atk/AccessibilityCallbacks.h: Modified
        disconnectAccessibilityCallbacks() to inform if the callbacks were
        successfully disconnected.
        * DumpRenderTree/atk/AccessibilityCallbacksAtk.cpp:
        (axObjectEventListener): Implemented notifications for
        AXFocusedUIElementChanged and AXValueChanged. Fixed the global
        notification, which was not dispatched if an element notification
        existed. Fixed the notification for AXFocusedUIElementChanged that was
        incorrectly sent when the element lost focus. In addition, fixed a typo
        where TRUE should be true.
        (connectAccessibilityCallbacks): Added early return if
        disconnectAccessibilityCallbacks() did not disconnect the callbacks.
        (disconnectAccessibilityCallbacks): Added a return value to inform if
        callbacks were successfully disconnected.

2013-09-11  Anders Carlsson  <andersca@apple.com>

        Try to fix GCC builds.

        * TestWebKitAPI/Tests/WTF/MoveOnly.h:

2013-09-11  Anders Carlsson  <andersca@apple.com>

        Try to fix the build.

        Move MoveOnly.h to Tests/WTF and fix the broken Xcode project that caused me to add the header
        file in the Tests/ directory in the first place.

        * TestWebKitAPI/CMakeLists.txt:
        * TestWebKitAPI/TestWebKitAPI.vcxproj/TestWebKitAPICommon.props:
        * TestWebKitAPI/TestWebKitAPI.vcxproj/TestWebKitAPICommonWinCairo.props:
        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WTF/MoveOnly.h: Renamed from Tools/TestWebKitAPI/Tests/MoveOnly.h.

2013-09-11  Brent Fulgham  <bfulgham@apple.com>

        [Windows] Build fix for MoveOnly

        * TestWebKitAPI/TestWebKitAPI.vcxproj/TestWebKitAPICommon.props: Add
        Tests to include search path.
        * TestWebKitAPI/TestWebKitAPI.vcxproj/TestWebKitAPICommonWinCairo.props:
        Ditto.

2013-09-11  Anders Carlsson  <andersca@apple.com>

        Add HashSet::take
        https://bugs.webkit.org/show_bug.cgi?id=121192

        Reviewed by Darin Adler.

        Add a test for HashSet::take.

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

2013-09-11  Anders Carlsson  <andersca@apple.com>

        HashSet should work with move only types
        https://bugs.webkit.org/show_bug.cgi?id=121188

        Reviewed by Geoffrey Garen.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/MoveOnly.h: Added.
        Move the MoveOnly class from Vector out into its own header.

        * TestWebKitAPI/Tests/WTF/HashSet.cpp:
        (TestWebKitAPI::TEST):
        Add aHashSet<MoveOnly> test.

        * TestWebKitAPI/Tests/WTF/Vector.cpp:
        Include MoveOnly.h.

2013-09-11  Brent Fulgham  <bfulgham@apple.com>

        [Windows] Avoid converting from IntSize->SIZE->IntSize
        https://bugs.webkit.org/show_bug.cgi?id=121180

        Reviewed by Anders Carlsson.

        * TestWebKitAPI/Tests/WebCore/win/BitmapImage.cpp:
        (TestWebKitAPI::TEST): Use IntSize instead of SIZE struct.

2013-09-11  Dan Bernstein  <mitz@apple.com>

        REGRESSION (r155561): extract-localizable-strings can miss strings
        https://bugs.webkit.org/show_bug.cgi?id=121184

        Reviewed by Darin Adler.

        * Scripts/extract-localizable-strings: Don’t discard lines if we are waiting for a closing
        parenthesis or bracket.

2013-09-11  Dan Bernstein  <mitz@apple.com>

        update-webkit-localizable-strings is at least 5.8x slower than it should be
        https://bugs.webkit.org/show_bug.cgi?id=121178

        Reviewed by Darin Adler.

        * Scripts/extract-localizable-strings: Quickly skip over lines that contain neither " nor /*.
        Note that this does not change functionality, because the script already does not understand
        the line continuation sequence (backslash followed by a newline).

2013-09-11  Anders Carlsson  <andersca@apple.com>

        Vector::append doesn't work if element type has overloaded operator&
        https://bugs.webkit.org/show_bug.cgi?id=121175

        Reviewed by Brent Fulgham.

        Add a test case.

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

2013-09-11  Anders Carlsson  <andersca@apple.com>

        Implement Vector::append for move-only types
        https://bugs.webkit.org/show_bug.cgi?id=120805

        Reviewed by Sam Weinig.

        Add a test for Vector<MoveOnly>::append.

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

2013-09-11  Csaba Osztrogonác  <ossy@webkit.org>

        Unreviewed. Fix the indentation after r105848. Typo fix after r155523.

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

2013-09-11  Anders Carlsson  <andersca@apple.com>

        The style checker shouldn't complain about returning or passing OwnPtr
        https://bugs.webkit.org/show_bug.cgi?id=121163

        Reviewed by Antti Koivisto.

        * Scripts/webkitpy/style/checkers/cpp.py:
        (check_function_definition_and_pass_ptr):
        * Scripts/webkitpy/style/checkers/cpp_unittest.py:
        (PassPtrTest.test_pass_ref_ptr_return_value):
        (PassPtrTest.test_own_ptr_parameter_value):

2013-09-11  Mario Sanchez Prada  <mario.prada@samsung.com>

        [GTK] Remove Gail dependency from build system for GTK3
        https://bugs.webkit.org/show_bug.cgi?id=119673

        Reviewed by Gustavo Noronha Silva.

        * EWSTools/ubuntu-ews-packages: Removed libgail-dev package.
        * Scripts/webkitpy/port/gtk.py:
        (GtkPort.setup_environ_for_server): Do not load the 'gail' module anymore.
        * TestWebKitAPI/GNUmakefile.am: Removed GAIL_LIBS.

2013-09-11  Gabor Abraham  <abrhm@inf.u-szeged.hu>

        Performance tester bots should report the number of failing tests
        https://bugs.webkit.org/show_bug.cgi?id=120462

        Reviewed by Csaba Osztrogonác.

        * BuildSlaveSupport/build.webkit.org-config/master.cfg:
        (RunAndUploadPerfTests.start.getText):
        (RunAndUploadPerfTests.start):
        (RunAndUploadPerfTests):
        (RunAndUploadPerfTests.start.getText2):

2013-09-11  Krzysztof Czech  <k.czech@samsung.com>

        [ATK] Adds mapping MenuItemRadioRole to ATK
        https://bugs.webkit.org/show_bug.cgi?id=121149

        Reviewed by Mario Sanchez Prada.

        Adds mapping MenuItemRadioRole to ATK.

        * DumpRenderTree/atk/AccessibilityUIElementAtk.cpp:
        (roleToString):
        * WebKitTestRunner/InjectedBundle/atk/AccessibilityUIElementAtk.cpp:
        (WTR::roleToString):

2013-09-10  Csaba Osztrogonác  <ossy@webkit.org>

        Unreviewed fix after the unreviewed r155498 to unbreak the failure
        counter of run-javascriptcore-tests build step on build.webkit.org.

        * BuildSlaveSupport/build.webkit.org-config/master.cfg:
        (RunJavaScriptCoreTests.commandComplete):
        * BuildSlaveSupport/build.webkit.org-config/mastercfg_unittest.py:

2013-09-10  Filip Pizlo  <fpizlo@apple.com>

        Unreviewed, be a bit more clear about what we mean by 'js' tests. I think this
        got a bit overlooked from the fast/js->js refactoring.

        * Scripts/run-javascriptcore-tests:

2013-09-10  Daniel Bates  <dabates@apple.com>

        [iOS] Upstream text autosizing
        https://bugs.webkit.org/show_bug.cgi?id=121111

        Reviewed by Andy Estes and Sam Weinig.

        Implement infrastructure to test the iOS text autosizing code.

        * DumpRenderTree/TestRunner.cpp:
        (setTextAutosizingEnabledCallback): Added.
        (TestRunner::staticFunctions):
        * DumpRenderTree/TestRunner.h:
        * DumpRenderTree/mac/DumpRenderTree.mm:
        (resetDefaultsToConsistentValues):
        * DumpRenderTree/mac/TestRunnerMac.mm:
        (TestRunner::setTextAutosizingEnabled): Added.

2013-09-10  Mark Hahnenberg  <mhahnenberg@apple.com>

        run-jsc-stress-tests should have a mode for always running the copy phase
        https://bugs.webkit.org/show_bug.cgi?id=121128

        Reviewed by Geoffrey Garen.

        This will increase test coverage of the copying phase, which might not always get 
        triggered normally with our default parameters for required Heap/CopiedBlock utilization.

        * Scripts/run-jsc-stress-tests:

2013-09-10  Sergio Correia  <sergio.correia@openbossa.org>

        [EFL][JHBUILD] Use a tarball for libseccomp, instead of git
        https://bugs.webkit.org/show_bug.cgi?id=121114

        Reviewed by Christophe Dumez.

        Use a tarball for libseccomp instead of git to avoid network issues on
        the buildbots while checking out the git repo. Using tarballs has the
        advantage of them being cached if the checksum matches, in which case
        there will be no need to download them again.

        * efl/jhbuild.modules:

2013-09-10  Mark Lam  <mark.lam@apple.com>

        Replace remaining "fast js" names in scripts.
        https://bugs.webkit.org/show_bug.cgi?id=120899.

        Rubber stamped by Filip Pizlo.

        * BuildSlaveSupport/build.webkit.org-config/mastercfg_unittest.py:
        (test_layout_failure_new_output):
        (test_layout_crash_new_output):
        (test_mozilla_and_layout_failure_new_output):
        * Scripts/run-fast-jsc: Removed.
        * Scripts/run-javascriptcore-tests:
        * Scripts/run-layout-jsc: Copied from Tools/Scripts/run-fast-jsc.

2013-09-10  Zan Dobersek  <zdobersek@igalia.com>

        Enable JSC stress tests for the rest of non-Windows platforms
        https://bugs.webkit.org/show_bug.cgi?id=121021

        Reviewed by Filip Pizlo.

        The JSC stress tests can already be enabled on Linux-based ports.

        * BuildSlaveSupport/build.webkit.org-config/master.cfg:
        (RunJavaScriptCoreTests.commandComplete): Reformulate the regular expressions used to find the number of regressed
        JSC tests of various test suites. The expressions now look for the suite-specific report compartment over the
        complete output, with the number of failing or crashing tests properly extracted.
        * BuildSlaveSupport/build.webkit.org-config/mastercfg_unittest.py: Add a couple of unit tests and expand the tested
        output in other unit tests testing the parsing of the output in the new format.
        (test_jsc_stress_failure_new_output):
        (test_fast_js_crashes_and_jsc_stress_failures_new_output):
        * Scripts/run-javascriptcore-tests: Enable the JSC stress tests on all but the Apple Win port.
        * Scripts/run-jsc-stress-tests: `sysctl -n hw.availcpu` doesn't work on Linux-based ports but the numProcesses
        variable is still gracefully assigned a zero value. In that case, try running `nproc --all` to gather the number
        of available CPUs so the stress tests can be run in parallel.

2013-09-10  Chris Fleizach  <cfleizach@apple.com>

        AX: Expose DOM ID and ClassList to AX APIs for automation and AT element hashes
        https://bugs.webkit.org/show_bug.cgi?id=120552

        Unreviewed build fix.

        * DumpRenderTree/win/AccessibilityUIElementWin.cpp:
        (AccessibilityUIElement::classList):

2013-09-10  Chris Fleizach  <cfleizach@apple.com>

        AX: Expose DOM ID and ClassList to AX APIs for automation and AT element hashes
        https://bugs.webkit.org/show_bug.cgi?id=120552

        Reviewed by Darin Adler.

        * DumpRenderTree/AccessibilityUIElement.cpp:
        (getClassListCallback):
        (AccessibilityUIElement::getJSClass):
        * DumpRenderTree/AccessibilityUIElement.h:
        * DumpRenderTree/atk/AccessibilityUIElementAtk.cpp:
        (AccessibilityUIElement::classList):
        * DumpRenderTree/blackberry/AccessibilityUIElementBlackBerry.cpp:
        (AccessibilityUIElement::classList):
        * DumpRenderTree/mac/AccessibilityUIElementMac.mm:
        (AccessibilityUIElement::classList):
        * DumpRenderTree/win/AccessibilityUIElementWin.cpp:
        (AccessibilityUIElement::classList):
        * WebKitTestRunner/InjectedBundle/AccessibilityUIElement.cpp:
        (WTR::AccessibilityUIElement::classList):
        * WebKitTestRunner/InjectedBundle/AccessibilityUIElement.h:
        * WebKitTestRunner/InjectedBundle/Bindings/AccessibilityUIElement.idl:
        * WebKitTestRunner/InjectedBundle/atk/AccessibilityUIElementAtk.cpp:
        (WTR::AccessibilityUIElement::classList):
        * WebKitTestRunner/InjectedBundle/mac/AccessibilityUIElementMac.mm:
        (WTR::AccessibilityUIElement::classList):

2013-09-10  Denis Nomiyama  <d.nomiyama@samsung.com>

        [GTK] accessibility/loading-iframe-sends-notification.html is failing
        https://bugs.webkit.org/show_bug.cgi?id=98370

        Reviewed by Chris Fleizach.

        Added AXLayoutComplete for the GTK platform.

        * DumpRenderTree/atk/AccessibilityCallbacksAtk.cpp:
        (axObjectEventListener): Added notification AXLayoutComplete for
        layout-complete signal.

2013-09-09  Brent Fulgham  <bfulgham@apple.com>

        [Windows] Change from using OwnPtr<GDI Stuff> to new GDIObject.
        https://bugs.webkit.org/show_bug.cgi?id=120778

        Reviewed by Anders Carlsson.

        * DumpRenderTree/win/PixelDumpSupportWin.cpp:
        (createBitmapContextFromWebView): Use GDIObject.
        * Scripts/webkitpy/style/checkers/cpp.py:
        (check_for_leaky_patterns): Update for GDIObject instead of adoptPtr and OwnPtr.
        * Scripts/webkitpy/style/checkers/cpp_unittest.py:
        (LeakyPatternTest.test_create_dc): Update for GDIObject instead of adoptPtr/OwnPtr.
        (LeakyPatternTest.test_create_compatible_dc): Ditto.

2013-09-10  Víctor Manuel Jáquez Leal  <vjaquez@igalia.com>

        Unreviewed. Add myself as a committer.

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

2013-09-10  Mark Lam  <mark.lam@apple.com>

        Move LayoutTests/fast/js to LayoutTests/js.
        https://bugs.webkit.org/show_bug.cgi?id=120899.

        Rubber stamped by Filip Pizlo.

        Changed scripts to reflect the path change.

        * BuildSlaveSupport/build.webkit.org-config/master.cfg:
        (RunJavaScriptCoreTests.commandComplete):
        * BuildSlaveSupport/build.webkit.org-config/mastercfg_unittest.py:
        (test_fast_js_failure_new_output):
        (test_fast_js_crash_new_output):
        (test_mozilla_and_fast_js_failure_new_output):
        * DumpRenderTree/blackberry/DumpRenderTree.cpp:
        (BlackBerry::WebKit::DumpRenderTree::runTests):
        * Scripts/make-script-test-wrappers:
        (findTemplateFiles):
        * Scripts/run-fast-jsc:
        * Scripts/run-javascriptcore-tests:
        * Scripts/webkitpy/layout_tests/models/test_expectations.py:
        (TestExpectations):

2013-09-10  Denis Nomiyama  <d.nomiyama@samsung.com>

        [GTK] Missing DRT AccessibilityController::addNotificationListener implementation
        https://bugs.webkit.org/show_bug.cgi?id=70606

        Reviewed by Mario Sanchez Prada.

        Implemented the global notification listener for
        AccessibilityController. The signal is generated by
        AXObjectCache::postPlatformNotification() and received by
        axObjectEventListener(). axObjectEventListener will then invoke
        JSObjectCallAsFunction() with the respective callback function.

        There is no additional test for this patch since its implementation will
        be tested by a11y layout tests that are currently skipped (e.g. bug
        98370).

        * DumpRenderTree/AccessibilityController.h: Added a global notification
        handler for GTK+.
        * DumpRenderTree/atk/AccessibilityControllerAtk.cpp:
        (AccessibilityController::AccessibilityController): Initializes the
        global handler with 0.
        (AccessibilityController::addNotificationListener): Creates the
        notification handler and sets the notification function callback.
        (AccessibilityController::removeNotificationListener): Removes the
        global handler.

2013-09-10  Krzysztof Czech  <k.czech@samsung.com>

        [ATK] Incorrect type for holding float value
        https://bugs.webkit.org/show_bug.cgi?id=121091

        Reviewed by Mario Sanchez Prada.

        Variable is not set properly, because of it's type.

        * WebKitTestRunner/InjectedBundle/atk/AccessibilityUIElementAtk.cpp:
        (WTR::alterCurrentValue):

2013-09-10  Allan Sandfeld Jensen  <allan.jensen@digia.com>

        [Qt] make use of qtHaveModule() 
        https://bugs.webkit.org/show_bug.cgi?id=121090

        Reviewed by Jocelyn Turcotte.
        Patch by Oswald Buddenhagen <oswald.buddenhagen@digia.com>

        Use qtHaveModule instead of our own haveQtModule.

        * QtTestBrowser/QtTestBrowser.pro:
        * qmake/mkspecs/features/configure.prf:
        * qmake/mkspecs/features/features.prf:
        * qmake/mkspecs/features/functions.prf:

2013-09-10  Michał Pakuła vel Rutka  <m.pakula@samsung.com>

        Unreviewed. Add myself as a committer.

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

2013-09-10  Radu Stavila  <stavila@adobe.com>

        Unreviewed. Added myself as a committer.

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

2013-09-10  Mario Sanchez Prada  <mario.prada@samsung.com>

        [GTK] Test /webkit/atk/getTextInParagraphAndBodyModerate fails
        https://bugs.webkit.org/show_bug.cgi?id=105538

        Reviewed by Chris Fleizach.

        Unskip passing test getTextInParagraphAndBodyModerate.

        * Scripts/run-gtk-tests:
        (TestRunner): Unskip pasing test.

2013-09-09  Mark Lam  <mark.lam@apple.com>

        Remove more references to the deleted js-test-style.css.
        https://bugs.webkit.org/show_bug.cgi?id=120899.

        Reviewed by Ryosuke Niwa.

        * Scripts/webkitpy/to_be_moved/update_webgl_conformance_tests.py:
        (translate_includes):

2013-09-09  Mark Lam  <mark.lam@apple.com>

        Re-landing r155392 (Point Tools scripts to LayoutTests/resources).
        https://bugs.webkit.org/show_bug.cgi?id=120899.

        Not reviewed.

        The webkitpy test failure that resulted in the rollout is due to
        update_webgl_conformance_tests_unittest.py referencing js-test-style.css
        which is to be deleted. Deleting that line fixes the issue.

        * Scripts/make-new-script-test:
        (makePathToSharedSources):
        * Scripts/run-fast-jsc:
        * Scripts/webkitperl/httpd.pm:
        (getDefaultConfigForTestDirectory):
        * Scripts/webkitpy/layout_tests/servers/apache_http_server.py:
        (LayoutTestApacheHttpd.__init__):
        * Scripts/webkitpy/layout_tests/servers/http_server.py:
        (Lighttpd.__init__):
        * Scripts/webkitpy/layout_tests/servers/http_server_integrationtest.py:
        (BaseTest.integration_test_port_and_root):
        * Scripts/webkitpy/layout_tests/servers/http_server_unittest.py:
        (TestHttpServer.test_start_cmd):
        * Scripts/webkitpy/to_be_moved/update_webgl_conformance_tests.py:
        (translate_includes):
        * Scripts/webkitpy/to_be_moved/update_webgl_conformance_tests_unittest.py:
        (TestTranslation.test_include_rewriting):

2013-09-09  Mark Lam  <mark.lam@apple.com>

        Rolling out r155392 (Point Tools scripts to LayoutTests/resources): breaks tests.
        https://bugs.webkit.org/show_bug.cgi?id=120899.

        Not reviewed.

        * Scripts/make-new-script-test:
        (makePathToSharedSources):
        * Scripts/run-fast-jsc:
        * Scripts/webkitperl/httpd.pm:
        (getDefaultConfigForTestDirectory):
        * Scripts/webkitpy/layout_tests/servers/apache_http_server.py:
        (LayoutTestApacheHttpd.__init__):
        * Scripts/webkitpy/layout_tests/servers/http_server.py:
        (Lighttpd.__init__):
        * Scripts/webkitpy/layout_tests/servers/http_server_integrationtest.py:
        (BaseTest.integration_test_port_and_root):
        * Scripts/webkitpy/layout_tests/servers/http_server_unittest.py:
        (TestHttpServer.test_start_cmd):
        * Scripts/webkitpy/to_be_moved/update_webgl_conformance_tests.py:
        (translate_includes):
        * Scripts/webkitpy/to_be_moved/update_webgl_conformance_tests_unittest.py:
        (TestTranslation.test_include_rewriting):

2013-09-09  Mark Lam  <mark.lam@apple.com>

        Point Tools scripts to LayoutTests/resources.
        https://bugs.webkit.org/show_bug.cgi?id=120899.

        Reviewed by Ryosuke Niwa.

        * Scripts/make-new-script-test:
        (makePathToSharedSources):
        * Scripts/run-fast-jsc:
        * Scripts/webkitperl/httpd.pm:
        (getDefaultConfigForTestDirectory):
        * Scripts/webkitpy/layout_tests/servers/apache_http_server.py:
        (LayoutTestApacheHttpd.__init__):
        * Scripts/webkitpy/layout_tests/servers/http_server.py:
        (Lighttpd.__init__):
        * Scripts/webkitpy/layout_tests/servers/http_server_integrationtest.py:
        (BaseTest.integration_test_port_and_root):
        * Scripts/webkitpy/layout_tests/servers/http_server_unittest.py:
        (TestHttpServer.test_start_cmd):
        * Scripts/webkitpy/to_be_moved/update_webgl_conformance_tests.py:
        (translate_includes):
        * Scripts/webkitpy/to_be_moved/update_webgl_conformance_tests_unittest.py:
        (TestTranslation.test_include_rewriting):

2013-09-09  Roger Fong  <roger_fong@apple.com>

        Unreviewed. Update Cygwin Downloader to include lighttpd and download setup-x86.exe.

        * CygwinDownloader/cygwin-downloader.py:
        * CygwinDownloader/cygwin-downloader.zip:

2013-09-09  Filip Pizlo  <fpizlo@apple.com>

        Unreviewed, fix Ruby exception handling.

        * Scripts/run-jsc-stress-tests:

2013-09-09  Filip Pizlo  <fpizlo@apple.com>

        Stress tests should test the jsc profiler (-p)
        https://bugs.webkit.org/show_bug.cgi?id=121043

        Reviewed by Mark Hahnenberg.
        
        Add a runProfiler command that all tests could use. This requires profiler-test-helper,
        which first runs the JS test and then tries the output with display-profiler-output.
        But if any of the things required for this to work aren't present, we just do a simpler
        test that just uses "-p".
        
        Because I didn't want to pollute SunSpider with "//@ runProfiler", I added the ability
        to create test collections using a yaml file that specifies the test path and the
        command to run.

        * Scripts/jsc-stress-test-helpers: Added.
        * Scripts/jsc-stress-test-helpers/profiler-test-helper: Added.
        * Scripts/run-javascriptcore-tests:
        * Scripts/run-jsc-stress-tests:

2013-09-09  Zan Dobersek  <zdobersek@igalia.com>

        [webkitpy] Remove the DeprecatedPort class
        https://bugs.webkit.org/show_bug.cgi?id=121030

        Reviewed by Ryosuke Niwa.

        Remove the remaining uses of DeprecatedPort, folding its functionality into the Port class.

        The various methods returning commands are moved from the DeprecatedPort class into the Port class,
        with the Port subclasses overriding specific methods as required.

        * Scripts/webkitpy/common/config/ports.py: Removed.
        * Scripts/webkitpy/common/config/ports_mock.py: Removed.
        * Scripts/webkitpy/common/config/ports_unittest.py: Removed.
        * Scripts/webkitpy/port/base.py:
        (Port.tooling_flag): This method returns the command line argument that corresponds to the type of the port.
        It's formatted as '--port=port_name', where port_name is the port's name that's additionally appended the '-wk2'
        string if the port instance represents the WK2 variation of the port.
        (Port.script_shell_command): Moved here from the DeprecatedPort interface.
        (Port.make_args): Ditto.
        (Port.update_webkit_command): Ditto.
        (Port.check_webkit_style_command): Ditto.
        (Port.prepare_changelog_command): Ditto.
        (Port.build_webkit_command): Ditto.
        (Port.run_javascriptcore_tests_command): Ditto.
        (Port.run_webkit_unit_tests_command): Ditto.
        (Port.run_webkit_tests_command): Ditto.
        (Port.run_python_unittests_command): Ditto.
        (Port.run_perl_unittests_command): Ditto.
        (Port.run_bindings_tests_command): Ditto.
        * Scripts/webkitpy/port/base_unittest.py:
        (PortTest.test_build_webkit_command): Add a test for the Port.build_webkit_command() method that tests correct
        return value with different build types passed to the method.
        * Scripts/webkitpy/port/efl.py:
        (EflPort.build_webkit_command): Override the Port.build_webkit_command() method, appending the necessary options
        to the command line.
        * Scripts/webkitpy/port/efl_unittest.py:
        (EflPortTest.test_commands): A thorough test of return values for all the new methods, for both the WK1 and WK2
        variations of the EflPort class.
        * Scripts/webkitpy/port/gtk.py:
        (GtkPort.build_webkit_command): Override the Port.build_webkit_command() method, appending the necessary options
        to the command line.
        (GtkPort.run_webkit_tests_command): Ditto for Port.run_webkit_tests_command().
        * Scripts/webkitpy/port/gtk_unittest.py:
        (GtkPortTest.test_commands): A thorough test of return values for all the new methods, for both the WK1
        and WK2 variations of the GtkPort class.
        * Scripts/webkitpy/port/mac_unittest.py:
        (MacTest.test_commands): A thorough test of return values for all the new methods, for both the WK1 and WK2
        variations of the MacPort class.
        * Scripts/webkitpy/port/qt.py:
        (QtPort.build_webkit_command): Override the Port.build_webkit_command() method, appending the necessary options
        to the command line.
        (QtPort.run_webkit_tests_command): Ditto for Port.run_webkit_tests_command().
        * Scripts/webkitpy/port/qt_unittest.py:
        (QtPortTest.test_commands): A thorough test of return values for all the new methods, for both the WK1 and WK2
        variations of the QtPort class.
        * Scripts/webkitpy/port/test.py:
        (TestPort.make_args): Return a mock value that's intended for testing.
        (TestPort.check_webkit_style_command): Return the script's name prepended with 'mock-'.
        (TestPort.update_webkit_command): Ditto.
        (TestPort.build_webkit_command): Ditto.
        (TestPort.prepare_changelog_command): Ditto.
        (TestPort.run_python_unittests_command): Ditto.
        (TestPort.run_perl_unittests_command): Ditto.
        (TestPort.run_javascriptcore_tests_command): Ditto.
        (TestPort.run_webkit_unit_tests_command): Ditto.
        (TestPort.run_webkit_tests_command): Ditto.
        (TestPort.run_bindings_tests_command): Ditto.
        * Scripts/webkitpy/tool/bot/flakytestreporter.py:
        (FlakyTestReporter.__init__): WebKitPatch.port() should be called now.
        * Scripts/webkitpy/tool/bot/irc_command.py:
        (Rollout._update_working_copy): Ditto.
        * Scripts/webkitpy/tool/commands/download_unittest.py:
        (DownloadCommandsTest.test_land_cowhand): Fix a typo, javacriptcore -> javascriptcore.
        * Scripts/webkitpy/tool/commands/earlywarningsystem.py:
        (AbstractEarlyWarningSystem.run_command): Use the tooling flag as provided by the Port interface.
        * Scripts/webkitpy/tool/commands/queues.py:
        (PatchProcessingQueue.begin_work_queue): Remove the use of the DeprecatedPort. Create the port that will be used
        by the PatchProcessingQueue through the tool's port factory, and also pass it to the tool, keeping the nasty
        abstraction violation.
        (CommitQueue.run_command): Use the tooling flag as provided by the Port interface.
        * Scripts/webkitpy/tool/main.py:
        (WebKitPatch.__init__): self._deprecated_port -> self._port.
        (WebKitPatch.port): Replaces the WebKitPatch.deprecated_port() method, returns self._port.
        (WebKitPatch.handle_global_options): Create the Port object through the PortFactory.
        * Scripts/webkitpy/tool/mocktool.py:
        (MockTool.__init__): self._deprecated_port -> self._port. The TestPort object also has its name method overridden
        to return 'MockPort', as many output comparisons rely on the MockPort name. These should all be replaced later, in
        a separate patch.
        (MockTool.port): Mimicks WebKitPatch.port().
        * Scripts/webkitpy/tool/steps/build.py:
        (Build.build): WebKitPatch.port() should be called now.
        * Scripts/webkitpy/tool/steps/checkstyle.py:
        (CheckStyle.run): Ditto.
        * Scripts/webkitpy/tool/steps/commit.py:
        (Commit._check_test_expectations): Ditto.
        * Scripts/webkitpy/tool/steps/preparechangelog.py:
        (PrepareChangeLog.run): Ditto.
        * Scripts/webkitpy/tool/steps/preparechangelogforrevert.py:
        (PrepareChangeLogForRevert.run): Ditto.
        * Scripts/webkitpy/tool/steps/runtests.py:
        (RunTests.run): Ditto.
        * Scripts/webkitpy/tool/steps/runtests_unittest.py:
        (RunTestsTest.test_webkit_run_unit_tests): The unnecessary methods should now be overridden on MockTool._port.
        * Scripts/webkitpy/tool/steps/steps_unittest.py:
        (StepsTest.test_runtests_args): Remove the MockTool._deprecated_port override, but don't replace it. Rather than
        that the expected test output is adjusted to contain the mock-* command names.
        * Scripts/webkitpy/tool/steps/update.py:
        (Update._update_command): WebKitPatch.port() should be called now.
        * Scripts/webkitpy/tool/steps/update_unittest.py:
        (UpdateTest.test_update_command_non_interactive): Override the MockTool._port for testing purposes with the port
        that corresponds to the removed DeprecatedPort subclasses.
        (UpdateTest.test_update_command_interactive): Ditto.

2013-09-09  Zan Dobersek  <zdobersek@igalia.com>

        [GTK] 32-bit builder should run the JSC tests
        https://bugs.webkit.org/show_bug.cgi?id=119215

        Reviewed by Philippe Normand.

        Rename the TestClass member of the TestFactory and BuildAndTestFactory classes
        to a more descriptive name, 'LayoutTestClass'. In these two factory classes, the layout testing-specific
        steps are only added if the LayoutTestClass member was not overridden to the value of None in a
        derived class.

        Remove the BuildAndAPITestFactory class and replace it with the BuildAndNonLayoutTestFactory class that
        is derived from the BuildAndTestFactory class and overrides the LayoutTestClass member to the value of None.
        This allows for builders of the BuildAndNonLayoutTest type to run all but the layout tests. This type
        is currently used by the GTK 32-bit builder - there's at the moment no interest to have the builder cover
        layout testing while other types of testing are still expected to be performed.

        * BuildSlaveSupport/build.webkit.org-config/config.json:
        * BuildSlaveSupport/build.webkit.org-config/master.cfg:
        (BuildFactory.__init__):
        (TestFactory):
        (TestFactory.__init__):
        (BuildAndTestFactory):
        (BuildAndTestFactory.__init__):
        (BuildAndTestWebKit2Factory):
        (BuildAndTestWebKit2OnlyFactory):
        (BuildAndNonLayoutTestFactory):
        (TestLeaksFactory):
        (TestWebKit2Factory):

2013-09-09  Manuel Rego Casasnovas  <rego@igalia.com>

        Unreviewed. Add myself as a committer.

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

2013-09-09  Krzysztof Czech  <k.czech@samsung.com>

        [AX][ATK] AccessibilityObject representing ProgressBar element should be ATK_VALUE type
        https://bugs.webkit.org/show_bug.cgi?id=121023

        Reviewed by Mario Sanchez Prada.

        Added mappings to ATK's ProgressBar element.

        * DumpRenderTree/atk/AccessibilityUIElementAtk.cpp:
        (roleToString):
        * WebKitTestRunner/InjectedBundle/atk/AccessibilityUIElementAtk.cpp:
        (WTR::roleToString):

2013-09-08  Filip Pizlo  <fpizlo@apple.com>

        run-jsc-stress-tests should be more paranoid about calling make
        https://bugs.webkit.org/show_bug.cgi?id=121011

        Reviewed by Oliver Hunt.
        
        If it returns with any kind of error then bail out.  Also print the command being used
        in case we have to debug this, for example on the bots.  The extra verbosity isn't a
        big deal.

        * Scripts/run-jsc-stress-tests:

2013-09-08  Filip Pizlo  <fpizlo@apple.com>

        Unreviewed, never pass Pathname to shellescape() as old versions of Ruby don't
        like that. Pass a string instead.

        * Scripts/run-jsc-stress-tests:

2013-09-08  Filip Pizlo  <fpizlo@apple.com>

        run-jsc-stress-tests should run tests in parallel if possible
        https://bugs.webkit.org/show_bug.cgi?id=120996

        Reviewed by Oliver Hunt.
        
        Run tests in parallel by using Makefile hacks. This lets make take care of all load
        balancing. It's a really awesome speed-up for these tests.
        
        This reduces the FTL debug build stress test run time from 8m18s to 2m11s. The 
        no-FTL debug build stress test time goes from 1m11s to 16s. This patch is pretty
        much awesome.

        * Scripts/run-jsc-stress-tests:

2013-09-08  Filip Pizlo  <fpizlo@apple.com>

        run-jsc-stress-tests should be smart enough to call JSRegress "regress/script-tests" rather than "script-tests"
        https://bugs.webkit.org/show_bug.cgi?id=120994

        Reviewed by Geoffrey Garen.
        
        run-jsc-stress-tests accepts a list of directories containing tests.  It needs to
        come up with names for all of them.  Currently it uses the basename of the test
        directory.  But that means that JSRegress gets called "script-tests", which is
        unfortunate since any directory in LayoutTests containing .js files will be
        called "script-tests".  So, this changes run-jsc-stress-tests to use more than
        just the basename if the basename has the word "tests" in it.  This causes
        JSRegress to be called "regress/script-tests".

        * Scripts/run-jsc-stress-tests:

2013-09-08  Sergio Correia  <sergio.correia@openbossa.org>

        [EFL][JHBUILD] Fix evas build with giflib5
        https://bugs.webkit.org/show_bug.cgi?id=120863

        Original patch from Doug Newgard, at https://phab.enlightenment.org/D200.

        Reviewed by Anders Carlsson.

        * efl/jhbuild.modules: Apply patch to fix evas build with giflib5.
        * efl/patches/evas-fix-build-with-giflib5.patch: Added.

2013-09-07  Filip Pizlo  <fpizlo@apple.com>

        Only run FTL tests if we have the FTL
        https://bugs.webkit.org/show_bug.cgi?id=120974

        Reviewed by Geoffrey Garen.
        
        Pass --ftl-jit down into run-jsc-stress-tests so that it knows what test
        variants to run.

        * Scripts/build-jsc:
        * Scripts/run-javascriptcore-tests:
        * Scripts/run-jsc-stress-tests:

2013-09-07  Santosh Mahto  <santosh.ma@samsung.com>

        removing --dialog-element from build-webkit --help option message
        https://bugs.webkit.org/show_bug.cgi?id=120955

        Reviewed by Daniel Bates.

        --dialog-element option is useless while building as
        Dialog Element support has been removed in following changeset.
        http://trac.webkit.org/changeset/154835
        http://trac.webkit.org/changeset/154870

        * Scripts/webkitperl/FeatureList.pm:
        Removed --dialog-element option message.

2013-09-06  Filip Pizlo  <fpizlo@apple.com>

        It should be possible to run-javascriptcore-tests with only a subset of the test suites
        https://bugs.webkit.org/show_bug.cgi?id=120918

        Reviewed by Dan Bernstein.

        * Scripts/run-javascriptcore-tests:

2013-09-06  Commit Queue  <commit-queue@webkit.org>

        Unreviewed, rolling out r155196.
        http://trac.webkit.org/changeset/155196
        https://bugs.webkit.org/show_bug.cgi?id=120919

        Broke 16 tests on build.webkit.org (Requested by rniwa on
        #webkit).

        * Scripts/webkitpy/layout_tests/controllers/manager.py:
        (Manager._set_up_run):

2013-09-06  Filip Pizlo  <fpizlo@apple.com>

        The 'failed' file should report collectionName/testName rather than just
        testName.

        Rubber stamped by Mark Hahnenberg.

        * Scripts/run-jsc-stress-tests:

2013-09-06  Filip Pizlo  <fpizlo@apple.com>

        Fix run-jsc-stress-tests to run on bots with old Ruby.
        
        Also make it create a repro file.

        Rubber stamped by Mark Hahnenberg.

        * Scripts/run-jsc-stress-tests:

2013-09-06  Filip Pizlo  <fpizlo@apple.com>

        Actually increment $numFailures

        Reviewed by Mark Hahnenberg.

        * Scripts/run-jsc-stress-tests:

2013-09-06  Filip Pizlo  <fpizlo@apple.com>

        Fix run-jsc-stress-tests to use Pathname instead of File.realpath.
        
        Also make it uses system() instead of popen(); that means that test output
        will go to the console. This reduces error detection flakiness. It's fine
        because stress tests don't print() unless they really have to.

        Rubber stamped by Mark Hahnenberg.

        * Scripts/run-jsc-stress-tests:

2013-09-05  Filip Pizlo  <fpizlo@apple.com>

        Introduce a way to run benchmarks and JSRegress as stress tests with different jsc command-line options
        https://bugs.webkit.org/show_bug.cgi?id=120808

        Reviewed by Mark Hahnenberg and rubber stamped by Geoffrey Garen.
        
        Add a script for running stress tests.  A stress test is a .js file that is run
        through different configurations of JSC.  It can control which configurations it
        runs by using "//@ <ruby code>" to guide the script.
        
        This script is now run as part of run-javascriptcore-tests, on Mac only.

        * Scripts/run-javascriptcore-tests:
        * Scripts/run-jsc-stress-tests: Added.

2013-09-06  Mario Sanchez Prada  <mario.prada@samsung.com>

        [GTK] Desktop proxy settings are ignored inside the internal jhbuild
        https://bugs.webkit.org/show_bug.cgi?id=120833

        Reviewed by Gustavo Noronha Silva.

        Add dconf as an optional module for the internal jhbuild, along
        with vala 0.17 as a dependency, and make sure we do not explicitly
        set always the 'memory' backend, so we can have an easy way to
        allow apps access desktop settings from the jhbuild. This is
        useful for example to be able to run apps such as MiniBrowser
        inside the jhbuild (by means of run-launcher, for instance) while
        working behind a proxy, since those network settings have to be
        read from the system global configuration in org.gnome.system.proxy.

        * gtk/jhbuild-optional.modules: Added dconf 0.14 and vala 0.17.
        * gtk/jhbuildrc: Do not explicitly choose the GSettings memory
        backend here, since that will make more difficult to use the dconf
        backend from inside the jhbuild if we need to do it so.

2013-09-06  Alexey Proskuryakov  <ap@apple.com>

        Lots of pixel tests are failing on first run, so tests cannot finish
        https://bugs.webkit.org/show_bug.cgi?id=120755

        Reviewed by Ryosuke Niwa.

        For whatever reason, many reftests are color profile sensitive, and we only set
        color profile to a known one for pixel tests, not for reftests.

        Pixel testing mode is also enabled  when retrying tests, so these failures used to
        be essentially hidden - the tests were "flaky", but that was not reported loudly enough.
        But now, so many tests fail that it makes run-webkit-tests stop early, and never retry.

        This probably shouldn't happen, as reftests should not be color profile sensitive.
        The fix is a stopgap measure to unblock EWS until a better fix can be investigated.

        * Scripts/webkitpy/layout_tests/controllers/manager.py:
        (Manager._set_up_run): Roll out <http://trac.webkit.org/changeset/115601>.

2013-09-06  Denis Nomiyama  <d.nomiyama@samsung.com>

        [GTK] AccessibilityUIElement::addNotificationListener() crashes on debug build
        https://bugs.webkit.org/show_bug.cgi?id=120416

        Reviewed by Mario Sanchez Prada.

        Fixed crashes when running debug DRT. Simplified loops at AccessibilityCallbackAtk.cpp where the HashMap
        iterator was removed inside a loop. Fixed AccessibilityUIElement::addNotificationListener() where
        m_notificationHandler expected RefPtr.

        The global notification handler was stored in the HashMap with key 0. And this caused an assertion when
        HashMap::add() or find() are called. To fix it, moved the global handler to a separated pointer.

        * DumpRenderTree/atk/AccessibilityCallbacks.h: Removed the global notification key.
        * DumpRenderTree/atk/AccessibilityCallbacksAtk.cpp:
        (axObjectEventListener): Simplified the code by using HashMap::find() and a separate pointer for the
        global notification handler.
        (addAccessibilityNotificationHandler): Simplified the code by using HashMap::find() and a separate pointer
        for the global notification handler.
        (removeAccessibilityNotificationHandler): Added the removal for the global notification handler.
        * DumpRenderTree/atk/AccessibilityNotificationHandlerAtk.h:
        (AccessibilityNotificationHandler::create): Added static function to create
        AccessibilityNotificationHandler.
        * DumpRenderTree/atk/AccessibilityUIElementAtk.cpp:
        (AccessibilityUIElement::addNotificationListener): Assigned m_notificationHandler with
        AccessibilityNotificationHandler::create().

2013-09-06  Gabor Abraham  <abrhm@inf.u-szeged.hu>

        [Qt] REGRESSION(r155140) Pixel tests is still broken on Qt with QT_WEBKIT_DISABLE_UIPROCESS_DUMPPIXELS=1
        https://bugs.webkit.org/show_bug.cgi?id=120847

        Reviewed by Csaba Osztrogonác.

        Move the force repaint code back to if (PlatformWebView::windowSnapshotEnabled()) block to support Qt.
        Typo fixed: windowShapshotEnabled -> windowSnapshotEnabled.
        Add a default PlatformWebView::windowSnapshotEnabled() to the !PLATFORM(QT).

        * WebKitTestRunner/PlatformWebView.h:
        (WTR::PlatformWebView::windowSnapshotEnabled):
        * WebKitTestRunner/TestInvocation.cpp:
        (WTR::TestInvocation::dumpResults):
        * WebKitTestRunner/qt/PlatformWebViewQt.cpp:
        (WTR::WrapperWindow::handleStatusChanged):
        (WTR::PlatformWebView::windowSnapshotEnabled):
        * WebKitTestRunner/qt/TestInvocationQt.cpp:
        (WTR::TestInvocation::dumpPixelsAndCompareWithExpected):

2013-09-06  Allan Sandfeld Jensen  <allan.jensen@digia.com>

        REGRESSION(r155140) Broke pixel tests on EFL/GTK/Qt
        https://bugs.webkit.org/show_bug.cgi?id=120843

        Reviewed by Csaba Osztrogonác.

        Call notifyDone like the platform specific forceRepaintDoneCallback methods
        it replaced did. The method is empty on the Apple ports.

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

2013-09-06  Allan Sandfeld Jensen  <allan.jensen@digia.com>

        [Qt][WK2] Window used by WebKitTestRunner loses active status
        https://bugs.webkit.org/show_bug.cgi?id=120774

        Reviewed by Jocelyn Turcotte.

        When focusing the PlatformWebView which is done at the start of each test, we should
        ensure the host window of PlatformWebView is also made active, otherwise we will
        not receive the keyboard events send by EventSenderProxy.

        * WebKitTestRunner/qt/PlatformWebViewQt.cpp:
        (WTR::PlatformWebView::focus):

2013-09-05  Seokju Kwon  <seokju@webkit.org>

        Unreviewed build fix. VectorReverse.cpp was removed after r155151.

        * TestWebKitAPI/CMakeLists.txt:

2013-09-05  Anders Carlsson  <andersca@apple.com>

        Make Vector::uncheckedAppend work with move-only types
        https://bugs.webkit.org/show_bug.cgi?id=120799

        Reviewed by Andreas Kling.

        * TestWebKitAPI/Tests/WTF/Vector.cpp:
        (TestWebKitAPI::MoveOnly):
        Add a move-only class.

        (TestWebKitAPI::TEST):
        Add a test for Vector<MoveOnly>::uncheckedAppend.

2013-09-05  Anders Carlsson  <andersca@apple.com>

        Move all Vector tests into Vector.cpp
        https://bugs.webkit.org/show_bug.cgi?id=120797

        Reviewed by Andreas Kling.

        * TestWebKitAPI/CMakeLists.txt:
        * TestWebKitAPI/GNUmakefile.am:
        * TestWebKitAPI/TestWebKitAPI.vcxproj/TestWebKitAPI.vcxproj:
        * TestWebKitAPI/TestWebKitAPI.vcxproj/TestWebKitAPI.vcxproj.filters:
        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WTF/Vector.cpp:
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/WTF/VectorBasic.cpp: Removed.
        * TestWebKitAPI/Tests/WTF/VectorReverse.cpp: Removed.
        * TestWebKitAPI/Tests/WTF/WTF.pro:

2013-09-05  Simon Fraser  <simon.fraser@apple.com>

        Expected result images are sometimes blank in WKTR
        https://bugs.webkit.org/show_bug.cgi?id=120715

        Reviewed by Tim Horton.
        
        In WebKitTestRunner, snapshots obtained via windowSnapshotImage() were
        sometimes blank if a previous test triggered compositing mode, and the
        current test or reference did not require compositing. This happened
        because the UI process didn't wait for the web process to complete
        its compositing mode switch before snapshotting. Fix by calling
        WKPageForceRepaint() before we take the snapshot; this is async,
        so we have to spin the runloop for a while.
        
        Remove the Qt/EFL code that does the same thing.

        * WebKitTestRunner/TestInvocation.cpp:
        (WTR::TestInvocation::forceRepaintDoneCallback):
        (WTR::TestInvocation::dumpResults):
        * WebKitTestRunner/TestInvocation.h:
        * WebKitTestRunner/cairo/TestInvocationCairo.cpp:
        (WTR::TestInvocation::dumpPixelsAndCompareWithExpected):
        * WebKitTestRunner/qt/TestInvocationQt.cpp:
        (WTR::TestInvocation::dumpPixelsAndCompareWithExpected):

2013-09-05  Csaba Osztrogonác  <ossy@webkit.org>

        Make build.webkit.org report the number of failing run-fast-jsc tests
        https://bugs.webkit.org/show_bug.cgi?id=120766

        Reviewed by Filip Pizlo.

        * BuildSlaveSupport/build.webkit.org-config/master.cfg:
        (RunJavaScriptCoreTests.commandComplete):
        (RunJavaScriptCoreTests.getText2):
        * BuildSlaveSupport/build.webkit.org-config/mastercfg_unittest.py:
        (RunJavaScriptCoreTestsTest): Added.
        (RunJavaScriptCoreTestsTest.assertResults):
        (RunJavaScriptCoreTestsTest.test_no_regressions_old_output):
        (RunJavaScriptCoreTestsTest.test_mozilla_failure_old_output):
        (RunJavaScriptCoreTestsTest.test_mozilla_failure_new_output):
        (RunJavaScriptCoreTestsTest.test_fast_js_failure_new_output):
        (RunJavaScriptCoreTestsTest.test_fast_js_crash_new_output):
        (RunJavaScriptCoreTestsTest.test_mozilla_and_fast_js_failure_new_output):

2013-09-05  Csaba Osztrogonác  <ossy@webkit.org>

        Make run-fast-jsc script bash, dash and Darwin's /bin/sh friendly
        https://bugs.webkit.org/show_bug.cgi?id=120759

        Reviewed by Filip Pizlo.

        * Scripts/run-fast-jsc: Remove bashisms to make bash, dash and Darwin's /bin/sh happy.
        * Scripts/run-javascriptcore-tests: Enable run-fast-jsc tests everywhere, except Windows.

2013-09-05  Filip Pizlo  <fpizlo@apple.com>

        Unreviewed, green the Mac bots by boosting the timeout on JSC tests. One of the
        Mozilla tests appears to run for a longer time.
        
        I think we want to continue to allow a few tests here and there to be
        longer-running, rather than excluding them. I seem to recall that those tests
        catch good bugs.

        * Scripts/run-javascriptcore-tests:

2013-09-05  Filip Pizlo  <fpizlo@apple.com>

        Unreviewed, don't run fast/js tests in run-javascriptcore-tests on platforms that
        can't support it because if non-bourne shells. This fixes part #2 of the Linux
        bot breakage.

        * Scripts/run-javascriptcore-tests:

2013-09-05  Filip Pizlo  <fpizlo@apple.com>

        Unreviewed, don't rely on File::Slurp. This fixes part #1 of Linux bot breakage.

        * Scripts/run-javascriptcore-tests:
        (readAllLines):

2013-09-04  Filip Pizlo  <fpizlo@apple.com>

        jsc tests should have timeouts
        https://bugs.webkit.org/show_bug.cgi?id=120725

        Reviewed by Geoffrey Garen.
        
        Set the timeout to 20 seconds per test for now.

        * Scripts/run-javascriptcore-tests:

2013-09-04  Filip Pizlo  <fpizlo@apple.com>

        run-javascriptcore-tests should run-fast-jsc as well
        https://bugs.webkit.org/show_bug.cgi?id=120722

        Reviewed by Geoffrey Garen.
        
        Makes run-javascriptcore-tests run the fast/js tests via run-fast-jsc tool.
        Integrates run-fast-jsc's error reporting into run-javascriptcore-tests.

        * Scripts/run-javascriptcore-tests:
        (printThingsFound):

2013-09-04  Sergio Correia  <sergio.correia@openbossa.org>

        [EFL][WK2] Move ShouldGoToBackForwardListItem to the list of passing API tests
        https://bugs.webkit.org/show_bug.cgi?id=120646

        Reviewed by Gyuyoung Kim.

        * TestWebKitAPI/PlatformEfl.cmake: Move ShouldGoToBackForwardListItem to the
        list of passing tests, since it started to pass after r154045.

2013-09-04  Krzysztof Czech  <k.czech@samsung.com>

        [ATK] Adds an accessibility support to access a value of the color control element
        https://bugs.webkit.org/show_bug.cgi?id=114354

        Reviewed by Mario Sanchez Prada.

        Added accessibility role of the color control element.

        * DumpRenderTree/atk/AccessibilityUIElementAtk.cpp:
        (roleToString):
        * WebKitTestRunner/InjectedBundle/atk/AccessibilityUIElementAtk.cpp:
        (WTR::roleToString):

2013-09-04  Mario Sanchez Prada  <mario.prada@samsung.com>

        REGRESSION (r132328): /WebKit2APITests/TestWebKitAccessibility unit test is failing
        https://bugs.webkit.org/show_bug.cgi?id=100408

        Unreviewed gardening. Unskip TestWebKitAccessibility after
        manually checking that it's running properly in the bot.

        * Scripts/run-gtk-tests:
        (TestRunner): Unskipped TestWebKitAccessibility.

2013-09-04  Zan Dobersek  <zdobersek@igalia.com>

        [GTK] Add support for the Wayland build target
        https://bugs.webkit.org/show_bug.cgi?id=120627

        Reviewed by Gustavo Noronha Silva.

        * GNUmakefile.am: Define the additional macros also if building the Wayland target.

2013-09-04  Andre Moreira Magalhaes   <andre.magalhaes@collabora.co.uk>

        [GStreamer] cannot play live streams
        https://bugs.webkit.org/show_bug.cgi?id=116831

        Reviewed by Philippe Normand.

        Fix timeout issues with rtspsrc/udpsrc gstreamer elements.

        * gtk/jhbuild.modules:
        * gtk/patches/rtspsrc-timeout-on-udpsrc-is-in-nanoseconds.patch: Added.
        * gtk/patches/udpsrc-improve-timeouts.patch: Added.
        Changed gstreamer jhbuild modules to use tarball repos (required to add patches)
        and added 2 patches to gst-plugins-good to fix timeout issues with rtsp streams.
        Both patches are applied upstream and can be removed once a new gstreamer release
        is out (up to 1.0.10 the patches are not included) and we bump the requirements.

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

        [Mac] WebKitTestRunner still beeps sometimes
        https://bugs.webkit.org/show_bug.cgi?id=120652

        Reviewed by Tim Horton.

        In bug 107251, we disabled beeping in WebProcess, but some of the beeps happen in
        UI process (notably, AppKit beeps when handling a key equivalent returns NO).

        * WebKitTestRunner/mac/TestControllerMac.mm: (WTR::TestController::platformInitialize):
        Use the same SPI that we use in DRT and in WebProcess to disable beeping.

2013-09-03  Krzysztof Czech  <k.czech@samsung.com>

        [AX][ATK] Added support for sort and help attributes
        https://bugs.webkit.org/show_bug.cgi?id=120456

        Reviewed by Chris Fleizach.

        Added missing implementation to AccessibilityUIElement::helpText and support for
        aria-sort attribute.

        * DumpRenderTree/atk/AccessibilityUIElementAtk.cpp:
        (coreAttributeToAtkAttribute):
        * WebKitTestRunner/InjectedBundle/atk/AccessibilityUIElementAtk.cpp:
        (WTR::coreAttributeToAtkAttribute):
        (WTR::AccessibilityUIElement::helpText):

2013-09-03  Allan Sandfeld Jensen  <allan.jensen@digia.com>

        [Qt][WK1] PageVisibility tests are flaky
        https://bugs.webkit.org/show_bug.cgi?id=120418

        Reviewed by Jocelyn Turcotte.

        Implement resetPageVisibility so we can reset visibility without
        emiting visibility state change events.

        * DumpRenderTree/qt/TestRunnerQt.cpp:
        (TestRunner::resetPageVisibility):

2013-09-03  ChangSeok Oh  <changseok.oh@collabora.com>

        [GTK] libsoup upversion to fix a gstreamer issue, bug115354
        https://bugs.webkit.org/show_bug.cgi?id=120613

        Reviewed by Philippe Normand.

        Up version of libsoup to 2.43.90. But the exact version which we'll use is not 2.43.90.
        To fix bug115354, we need the Andre's patch for libsoup, but the lastest release
        does not contain it. https://bugzilla.gnome.org/show_bug.cgi?id=706338
        For the reason, we'll use libsoup git repo directly for a while until the next
        libsoup release.

        * gtk/jhbuild.modules:

2013-09-02  Darin Adler  <darin@apple.com>

        [Mac] No need for HardAutorelease, which is same as CFBridgingRelease
        https://bugs.webkit.org/show_bug.cgi?id=120569

        Reviewed by Andy Estes.

        * DumpRenderTree/mac/DumpRenderTree.mm:
        (dump): Use CFBridgingRelease.

2013-09-02  Anton Obzhirov  <a.obzhirov@samsung.com>

        <https://webkit.org/b/98350> [GTK] accessibility/aria-invalid.html times out

        Reviewed by Mario Sanchez Prada.

        Added few mappings in DumpRenderTree and WebKitTestRunner for aria-invalid in order to get the tests run properly.

        * DumpRenderTree/atk/AccessibilityCallbacksAtk.cpp:
        (axObjectEventListener):
        Added mapping for invalid-entry event parameter.
        * DumpRenderTree/atk/AccessibilityUIElementAtk.cpp:
        (coreAttributeToAtkAttribute):
        Added mapping to aria-invalid.
        (AccessibilityUIElement::stringAttributeValue):
        * WebKitTestRunner/InjectedBundle/atk/AccessibilityUIElementAtk.cpp:
        (WTR::coreAttributeToAtkAttribute):
        Added mapping to aria-invalid.

2013-09-02  Nick Diego Yamane  <nick.yamane@openbossa.org>

        Save md5 correctly when jhbuildPath doesn't exist yet
        https://bugs.webkit.org/show_bug.cgi?id=120548

        Reviewed by Gustavo Noronha Silva.

        After r152605, Md5 for jhbuild files are saved before the update
        process, this prevents the script to restart update from scratch
        when initial checkouts fail. However it causes an issue when builddir
        (or builddir/Dependencies) doesn't exist yet. In that case the
        saveJhbuildMd5 function fails to create md5 files.
        This patch adds a checking for the jhbuildPath and creates it if
        necessary before trying to open the md5 files.

        * Scripts/update-webkit-libs-jhbuild:
        (saveJhbuildMd5):

2013-09-02  Mario Sanchez Prada  <mario.prada@samsung.com>

        Unreviewed. Move myself to the reviewers list.

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

2013-09-01  Alexey Proskuryakov  <ap@apple.com>

        [WK2][Mac] Drag and drop tests interfere with user's UI
        https://bugs.webkit.org/show_bug.cgi?id=120538

        Reviewed by Dan Bernstein.

        This makes running WebKit2 regression tests locally more viable. The patch doesn't
        fix drag and drop tests to work as expected, I posted some thought about that in
        <https://bugs.webkit.org/show_bug.cgi?id=68552>.

        * WebKitTestRunner/EventSenderProxy.h:
        (WTR::EventSenderProxy::position):
        * WebKitTestRunner/TestController.h:
        (WTR::TestController::eventSenderProxy):
        Expose a way to get current mouse position from anywhere in WKTR code.

        * WebKitTestRunner/WebKitTestRunner.xcodeproj/project.pbxproj: Added new files.

        * WebKitTestRunner/mac/EventSenderProxy.mm: (WTR::EventSenderProxy::mouseUp):
        Copied a FIXME comment from DumpRenderTree.

        * WebKitTestRunner/mac/PlatformWebViewMac.mm:
        (-[TestRunnerWKView dragImage:at:offset:event:pasteboard:source:slideBack:]):
        Override drag initiation, using a custom NSDraggingInfo implementation.

        * WebKitTestRunner/mac/TestControllerMac.mm: (WTR::TestController::platformInitialize):
        Replace NSEvent with a custom class.

        * WebKitTestRunner/mac/WebKitTestRunnerDraggingInfo.h: Added.
        * WebKitTestRunner/mac/WebKitTestRunnerDraggingInfo.mm: Added.
        * WebKitTestRunner/mac/WebKitTestRunnerEvent.h: Added.
        * WebKitTestRunner/mac/WebKitTestRunnerEvent.mm: Added.
        Largely a copy of DumpRenderTree classes, modified to not use global variables.
        We should consider making these variables static in EventSenderProxy though, as
        it's strange that mouse state in WKTR is reset between tests without WebKit ever
        being told about that.

2013-08-30  Brent Fulgham  <bfulgham@apple.com>

        [Windows] Unreviewed build fix.

        * win/AssembleBuildLogs/AssembleLogs.cmd: Make sure WebInspectorUI build output is reported
        from the build machines.

2013-08-30  Gabor Abraham  <abrhm@inf.u-szeged.hu>

        [Qt] Remove qt-5.0-wk2 from the baseline search paths because the migration of expectations to qt-wk2 is done.
        https://bugs.webkit.org/show_bug.cgi?id=120464

        Reviewed by Jocelyn Turcotte.

        * Scripts/webkitpy/port/qt.py:
        (QtPort._search_paths):
        * Scripts/webkitpy/port/qt_unittest.py:
        (QtPortTest):

2013-08-29  Filip Pizlo  <fpizlo@apple.com>

        Just linking LLVM into JSC causes all plugin tests to fail
        https://bugs.webkit.org/show_bug.cgi?id=113915

        Reviewed by Oliver Hunt.
        
        Hide all LLVM symbols. This should prevent us from exporting LLVM's overrides for
        raise/abort/__assert_rtn.

        * Scripts/configure-llvm:

2013-08-29  Joseph Pecoraro  <pecoraro@apple.com>

        new-run-webkit-tests does not respect --no-sample-on-timeout switch
        https://bugs.webkit.org/show_bug.cgi?id=120491

        Reviewed by Darin Adler.

        * Scripts/webkitpy/port/server_process.py:
        (ServerProcess._handle_timeout):

2013-08-29  Sam Weinig  <sam@webkit.org>

        Add ENABLE guards for Promises
        https://bugs.webkit.org/show_bug.cgi?id=120488

        Reviewed by Andreas Kling.

        * Scripts/webkitperl/FeatureList.pm:
        * qmake/mkspecs/features/features.pri:

2013-08-29  Andre Moreira Magalhaes   <andre.magalhaes@collabora.co.uk>

        [GTK] Should enable WebGL by default on MiniBrowser
        https://bugs.webkit.org/show_bug.cgi?id=120420

        Reviewed by Gustavo Noronha Silva.

        Enable WebGL by default on MiniBrowser.

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

2013-08-28  Simon Fraser  <simon.fraser@apple.com>

        Add a Command-R shortcut in MiniBrowser
        https://bugs.webkit.org/show_bug.cgi?id=120442

        Reviewed by Dean Jackson.
        
        Add a "Reload Page" item to the View menu with a Command-R
        shortcut.

        * MiniBrowser/mac/MainMenu.xib:

2013-08-29  Alberto Garcia  <berto@igalia.com>

        [GTK] Update apt dependency list
        https://bugs.webkit.org/show_bug.cgi?id=120399

        Reviewed by Philippe Normand.

        Remove bogus package gail-3.0, add xfonts-utils (needed by
        xorg-xserver) and switch to the latest versions of libtiff and
        libjpeg.

        * gtk/install-dependencies:

2013-08-28  Alexey Proskuryakov  <ap@apple.com>

        [WK2][Mac] WebKitTestRunner doesn't force system appearance
        https://bugs.webkit.org/show_bug.cgi?id=120437

        Reviewed by Darin Adler.

        * WebKitTestRunner/InjectedBundle/mac/InjectedBundleMac.mm:
        (WTR::InjectedBundle::platformInitialize): Set AppleAquaColorVariant,
        AppleHighlightColor and AppleOtherHighlightColor to the same values that DRT uses.
        Fixed formatting.

2013-08-16  Ryosuke Niwa  <rniwa@webkit.org>

        <https://webkit.org/b/119806> [Mac] Add a way to easily test attributed string generation

        Reviewed by Darin Adler.

        Add textInputController.legacyAttributedString to retrieve the attributed string for copy & paste.

        We can't use textInputController.attributedSubstringFromRange as it uses WebHTMLConverter's static
        editingAttributedStringFromRange function, which doesn't implement the full converter at the moment.

        Also NSMutableAttributedString.ranges and WebNSRange so that JavaScript can get a list of all
        ranges in a given attributed string.

        * DumpRenderTree/mac/TextInputController.m:
        (-[WebNSRange initWithNSRange:]):
        (-[WebNSRange location]):
        (-[WebNSRange length]):
        (+[WebNSRange isSelectorExcludedFromWebScript:]):
        (+[NSMutableAttributedString isSelectorExcludedFromWebScript:]):
        (+[NSMutableAttributedString webScriptNameForSelector:]):
        (-[NSMutableAttributedString ranges]): Added.
        (+[TextInputController isSelectorExcludedFromWebScript:]):
        (+[TextInputController webScriptNameForSelector:]):
        (-[TextInputController legacyAttributedString:]):

2013-08-28  Denis Nomiyama  <d.nomiyama@samsung.com>

        [GTK] accessibility/menu-list-sends-change-notification.html has incorrect expected results
        https://bugs.webkit.org/show_bug.cgi?id=120419

        Reviewed by Chris Fleizach.

        Added a notification for AXFocusedUIElementChanged.

        * DumpRenderTree/atk/AccessibilityCallbacksAtk.cpp:
        (axObjectEventListener): Added a notification for AXFocusedUIElementChanged.

2013-08-28  Roger Fong  <roger_fong@apple.com>

        Decrease number of workers used in NRWT by the Windows port.
        https://bugs.webkit.org/show_bug.cgi?id=120435.

        Reviewed by Brent Fulgham.

        * Scripts/webkitpy/port/win.py:
        (WinPort.default_child_processes):

2013-08-28  Allan Sandfeld Jensen  <allan.jensen@digia.com>

        Http tests fails on Debian with Apache 2.4
        https://bugs.webkit.org/show_bug.cgi?id=120352

        Unreviewed fix-up.

        Remember to update unit-test expectations and old-run-webkit-tests as well.

        * Scripts/webkitperl/httpd.pm:
        (getHTTPDConfigPathForTestDirectory):
        * Scripts/webkitpy/port/port_testcase.py:
        (test_apache_config_file_name_for_platform):

2013-08-28  Allan Sandfeld Jensen  <allan.jensen@digia.com>

        Http tests fails on Debian with Apache 2.4
        https://bugs.webkit.org/show_bug.cgi?id=120352

        Reviewed by Andreas Kling.

        Select httpd.conf file for debian based on version, matching Fedora behavior.

        * Scripts/webkitpy/port/base.py:
        (Port._apache_config_file_name_for_platform):

2013-08-28  Commit Queue  <commit-queue@webkit.org>

        Unreviewed, rolling out r154593.
        http://trac.webkit.org/changeset/154593
        https://bugs.webkit.org/show_bug.cgi?id=120403

        Caused 50+ flaky tests on WebKit1 bots (Requested by carewolf
        on #webkit).

        * DumpRenderTree/qt/DumpRenderTreeQt.cpp:
        (WebPage::~WebPage):

2013-08-28  Allan Sandfeld Jensen  <allan.jensen@digia.com>

        [Qt][Wk2] Many tests are flaky on Qt 5.1
        https://bugs.webkit.org/show_bug.cgi?id=118232

        Reviewed by Jocelyn Turcotte.

        We need to set renderToOffscreenBuffer since we won't otherwise get
        the paint calls necessary to synchronize UI- and Web-Process. It was
        only disabled in Qt 5.0 because it conflicted with setRenderWithoutShowing
        which is no longer supported or needed.

        * WebKitTestRunner/qt/PlatformWebViewQt.cpp:
        (WTR::WrapperWindow::handleStatusChanged):

2013-08-27  Alexey Proskuryakov  <ap@apple.com>

        [WK2] Remove USE_WEBPROCESS_EVENT_SIMULATION
        https://bugs.webkit.org/show_bug.cgi?id=120379

        Reviewed by Darin Adler.

        All major platforms have implemented UI process eventSender support, keeping old
        web process side code only adds confusion.

        * WebKitTestRunner/InjectedBundle/EventSendingController.cpp:
        (WTR::EventSendingController::EventSendingController):
        (WTR::EventSendingController::mouseDown):
        (WTR::EventSendingController::mouseUp):
        (WTR::EventSendingController::mouseMoveTo):
        (WTR::EventSendingController::leapForward):
        * WebKitTestRunner/InjectedBundle/EventSendingController.h:
        * WebKitTestRunner/TestController.cpp:
        (WTR::TestController::resetStateToConsistentValues):
        (WTR::TestController::didReceiveMessageFromInjectedBundle):
        (WTR::TestController::didReceiveSynchronousMessageFromInjectedBundle):
        * WebKitTestRunner/TestController.h:

2013-08-27  Roger Fong  <roger_fong@apple.com>

        NRWT on AppleWin port should delete semaphore lock files during cleanup tasks.
        https://bugs.webkit.org/show_bug.cgi?id=120370.

        Reviewed by Brent Fulgham.

        * Scripts/webkitpy/port/win.py:
        (WinPort.delete_sem_locks):
        (WinPort.setup_test_run):

2013-08-27  Denis Nomiyama  <d.nomiyama@samsung.com>

        [GTK] Missing DRT AccessibilityUIElement::addNotificationListener implementation
        https://bugs.webkit.org/show_bug.cgi?id=119883

        Implemented the notification listener for AccessibilityUIElement. The signal is generated
        by AXObjectCache::postPlatformNotification() and received by axObjectEventListener().
        axObjectEventListener will then invoke JSObjectCallAsFunction() with the respective
        callback function. The global callback function and callbacks for specific elements are
        stored in a HashMap in AccessibilityCallbacksAtk.cpp.

        Reviewed by Chris Fleizach.

        * DumpRenderTree/AccessibilityUIElement.h: Added a notification handler for GTK+
        * DumpRenderTree/atk/AccessibilityCallbacks.h: Added addAccessibilityNotificationListener()
        and removeAccessibilityNotificationListener()
        * DumpRenderTree/atk/AccessibilityCallbacksAtk.cpp:
        (axObjectEventListener): Call JS callback for global notification or for a specific element
        (disconnectAccessibilityCallbacks): Only disconnect if logging is off and there is no
        notification handler
        (addAccessibilityNotificationHandler): Add notification listener to the list
        (removeAccessibilityNotificationHandler): Remove notification listener from the list
        * DumpRenderTree/atk/AccessibilityControllerAtk.cpp:
        (AccessibilityController::setLogAccessibilityEvents): Set logging off before disconnecting
        * DumpRenderTree/atk/AccessibilityNotificationHandlerAtk.cpp: Added.
        (AccessibilityNotificationHandler::AccessibilityNotificationHandler): Create handler
        (AccessibilityNotificationHandler::~AccessibilityNotificationHandler): Destroy handler.
        Remove handler from the list and disconnect callbacks
        (AccessibilityNotificationHandler::setNotificationFunctionCallback): Set the notification
        callback and connect callbacks to signals
        * DumpRenderTree/atk/AccessibilityNotificationHandlerAtk.h: Added.
        (AccessibilityNotificationHandler::setPlatformElement): Set platform element
        (AccessibilityNotificationHandler::platformElement): Get platform element
        (AccessibilityNotificationHandler::notificationFunctionCallback): Get notification callback
        * DumpRenderTree/atk/AccessibilityUIElementAtk.cpp:
        (AccessibilityUIElement::addNotificationListener): Create notification handler, set the
        platform element and the notification callback
        (AccessibilityUIElement::removeNotificationListener):
        * DumpRenderTree/efl/CMakeLists.txt: Added AccessibilityNotificationHandlerAtk.cpp/h
        * GNUmakefile.am: Added AccessibilityNotificationHandlerAtk.cpp/h

2013-08-27  Carlos Garcia Campos  <cgarcia@igalia.com>

        Unreviewed. Fix GTK+ build after r154601.

        * TestWebKitAPI/GNUmakefile.am: Remove mac specific file from
        compilation added by mistake in r154601.

2013-08-26  Alexey Proskuryakov  <ap@apple.com>

        WebKitTestRunner needs to protect the user's pasteboard contents while running
        https://bugs.webkit.org/show_bug.cgi?id=81419
        <rdar://problem/11066794>

        Reviewed by Darin Adler.

        Mostly a copy/paste of DRT code.

        Tested manually by making sure that editing/pasteboard/copy-image-with-alt-text.html
        doesn't interfere with my clipboard while being run in a loop.

        * WebKitTestRunner/WebKitTestRunner.xcodeproj/project.pbxproj:
        * WebKitTestRunner/mac/PoseAsClass.h: Added.
        * WebKitTestRunner/mac/PoseAsClass.mm: Added.
        * WebKitTestRunner/mac/TestControllerMac.mm:
        (WTR::TestController::platformInitialize):
        (WTR::TestController::platformDestroy):
        * WebKitTestRunner/mac/WebKitTestRunnerPasteboard.h: Added.
        * WebKitTestRunner/mac/WebKitTestRunnerPasteboard.mm: Added.

2013-08-26  Commit Queue  <commit-queue@webkit.org>

        Unreviewed, rolling out r154640.
        http://trac.webkit.org/changeset/154640
        https://bugs.webkit.org/show_bug.cgi?id=120329

        Caused flaky crashes on a lot of editing tests (Requested by
        rniwa on #webkit).

        * WebKitTestRunner/WebKitTestRunner.xcodeproj/project.pbxproj:
        * WebKitTestRunner/mac/PoseAsClass.h: Removed.
        * WebKitTestRunner/mac/PoseAsClass.mm: Removed.
        * WebKitTestRunner/mac/TestControllerMac.mm:
        (WTR::TestController::platformInitialize):
        (WTR::TestController::platformDestroy):
        * WebKitTestRunner/mac/WebKitTestRunnerPasteboard.h: Removed.
        * WebKitTestRunner/mac/WebKitTestRunnerPasteboard.mm: Removed.

2013-08-26  Dan Bernstein  <mitz@apple.com>

        Automatic bug reports case pain
        https://bugs.webkit.org/show_bug.cgi?id=120330

        Reviewed by Anders Carlsson.

        * Scripts/webkitpy/tool/commands/download.py: Made the following changes to the Description
        of bugs filed by the bot: changed “the sheriff-bot” to “webkitbot”, changed “case pain” to
        “fail”, and removed “"Only you can prevent forest fires." -- Smokey the Bear”.

2013-08-23  Andy Estes  <aestes@apple.com>

        Fix issues found by the Clang Static Analyzer
        https://bugs.webkit.org/show_bug.cgi?id=120230

        Reviewed by Darin Adler.

        * DumpRenderTree/mac/DumpRenderTreePasteboard.m:
        (-[LocalPasteboard initWithName:]): Called [super init] first so that we
        don't later use ivars from the wrong self.
        * DumpRenderTree/mac/TestRunnerMac.mm:
        (-[APITestDelegate initWithCompletionCondition:]): Ditto.
        * TestWebKitAPI/Tests/WebKit2ObjC/CustomProtocolsTest.mm:
        (TestWebKitAPI::TEST): Don't leak WKProcessGroups,
        WKBrowsingContextGroups, and WKViews.

2013-08-26  Alexey Proskuryakov  <ap@apple.com>

        WebKitTestRunner needs to protect the user's pasteboard contents while running
        https://bugs.webkit.org/show_bug.cgi?id=81419
        <rdar://problem/11066794>

        Reviewed by Darin Adler.

        Mostly a copy/paste of DRT code.

        Tested manually by making sure that editing/pasteboard/copy-image-with-alt-text.html
        doesn't interfere with my clipboard while being run in a loop.

        * WebKitTestRunner/WebKitTestRunner.xcodeproj/project.pbxproj:
        * WebKitTestRunner/mac/PoseAsClass.h: Added.
        * WebKitTestRunner/mac/PoseAsClass.mm: Added.
        * WebKitTestRunner/mac/TestControllerMac.mm:
        (WTR::TestController::platformInitialize):
        (WTR::TestController::platformDestroy):
        * WebKitTestRunner/mac/WebKitTestRunnerPasteboard.h: Added.
        * WebKitTestRunner/mac/WebKitTestRunnerPasteboard.mm: Added.

2013-08-26  Zan Dobersek  <zdobersek@igalia.com>

        [GTK] Include most of the WebKit2 unit tests into the build and testing
        https://bugs.webkit.org/show_bug.cgi?id=120307

        Reviewed by Philippe Normand.

        There are still various unit test source files that are not being included into
        the build. This patch includes most of these, only leaving out tests that do not
        compile or test features that are not supported by the GTK port.

        * Scripts/run-gtk-tests: Skip four newly-added tests that are failing or timing out.
        (TestRunner):
        * TestWebKitAPI/GNUmakefile.am:

2013-08-26  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] Allow to run tests without Xvfb in run-gtk-tests
        https://bugs.webkit.org/show_bug.cgi?id=120298

        Reviewed by Philippe Normand.

        Add --no-xvfb command line option to run tests in the current
        display.

        * Scripts/run-gtk-tests:
        (TestRunner._run_xvfb): Return early if option --no-xvfb has been
        passed.
        (TestRunner._setup_testing_environment): Use helper function
        _run_xvfb to start Xvfb if needed.
        (TestRunner._tear_down_testing_environment): Check Xvfb is
        actually running before trying to terminate it.

2013-08-26  Zoltan Arvai  <zarvai@inf.u-szeged.hu>

        Adding Gabor Abraham to contributors.json.

        Reviewed by Csaba Osztrogonác.

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

2013-08-26  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] Add support for passing test directories to run-gtk-tests
        https://bugs.webkit.org/show_bug.cgi?id=120296

        Reviewed by Philippe Normand.

        * Scripts/run-gtk-tests:
        (TestRunner._get_tests_from_dir): Helper function to return all
        unit tests found in a given directory.
        (TestRunner._get_tests): Check the given tests passed in the
        command line, so that if a directory is found the tests contained
        in the directory are added to the list of tests to run.

2013-08-26  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] Improve the stop/reload button implementation in MiniBrowser
        https://bugs.webkit.org/show_bug.cgi?id=120292

        Reviewed by Philippe Normand.

        - Use an instance member of BrowserWindow for the button widget
          instead of a global variable.
        - Use notify::is-loading to monitor the WebView load instead of
          the estimated-load-progress property.
        - Use webkit_web_view_is_loading() to check whether the view
          is loading to change the button icon instead of a string
          comparison of the gtk stock icon id.
        - Use the right casts to fix compile warning.

        * MiniBrowser/gtk/BrowserWindow.c:
        (reloadOrStopCallback):
        (webViewLoadProgressChanged):
        (webViewIsLoadingChanged):
        (browser_window_init):
        (browserWindowConstructed):

2013-08-26  Arunprasad Rajkumar  <arurajku@cisco.com>

        [Qt] Remove the fix in QWebPage::javaScriptConsoleMessage introduced by (r61433)
        https://bugs.webkit.org/show_bug.cgi?id=119791

        Reviewed by Jocelyn Turcotte.
        
        Load empty url to send onunload event to currently running page. onunload event is 
        mandatory for LayoutTests/plugins/open-and-close-window-with-plugin.html and
        LayoutTests/plugins/geturlnotify-during-document-teardown.html.

        * DumpRenderTree/qt/DumpRenderTreeQt.cpp:
        (WebPage::~WebPage):

2013-08-26  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] Silence MiniBrowser compile warnings due to recent GTK+ deprecations
        https://bugs.webkit.org/show_bug.cgi?id=120290

        Reviewed by Philippe Normand.

        * MiniBrowser/gtk/GNUmakefile.am: Add
        -DGDK_VERSION_MIN_REQUIRED=GDK_VERSION_3_6 compile option.

2013-08-26  Zan Dobersek  <zdobersek@igalia.com>

        [GTK] Add WillLoad test files to the TestWebKitAPI/TestWebKit2 program
        https://bugs.webkit.org/show_bug.cgi?id=120288

        Reviewed by Carlos Garcia Campos.

        * TestWebKitAPI/GNUmakefile.am: Add the WillLoad.cpp build target that should be compiled
        into the TestWebKit2 program. The InjectedBundle counterpart file is added to the build as well.
        These unit tests are at the moment failing in debug configurations, so it would be nice to
        have the GTK builds report these failures as well.

2013-08-25  Ryuan Choi  <ryuan.choi@samsung.com>

        [EFL] EWebLauncher is executed as full screen with device pixel ratio
        https://bugs.webkit.org/show_bug.cgi?id=120282

        Reviewed by Gyuyoung Kim.

        * EWebLauncher/main.c:
        Use double instead of float for device_pixel_ratio which is passed to ECORE_GETOPT_VALUE_DOUBLE.

2013-08-25  Zan Dobersek  <zdobersek@igalia.com>

        [gdb] Remove the pretty printer for KURLGooglePrivate
        https://bugs.webkit.org/show_bug.cgi?id=120263

        Reviewed by Benjamin Poulain.

        Remove the pretty printer for the WebCore::KURLGooglePrivate structure that
        was usable inside the gdb debugger. The structure was remove from the codebase
        along with the GoogleURL backend for KURL.

        * gdb/webkit.py:
        (JSCJSStringPrinter.to_string):
        (add_pretty_printers):

2013-08-24  Filip Pizlo  <fpizlo@apple.com>

        Unreviewed, fix build-webkit --ftl-jit in the case that you have your own llvm directory. We need to
        prune 'libgtest' and friends from the llvm build, since WebKit builds its own and none of the llvm
        libraries depend on libgtest anyway.

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

2013-08-24  Darin Adler  <darin@apple.com>

        RetainPtr lacks move constructor for case when argument is a RetainPtr of a different type
        https://bugs.webkit.org/show_bug.cgi?id=120255

        Reviewed by Andreas Kling.

        * TestWebKitAPI/Tests/WTF/ns/RetainPtr.mm: Added four tests covering move assignment and construction.

2013-08-24  Anders Carlsson  <andersca@apple.com>

        Don't treat NSLocalizedDescriptionKey and NSLocalizedRecoverySuggestionErrorKey as NSLocalized macros
        https://bugs.webkit.org/show_bug.cgi?id=120249

        Reviewed by Andreas Kling.

        * Scripts/extract-localizable-strings:

2013-08-24  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] Expose WebKitFrame in WebKit2GTK+ web extensions API
        https://bugs.webkit.org/show_bug.cgi?id=119743

        Reviewed by Anders Carlsson.

        * WebKitTestRunner/InjectedBundle/InjectedBundlePage.cpp:
        (WTR::InjectedBundlePage::InjectedBundlePage): Add
        willDestroyFrame.

2013-08-23  Thiago de Barros Lacerda  <thiago.lacerda@openbossa.org>

        Move TestWebKitAPI_LIBRARIES before platform specific cmake include
        https://bugs.webkit.org/show_bug.cgi?id=120220

        Reviewed by Martin Robinson.

        * TestWebKitAPI/CMakeLists.txt:

2013-08-22  Filip Pizlo  <fpizlo@apple.com>

        build-jsc --ftl-jit should work
        https://bugs.webkit.org/show_bug.cgi?id=120194

        Reviewed by Oliver Hunt.

        * Scripts/build-jsc: Need to pass the feature flag to xcodebuild

2013-08-23  Commit Queue  <commit-queue@webkit.org>

        Unreviewed, rolling out r153534.
        http://trac.webkit.org/changeset/153534
        https://bugs.webkit.org/show_bug.cgi?id=120216

        Too many tests failing just WinEWS bots (Requested by rfong on
        #webkit).

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

2013-08-23  Alex Christensen  <alex.christensen@flexsim.com>

        Unreviewed.  Added my webkit.org email address.

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

2013-08-23  Peter Gal  <galpeter@inf.u-szeged.hu>

        [WTR] Should dump as text when the mimetype is text/plain
        https://bugs.webkit.org/show_bug.cgi?id=118306

        Reviewed by Christophe Dumez.

        Check for the text/plain mimetype and if true then mark it as
        text dump.

        * WebKitTestRunner/InjectedBundle/InjectedBundlePage.cpp:
        (WTR::InjectedBundlePage::dump):

2013-08-22  Filip Pizlo  <fpizlo@apple.com>

        Update LLVM binary drops and scripts to the latest version from SVN
        https://bugs.webkit.org/show_bug.cgi?id=120184

        Reviewed by Mark Hahnenberg.

        * ReducedFTL/build.sh:
        * Scripts/configure-llvm: Added.
        * Scripts/copy-webkitlibraries-to-product-directory:
        * Scripts/export-llvm-build:

2013-08-22  Andy Estes  <aestes@apple.com>

        <https://webkit.org/b/120180> Fix issues with OTHER_LDFLAGS in various .xcconfig files

        Reviewed by David Kilzer.

        * TestWebKitAPI/Configurations/Base.xcconfig: Removed the definition of
        OTHER_CPLUSPLUSFLAGS since -ftemplate-depth=256 is already set in
        DebugRelease.xcconfig and TestWebKitAPI isn't built in Production.

2013-08-22  Ryosuke Niwa  <rniwa@webkit.org>

        NRWT: Add the ability to upload test results to new test results server
        https://bugs.webkit.org/show_bug.cgi?id=120146

        Reviewed by Andreas Kling.
        
        For the upcoming replacement for webkit-test-results.appspot.com, new-run-webkit-tests needs to use a new JSON format
        that contains the full summary of the test run including information about passed tests.

        Add this ability to NRWT so that I can start testing this feature. This patch adds the following optoins to NRWT:
        --build-slave
        --got-revision
        --results-server-host

        The last option is somewhat ambigious with --test-results-server but we're intending to deprecate the old server
        so we should be able to delete --test-results-server in time.

        * Scripts/webkitpy/layout_tests/controllers/manager.py:
        (Manager.run):
        (Manager._upload_json_files):
        (Manager):
        (Manager.upload_results):
        * Scripts/webkitpy/layout_tests/models/test_run_results.py:
        (summarize_results):
        * Scripts/webkitpy/layout_tests/models/test_run_results_unittest.py:
        (summarized_results):
        (SummarizedResultsTest.test_summarized_results_wontfix):
        (SummarizedResultsTest):
        (SummarizedResultsTest.test_summarized_results_include_passes):
        * Scripts/webkitpy/layout_tests/run_webkit_tests.py:
        (parse_args):

2013-08-22  Ryosuke Niwa  <rniwa@webkit.org>

        WKR build fix. Somehow tool.bugs.quips() doesn't work in WKR so work around that.

        * Scripts/webkitpy/tool/bot/irc_command.py:
        (Hi.execute):

2013-08-22  Allan Sandfeld Jensen  <allan.jensen@digia.com>

        [Qt] DRT bug revealed/caused by r154300
        https://bugs.webkit.org/show_bug.cgi?id=120151

        Reviewed by Simon Hausmann.

        Since QtInstance had an implementation of getOwnPropertySlot and not getOwnPropertyDescriptor,
        the behavior of getOwnPropertyDescriptor changed when it got implemented using getOwnPropertySlot
        in r154300.

        DRT relied on getOwnPropertyDescriptor returning undefined for JS set properties to distinguish
        between native Qt methods and JSC bound methods. This patch changes the check to see if the 
        property is writable since the Qt methods are ReadOnly.

        * DumpRenderTree/qt/DumpRenderTreeQt.cpp:
        (DumpRenderTree::initJSObjects):

2013-08-21  Joseph Pecoraro  <pecoraro@apple.com>

        <https://webkit.org/b/120134> [Tools] lldb_webkit.py helpers is incorrectly printing 8bit Strings

        Reviewed by Benjamin Poulain.

        WTFString moved the is8bit bit by one in r152201.

        * lldb/lldb_webkit.py:
        (WTFStringImplProvider.is_8bit):

2013-08-21  Tim Horton  <timothy_horton@apple.com>

        Revert http://trac.webkit.org/changeset/154022, as it failed to update
        a variety of scripts that depended on the old format.

        See https://bugs.webkit.org/show_bug.cgi?id=120131 for one such example.

        * Scripts/prepare-ChangeLog:
        (main):
        (generateNewChangeLogs):

2013-08-21  Brent Fulgham  <bfulgham@apple.com>

        [Windows] Unreviewed gardening: WebInspector should always be enabled for WinLauncher.

        * WinLauncher/WinLauncher.cpp:
        (setToDefaultPreferences): Activate Developer Extras on Release (as well as Debug) builds.

2013-08-21  Zan Dobersek  <zdobersek@igalia.com>

        <https://webkit.org/b/120116> [GTK] Fix a typo in ActivateFontsGtk.cpp

        Reviewed by Andreas Kling.

        * WebKitTestRunner/InjectedBundle/gtk/ActivateFontsGtk.cpp:
        (WTR::initializeFontConfigSetting): Fix a typo - inititialize -> initialize.
        (WTR::activateFonts): Ditto.

2013-08-21  Brian Holt  <brian.holt@samsung.com>

        [GTK] Suppress irrelevant or known leaks for Valgrind
        https://bugs.webkit.org/show_bug.cgi?id=119448

        Reviewed by Martin Robinson.

        Add a suppressions file to suppress known leaks for Valgrind.
        Valgrind also takes longer when using suppressions and
        times out unless the driver timeout is increased.

        * Scripts/valgrind/suppressions.txt: Added.
        * Scripts/webkitpy/port/gtk.py:
        (GtkPort.driver_stop_timeout):
        (GtkPort.setup_environ_for_server):

2013-08-20  Alex Christensen  <achristensen@apple.com>

        [Windows] Linking fix for Win64.

        Rubberstamped by Brent Fulgham.

        * win/DLLLauncher/DLLLauncherMain.cpp:
        (wWinMain): Corrected 64-bit linker symbol for dllLauncherEntryPoint.

2013-08-20  Brent Fulgham  <bfulgham@apple.com>

        <https://webkit.org/b/120090> Report better error messages from WinLauncher/DRT

        Reviewed by Tim Horton.

        * win/DLLLauncher/DLLLauncherMain.cpp:
        (getLastErrorString): New method to convert GetLastError to text.
        (wWinMain): Use new error formatter to provide useful diagnostic text to user.

2013-08-19  Gustavo Noronha Silva  <gns@gnome.org>

        <https://webkit.org/b/120048> [GTK] Add stubs for APIs that went missing in the DOM bindings

        Reviewed by Martin Robinson.

        * Scripts/webkitpy/style/checker.py: add the bindings custom implementation files to be exempt
        from naming/enum_casing rules, since it needs to provide GObject-style APIs.

2013-08-20  Anton Obzhirov  <a.obzhirov@samsung.com>

        <https://webkit.org/b/120009> [GTK] Stop button should be added to MiniBrowser

        Reviewed by Martin Robinson.

        Added stop button in MiniBrowser

        * MiniBrowser/gtk/BrowserWindow.c:
        (reloadOrStopCallback): Callback to handle stop or reload button click.
        (webViewLoadProgressChanged): Update reload or stop button icon.
        (browser_window_init): Save button pointer for further icon updates.

2013-08-20  Simon Pena  <simon.pena@samsung.com>

        <https://webkit.org/b/117584> [GTK][WK1] http/tests/loading/unfinished-load-back-to-cached-page-callbacks.html is failing

        Reviewed by Alexey Proskuryakov.

        Update DumpRenderTree to handle the WEBKIT_LOAD_FAILED status,
        printing didFailLoadWithError.

        Behave like other ports, and handle WEBKIT_LOAD_FAILED status in
        DumpRenderTree, printing didFailLoadWithError.

        * DumpRenderTree/gtk/DumpRenderTree.cpp:
        (webFrameLoadStatusNotified):

2013-08-19  Ryosuke Niwa  <rniwa@webkit.org>

        <https://webkit.org/b/120049> Delete code for Snow Leopard

        Reviewed by Benjamin Poulain.

        * DumpRenderTree/mac/CheckedMalloc.cpp:
        (protectionOfRegion):
        (makeLargeMallocFailSilently):
        * DumpRenderTree/mac/DumpRenderTree.mm:
        (resetDefaultsToConsistentValues):
        * DumpRenderTree/mac/DumpRenderTreeDraggingInfo.mm:
        (-[DumpRenderTreeDraggingInfo enumerateDraggingItemsWithOptions:forView:classes:searchOptions:usingBlock:]):
        * DumpRenderTree/mac/FrameLoadDelegate.mm:
        (testPathFromURL):
        (-[FrameLoadDelegate webView:didStartProvisionalLoadForFrame:]):
        * DumpRenderTree/mac/LayoutTestHelper.m:
        * DumpRenderTree/mac/TestRunnerMac.mm:
        * WebKitTestRunner/InjectedBundle/mac/InjectedBundleMac.mm:
        (WTR::InjectedBundle::platformInitialize):
        * WebKitTestRunner/InjectedBundle/mac/InjectedBundlePageMac.mm:
        (WTR::testPathFromURL):
        (WTR::InjectedBundlePage::platformDidStartProvisionalLoadForFrame):

2013-08-19  Alexey Proskuryakov  <ap@apple.com>

        https://bugs.webkit.org/show_bug.cgi?id=119915
        REGRESSION(r154144): ASSERTION FAILED: m_history->provisionalItem() == m_requestedHistoryItem.get()

        Reviewed by Darin Adler.

        The issue was that we ended up having no CFNetwork cache in the testing session due
        to an incorrect cache model. There is a number of things not implemented when it
        comes to dynamically changing cache model as attempted by WebKitTestRunner, but
        the easiest way to get this going is to initialize it to correct value upfront.

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

2013-08-19  Allan Sandfeld Jensen  <allan.jensen@digia.com>

        REGRESSION(r154275): webkitpy tests failing
        https://bugs.webkit.org/show_bug.cgi?id=120010

        Reviewed by Jocelyn Turcotte.

        Update unit-tests to tests the new search-path structure,
        but reverting the architecture search path addition.

        * Scripts/webkitpy/port/qt.py:
        (QtPort):
        (QtPort.__init__):
        (QtPort._generate_all_test_configurations):
        (QtPort.qt_architecture):
        * Scripts/webkitpy/port/qt_unittest.py:
        (QtPortTest):
        (QtPortTest._assert_search_path):
        (QtPortTest._assert_expectations_files):
        (QtPortTest._qt_version):

2013-08-19  Allan Sandfeld Jensen  <allan.jensen@digia.com>

        [Qt] Keep the qt-5.0-wk2 search path until the expectation migration is completed

        Unreviewed meta gardening.

        We need to keep using the qt-5.0-wk2 path until it is fully migrated.

        * Scripts/webkitpy/port/qt.py:
        (QtPort._search_paths):

2013-08-19  Allan Sandfeld Jensen  <allan.jensen@digia.com>

        Restructure Qt test expectations

        Unreviewed meta gardening.

        Removed 5.0 name from WK1 and WK2 results and made it possible to set
        expectations by both Qt version and mayor architectures.

        * Scripts/webkitpy/port/qt.py:
        (QtPort._wk2_port_name):
        (QtPort.__init__):
        (QtPort.qt_version):
        (QtPort.architecture):
        (QtPort._search_paths):
        (QtPort._port_specific_expectations_files):

2013-08-16  Brent Fulgham  <bfulgham@apple.com>

        [Windows] DRT is not using the same preferences as the Mac build.
        https://bugs.webkit.org/show_bug.cgi?id=119822

        Reviewed by Darin Adler.

        * DumpRenderTree/win/DumpRenderTree.cpp:
        (runTest): Process Windows message queue using CFRunLoop to allow
        dispatch routines to run properly.
        (dllLauncherEntryPoint): Wrap CG-specific setup code in a macro
        to prevent problems on WinCairo port.

2013-08-16  Brent Fulgham  <bfulgham@apple.com>

        [Windows] URL printing code in DRT doesn't match WTR or Mac DRT
        https://bugs.webkit.org/show_bug.cgi?id=119583

        Reviewed by Alexey Proskuryakov.

        * DumpRenderTree/win/DumpRenderTree.cpp:
        (urlSuitableForTestResult): Revise URL output to match Mac DRT by emiting last path
        component if the URL does not contain the expected base URL.

2013-08-16  Pratik Solanki  <psolanki@apple.com>

        <https://webkit.org/b/119852> Frame::scriptController() should return a reference

        Reviewed by Andreas Kling.

        m_script is never NULL so we can just return a reference. Also remove some pointless null
        checks as a result of doing this.

        * DumpRenderTree/blackberry/DumpRenderTree.cpp:
        (BlackBerry::WebKit::DumpRenderTree::resetToConsistentStateBeforeTesting):

2013-08-15  Alexey Proskuryakov  <ap@apple.com>

        [WK2] NetworkProcess should use a temporary storage session for test
        https://bugs.webkit.org/show_bug.cgi?id=119855

        Reviewed by Darin Adler.

        Use a new API that takes care of both WebProcess and NetworkProcess.

        * WebKitTestRunner/InjectedBundle/InjectedBundle.cpp:
        (WTR::InjectedBundle::initialize):
        * WebKitTestRunner/TestController.cpp:
        (WTR::TestController::initialize):

2013-08-15  Bem Jones-Bey  <bjonesbe@adobe.com>

        <https://webkit.org/b/119850> Speed up test importing by doing all the regex matching in a single pass

        Reviewed by Dirk Pranke.

        This is a port from Blink of
        https://src.chromium.org/viewvc/blink?revision=155647&view=revision
        originally by Dirk Pranke.

        From the original commit:

        This gives something like a 15x speedup over compiling and matching
        one property at a time and doing multiple passes over the file.

        * Scripts/webkitpy/w3c/test_converter.py:
        (W3CTestConverter.__init__):
        (W3CTestConverter.convert_prefixed_properties):
        (W3CTestConverter.add_webkit_prefix_to_unprefixed_properties):

2013-08-15  Dan Bernstein  <mitz@apple.com>

        <https://webkit.org/b/119856> Improve extract-localizable-strings messages

        Reviewed by Darin Adler.

        * Scripts/extract-localizable-strings: When the strings file disagrees with the source code,
        added a message that points to the source code. Removed some unnecessary repetition of what
        is already in the file.

2013-08-15  Andy Estes  <aestes@apple.com>

        <https://webkit.org/b/119853> REGRESSION (r139343): WebKit crashes when canceling a load inside webView:resource:didFinishLoadingFromDataSource:

        Reviewed by Brady Eidson.

        Wrote an API test that verifies -[WebView stopLoading:] can be called
        inside webView:resource:didFinishLoadingFromDataSource: without crashing.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/mac/StopLoadingFromDidFinishLoading.mm: Added.
        (-[StopLoadingFromDidFinishLoadingDelegate webView:resource:didFinishLoadingFromDataSource:]):
        (TestWebKitAPI::TEST):

2013-08-15  Alexey Proskuryakov  <ap@apple.com>

        Adding Myles Maxfield to contributors.json.

        Oops, wrong section, fixing.

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

2013-08-15  Alexey Proskuryakov  <ap@apple.com>

        Adding Myles Maxfield to contributors.json.

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

2013-08-15  Allan Sandfeld Jensen  <allan.jensen@digia.com>

        [Qt] Do not check specifically for version 5.0
        https://bugs.webkit.org/show_bug.cgi?id=119846

        Reviewed by Jocelyn Turcotte.

        For Qt 5.x we should always use both wk1 and wk2 basepath results.

        * Scripts/webkitpy/port/qt.py:
        (QtPort._search_paths):

2013-08-15  Simon Pena  <simon.pena@samsung.com>

        <https://webkit.org/b/119584> [Gtk] URL printing code in DumpRenderTree doesn't match WTR or Mac DRT

        Reviewed by Gustavo Noronha Silva.

        Following a similar approach as in r153977, return a path string
        that is relative to main frame URL or just file name if the
        resource is not in the same directory subtree, and replace empty
        strings with "(null)".

        Update pathFromSoupURI so it behaves more closely to the other
        ports, and remove the unused code after we no longer print
        <unknown> in certain cases. Also move
        soupURIToStringPreservingPassword to DumpRenderTreeGtk so it can
        be used both in TestRunnerGtk and in DumpRenderTree.

        * DumpRenderTree/gtk/DumpRenderTree.cpp:
        (soupURIToStringPreservingPassword): Moved from TestRunnerGtk so
        we can print Soup URIs with the password, since soup_uri_to_string
        doesn't preserve them.
        (pathFromSoupURI): Updated following EFL implementation in
        r153977, and return a WTFString instead of a CString.
        (convertSoupMessageToURLPath): Return "(null)" instead of empty
        strings, and handle the new return type of pathFromSoupURI.
        (convertWebResourceToURLPath): Use a GOwnPtr to hold the Soup URI
        reference, and handle the new return type of pathFromSoupURI.
        (descriptionSuitableForTestResult): Remove unused code.
        (didFinishLoading): Use convertResourceToURLPath.
        (didFailLoadingWithError): Use convertResourceToURLPath.
        (authenticationCallback): Display the URL of the authentication
        challenge.
        * DumpRenderTree/gtk/DumpRenderTreeGtk.h: Declare
        soupURIToStringPreservingPassword.
        * DumpRenderTree/gtk/TestRunnerGtk.cpp: Remove
        soupURIToStringPreservingPassword.

2013-08-14  Tim Horton  <timothy_horton@apple.com>

        Un-inline dataLog dumpers for IntSize and IntPoint
        https://bugs.webkit.org/show_bug.cgi?id=119697

        Reviewed by Sam Weinig.

        * TestWebKitAPI/GNUmakefile.am:

2013-08-14  Ryosuke Niwa  <rniwa@webkit.org>

        Flakiness dashboard build fix.

        * TestResultServer/static-dashboards/flakiness_dashboard.js:
        (processTestRunsForBuilder):

2013-08-14  Martin Robinson  <mrobinson@igalia.com>

        [GTK] [CMake] Add support for building TestWebKitAPI
        https://bugs.webkit.org/show_bug.cgi?id=116987

        Reviewed by Philippe Normand.

        * TestWebKitAPI/CMakeLists.txt: Move the library listings to before the inclusion of the
        platform-specific file, so that GTK+ can override them.
        * TestWebKitAPI/PlatformGTK.cmake: Added.

2013-08-14  Brent Fulgham  <bfulgham@apple.com>

        [Windows] Simplify Setting WebKit Debugging Options in WinLauncher
        https://bugs.webkit.org/show_bug.cgi?id=119775

        This bug updates the WinLauncher program with a few useful menu
        options to toggle certain debugging and development features of
        WebKit.

        Reviewed by Tim Horton.

        * WinLauncher/WinLauncher.cpp:
        (dllLauncherEntryPoint): Clean up preference objects on exit.
        (ToggleMenuItem): New function.
        (LaunchInspector): New function.
        (WndProc): Add handler for new menu items. Also properly terminate
        CFRunLoop operation on program exit.
        * WinLauncher/WinLauncher.vcxproj/WinLauncherLib.rc: Add new
        menu items.
        * WinLauncher/WinLauncher.vcxproj/WinLauncherLibCommon.props: Add
        resource folder to search path.
        * WinLauncher/WinLauncher.vcxproj/WinLauncherLibResource.h: Update
        for new menu items.

2013-08-14  Ryosuke Niwa  <rniwa@webkit.org>

        Add a hyperlink from build.webkit.org to the flakiness dashboard.

        Rubbers-tamped by Simon Fraser.

        * BuildSlaveSupport/build.webkit.org-config/templates/root.html:

2013-08-14  Benjamin Dupont   <bdupont@nds.com>

        [Qt] Activate visibility API layout tests
        https://bugs.webkit.org/show_bug.cgi?id=119790

        Reviewed by Allan Sandfeld Jensen.

        * DumpRenderTree/qt/TestRunnerQt.cpp:
        (TestRunner::resetPageVisibility):
        (TestRunner::setPageVisibility):

2013-08-13  Xabier Rodriguez Calvar  <calvaris@igalia.com>

        [GTK] WK does not link properly against libxslt
        https://bugs.webkit.org/show_bug.cgi?id=119688

        Reviewed by Gustavo Noronha Silva.

        * MiniBrowser/gtk/GNUmakefile.am: Added LIBXSLT_LIBS to
        MiniBrowser.
        * WebKitTestRunner/GNUmakefile.am: Added LIBXSLT_LIBS to WTR.

2013-08-13  Alexey Proskuryakov  <ap@apple.com>

        [Mac] fast/dom/attr-style-too-lazy.html is flaky
        https://bugs.webkit.org/show_bug.cgi?id=119763

        Reviewed by Darin Adler.

        * DumpRenderTree/mac/UIDelegate.mm:
        (-[UIDelegate webView:setStatusText:]): Don't dump anything when not running
        a test, it would just semi-randomly leak to the next one.
        (-[UIDelegate webView:didPressMissingPluginButton:]): Added same check here, just
        for good measure.

2013-08-13  Tim Horton  <timothy_horton@apple.com>

        [mac] Give MiniBrowser a reasonable bundle identifier
        https://bugs.webkit.org/show_bug.cgi?id=119773

        Rubber-stamped by Simon Fraser.

        Give MiniBrowser the bundle identifier org.webkit.MiniBrowser.

        * MiniBrowser/mac/Info.plist:
        * MiniBrowser/mac/WebBundle/Info.plist:

2013-08-13  Dean Jackson  <dino@apple.com>

        <https://webkit.org/b/119766> Make bug url more human friendly in ChangeLog

        Reviewed by Mark Rowe.

        Have prepare-ChangeLog produce webkit.org/b/id style
        URLs rather than exposing the inner workings of our
        cgi. I was going to use the term "Future Proofing"
        but that seems excessive :)

        * Scripts/prepare-ChangeLog:
        (main): Generate a more human readable form.
        (generateNewChangeLogs): Use it when printing out the ChangeLog entry.

2013-08-13  Raphael Kubo da Costa  <raphael.kubo.da.costa@intel.com>

        [EFL][DRT] Simplify call to reverseFind()
        https://bugs.webkit.org/show_bug.cgi?id=119746

        Reviewed by Christophe Dumez.

        Follow-up to r153977.

        * DumpRenderTree/efl/DumpRenderTreeChrome.cpp:
        (pathSuitableForTestResult): Instead of defining a static variable
        that's only used in a single place, pass '/' to reverseFind() directly.

2013-08-13  Alberto Garcia  <berto@igalia.com>

        [GTK] Closing inspector window crashes wk
        https://bugs.webkit.org/show_bug.cgi?id=110865

        Reviewed by Carlos Garcia Campos.

        Disconnect all signal handlers if the inspector window is
        destroyed.

        * GtkLauncher/LauncherInspectorWindow.c:
        (inspectorWindowDestroyed):
        (launcherInspectorWindowNew):

2013-08-12  Dan Bernstein  <mitz@apple.com>

        extract-localizable-strings output is not suited for parsing by Xcode
        https://bugs.webkit.org/show_bug.cgi?id=119728

        Reviewed by Darin Adler.

        Added spaces where needed after “path:line:” to allow Xcode to recognize the file reference,
        removed “ERROR” since messages that refer to a line in a file are shown as error by default,
        added “warning: ” in messages that aren’t errors (i.e. don’t prevent the script from exiting
        with 0).

        * Scripts/extract-localizable-strings:

2013-08-12  Ryuan Choi  <ryuan.choi@samsung.com>

        [EFL][WK1] URL printing code in DumpRenderTree doesn't match WTR or Mac DRT
        https://bugs.webkit.org/show_bug.cgi?id=119585

        Reviewed by Gyuyoung Kim.

        * DumpRenderTree/efl/DumpRenderTreeChrome.cpp:
        (pathSuitableForTestResult):
        Return path string that's relative to main frame URL, or just file name if
        the resource is not in the same directory subtree.
        Referenced WebKitTestRunner code in r153852.
        (descriptionSuitableForTestResult):
        (DumpRenderTreeChrome::onFrameRedirectRequested):
        (DumpRenderTreeChrome::onNewResourceRequest): Followed changes of r153903.

2013-08-12  Dan Bernstein  <mitz@apple.com>

        extract-localizable-strings doesn't know how to verify an existing strings file
        https://bugs.webkit.org/show_bug.cgi?id=119704

        Reviewed by Darin Adler.

        * Scripts/extract-localizable-strings: Added an --exceptions option for specifying the
        exceptions file, changing the way “no exceptions file” is expressed from passing “-” as the
        exceptions file name to omitting the --exceptions option. Added a --skip option, changing
        the way directories to skip are specified from prefixing the directory with a “-” to
        specifying it with --skip.
        Finally, added a --verify option. When specified, the strings file is not written to, but
        instead read in and checked for consistency with the comments, keys and values derived from
        the source files and the exceptions file. Missing keys, unused keys, mismatching values and
        mismatching comments are reported as errors.
        * Scripts/update-webkit-localizable-strings: Updated for the new way of specifying
        directories to skip and no exceptions file.

2013-08-12  Alexey Proskuryakov  <ap@apple.com>

        http/tests/security/sandboxed-iframe-invalid.html is flaky on Mac
        https://bugs.webkit.org/show_bug.cgi?id=85522

        Reviewed by Andy Estes.

        * DumpRenderTree/mac/UIDelegate.mm:
        (-[UIDelegate webView:addMessageToConsole:withSource:]): Don't print console messages
        when already done with a test. We already had this check in all UI delegate functions,
        except for -webView:addMessageToConsole:withSource: somehow.

2013-08-12  Alexey Proskuryakov  <ap@apple.com>

        https://bugs.webkit.org/show_bug.cgi?id=119693
        [Mac] security/contentSecurityPolicy/connect-src-websocket-blocked.html is flaky
        because of connect-src-websocket-allowed.html

        Reviewed by Darin Adler.

        Starting a load of about:blank and immediately stopping it cancels outstanding
        resource loads, but the page has to transition to committed state to have timers
        or WebSockets stopped too.

        * DumpRenderTree/mac/DumpRenderTree.mm: (runTest): Use a synchronous load to
        ensure that transition to committed state happens before we start the next test.

2013-08-12  Beth Dakin  <bdakin@apple.com>

        The LayoutMilestones didLayout callback should only fire for the main frame
        https://bugs.webkit.org/show_bug.cgi?id=119457

        Reviewed by Sam Weinig.

        Now that the didLayout callback only fires for the main frame, we want to make 
        sure it will fire even when all of the content is in a subframe.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WebKit2/LayoutMilestonesWithAllContentInFrame.cpp: Added.
        (TestWebKitAPI::didLayout):
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/WebKit2/all-content-in-one-iframe.html: Added.

2013-08-12  Beth Dakin  <bdakin@apple.com>

        Remove didNewFirstVisuallyNonEmptyLayout from WebKit2
        https://bugs.webkit.org/show_bug.cgi?id=119658

        Reviewed by Darin Adler.

        * MiniBrowser/mac/WK2BrowserWindowController.m:
        (-[WK2BrowserWindowController awakeFromNib]):
        * WebKitTestRunner/InjectedBundle/InjectedBundlePage.cpp:
        (WTR::InjectedBundlePage::InjectedBundlePage):
        * WebKitTestRunner/TestController.cpp:
        (WTR::TestController::createWebViewWithOptions):

2013-08-12  Seokju Kwon  <seokju@webkit.org>

        Remove glu's libtest rule from checker.py
        https://bugs.webkit.org/show_bug.cgi?id=119674

        Reviewed by Darin Adler.

        * Scripts/webkitpy/style/checker.py: It is no longer used after r148032.

2013-08-11  ChangSeok Oh  <changseok.oh@collabora.com>

        Unreviewed. Change my primary mail address.

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

2013-08-09  Gustavo Noronha Silva  <gustavo.noronha@collabora.com>

        [GTK] Misses mod_ssl and php in the list of packages required for tests for yum
        https://bugs.webkit.org/show_bug.cgi?id=115751

        Reviewed by Martin Robinson.

        * gtk/install-dependencies: add mod_ssl and php to the packages installed for tests
        with yum.

2013-08-09  Beth Dakin  <bdakin@apple.com>

        AX: Not able to use arrow keys to read text in a WK2 app
        https://bugs.webkit.org/show_bug.cgi?id=119605
        -and corresponding-
        <rdar://problem/14281275>

        Reviewed by Darin Adler.

        New test verifies that didNotHandleKeyEvent will be called when there is nothing 
        to scroll. 
        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WebKit2/DidNotHandleKeyDown.cpp: Added.
        (TestWebKitAPI::didFinishLoadForFrame):
        (TestWebKitAPI::didNotHandleKeyEventCallback):
        (TestWebKitAPI::TEST):

2013-08-09  Christophe Dumez  <ch.dumez@sisa.samsung.com>

        Add support for KeyboardEvent.location attribute
        https://bugs.webkit.org/show_bug.cgi?id=119326

        Reviewed by Benjamin Poulain.

        Rename the deprecated 'keyLocation' to 'location' in Mac's DRT code.

        * DumpRenderTree/mac/EventSendingController.mm:
        (-[EventSendingController keyDown:withModifiers:withLocation:]):
        (-[EventSendingController keyDownWrapper:withModifiers:withLocation:]):
        (-[EventSendingController scheduleAsynchronousKeyDown:withModifiers:withLocation:]):
        (-[EventSendingController handleEvent:]):
        (-[EventSendingController fireKeyboardEventsToElement:]):

2013-08-09  Alexey Proskuryakov  <ap@apple.com>

        <unknown> is often dumped instead of path in test output
        https://bugs.webkit.org/show_bug.cgi?id=119590

        Reviewed by Anders Carlsson.

        There were two reasons for <unknown>:
        1. When delegate logging is enabled via a testRunner call, that obviously happens
        after main resource load starts, so we don't record its URL.
        2. Authentication delegate logging relied on URL recording, but it's only turned on
        when enabling resource loading delegate logging, not auth one.

        URL recording was made conditional in <http://trac.webkit.org/r19316>, which was
        landed without posted rationale and unreviewed. Just undoing that change now.

        * DumpRenderTree/mac/ResourceLoadDelegate.mm:
        (-[ResourceLoadDelegate webView:identifierForInitialRequest:fromDataSource:]):
        * WebKitTestRunner/InjectedBundle/InjectedBundlePage.cpp:
        (WTR::InjectedBundlePage::didInitiateLoadForResource):

2013-08-08  Alex Christensen  <achristensen@apple.com>

        Windows build fixes.

        Rubberstamped by Brent Fulgham.

        * DumpRenderTree/DumpRenderTree.vcxproj/DumpRenderTree/DumpRenderTreeLauncher.vcxproj:
        Removed /SAFESEH link option which doesn't work with x64.

2013-08-08  Daniel Bates  <dabates@apple.com>

        Add iOS support to run-javascriptcore-tests
        https://bugs.webkit.org/show_bug.cgi?id=119602

        Reviewed by Joseph Pecoraro.

        Make run-javascriptcore-tests work for iOS WebKit.

        * Scripts/run-javascriptcore-tests:

2013-08-08  Alexey Proskuryakov  <ap@apple.com>

        [WK2] loader/go-back-cached-main-resource.html fails
        https://bugs.webkit.org/show_bug.cgi?id=116491

        Reviewed by Tim Horton.

        * DumpRenderTree/efl/DumpRenderTreeChrome.cpp:
        * DumpRenderTree/gtk/DumpRenderTree.cpp:
        * DumpRenderTree/qt/DumpRenderTreeQt.cpp:
        * DumpRenderTree/win/DumpRenderTree.cpp:
        Added FIXMEs about making path printing normalization more compatible.

        * DumpRenderTree/mac/ResourceLoadDelegate.mm: (-[NSURL _drt_descriptionSuitableForTestResult]):
        Return last path component in cases where we used to return a full path, which is
        never desirable. Added a null check to basePath to prevent potentially getting
        an Objective C exception.

        * WebKitTestRunner/InjectedBundle/InjectedBundlePage.cpp:
        (WTR::pathSuitableForTestResult): Changed to use path for main test window, not
        for a currently loading one (which is different for tests that use multiple windows).
        Changed to return "(null)" for empty URLs to match WK1 output. Changed to return
        last path component as last fallback.
        (WTR::dumpRequestDescriptionSuitableForTestResult): We no longer need to pass main
        frame URL here, and it was potentially a wrong frame.
        (WTR::dumpResponseDescriptionSuitableForTestResult): Ditto.
        (WTR::InjectedBundlePage::willPerformClientRedirectForFrame): Ditto.
        (WTR::InjectedBundlePage::didInitiateLoadForResource): Ditto.
        (WTR::InjectedBundlePage::willSendRequestForFrame): Ditto.
        (WTR::InjectedBundlePage::didReceiveResponseForResource): Ditto.

2013-08-08  Alex Christensen  <achristensen@apple.com>

        WTR::pathSuitableForTestResult should behave the same as _drt_descriptionSuitableForTestResult so we can unskip tests.
        https://bugs.webkit.org/show_bug.cgi?id=116125

        Reviewed by Tim Horton. Tweaked and re-landed by Alexey Proskuryakov.

        * WebKitTestRunner/InjectedBundle/InjectedBundlePage.cpp:
        (WTR::pathSuitableForTestResult):
        Changed string operations to match _drt_descriptionSuitableForTestResult.
        (WTR::dumpRequestDescriptionSuitableForTestResult):
        (WTR::dumpResponseDescriptionSuitableForTestResult):
        (WTR::InjectedBundlePage::willPerformClientRedirectForFrame):
        (WTR::InjectedBundlePage::didInitiateLoadForResource):
        (WTR::InjectedBundlePage::willSendRequestForFrame):
        (WTR::InjectedBundlePage::didReceiveResponseForResource):
        Pass the main frame's URL to pathSuitableForTestResult.
        * WebKitTestRunner/InjectedBundle/InjectedBundlePage.h:
        Added WKBundlePageRef to willPerformClientRedirectForFrame.

2013-08-07  Simon Fraser  <simon.fraser@apple.com>

        Allow the DumpRenderTree runloop to be idle while waiting for a test to complete
        https://bugs.webkit.org/show_bug.cgi?id=119317

        Reviewed by Tim Horton.
        
        The change in r55200 made DumpRenderTree spin a busy-loop while waiting for
        the test to complete, which is not power friendly. Although DRT instances
        are generally busy anyway, not sitting in a busy loop should free up some CPU
        cycles for other instances of DRT.
        
        Editing tests continue to pass. All Java tests are skipped and were not
        tested, but when run fail similarly with and without the patch.

        * DumpRenderTree/mac/DumpRenderTree.mm:
        (dump):
        (runTest):

2013-08-07  Daniel Bates  <dabates@apple.com>

        Clean up: Simplifying the printing of the command line arguments passed to jsDriver.pl
        <https://bugs.webkit.org/show_bug.cgi?id=119558>

        Reviewed by Martin Robinson.

        Currently we build the command line to execute jsDriver.pl twice so as to both
        print it to standard output and actually execute it. We should only build up
        this command line once. Moreover, we should print to standard output the actual
        command line that we are going to use including the GTK- and EFL-specific call
        to /Tools/jhbuild/jhbuild-wrapper.

        * Scripts/run-javascriptcore-tests:

2013-08-07  Mario Sanchez Prada  <mario.prada@samsung.com>

        [EFL] REGRESSION after r153432: some accessibility tests crash.
        https://bugs.webkit.org/show_bug.cgi?id=119333

        Reviewed by Darin Adler.

        Use a RefPtr to store a reference to the parent element of
        an AccessibilityUIElement instead of the raw pointer, so we
        never derefence a function from an invalid pointer.

        * WebKitTestRunner/InjectedBundle/atk/AccessibilityUIElementAtk.cpp:
        (WTR::attributesOfElement): Use a RefPtr instead of a raw pointer.

2013-08-07  Cosmin Truta  <ctruta@blackberry.com>

        Unreviewed. Add myself as a committer.

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

2013-08-04  Sam Weinig  <sam@webkit.org>

        Remove support for HTML5 MicroData
        https://bugs.webkit.org/show_bug.cgi?id=119480

        Reviewed by Anders Carlsson.

        * Scripts/webkitperl/FeatureList.pm:
        * qmake/mkspecs/features/features.pri:

2013-07-23  David Farler  <dfarler@apple.com>

        Provide optional OTHER_CFLAGS, OTHER_CPPFLAGS, OTHER_LDFLAGS additions for building with ASAN
        https://bugs.webkit.org/show_bug.cgi?id=117762

        Reviewed by Mark Rowe.

        * DumpRenderTree/mac/Configurations/DebugRelease.xcconfig:
        Add ASAN_OTHER_CFLAGS, CPLUSPLUSFLAGS, LDFLAGS.
        * DumpRenderTree/mac/Configurations/DumpRenderTree.xcconfig:
        Add ASAN_OTHER_LDFLAGS.
        * MiniBrowser/Configurations/DebugRelease.xcconfig:
        Add ASAN_OTHER_CFLAGS, CPLUSPLUSFLAGS, LDFLAGS.
        * Scripts/check-for-weak-vtables-and-externals:
        Ignore ___asan externals, these are populated by compiler-rt.
        * TestWebKitAPI/Configurations/DebugRelease.xcconfig:
        Add ASAN_OTHER_CFLAGS, CPLUSPLUSFLAGS, LDFLAGS.
        * TestWebKitAPI/Configurations/TestWebKitAPI.xcconfig:
        Add ASAN_OTHER_LDFLAGS.
        * WebKitLauncher/Configurations/Base.xcconfig:
        Add ASAN_OTHER_CFLAGS, CPLUSPLUSFLAGS, LDFLAGS.
        * WebKitLauncher/Configurations/WebKitNightlyEnabler.xcconfig:
        Add ASAN_OTHER_LDFLAGS.
        * WebKitTestRunner/Configurations/DebugRelease.xcconfig:
        Add ASAN_OTHER_CFLAGS, CPLUSPLUSFLAGS, LDFLAGS.
        * WebKitTestRunner/Configurations/InjectedBundle.xcconfig:
        Add ASAN_OTHER_LDFLAGS.
        * asan/asan.xcconfig: Added.
        * asan/webkit-asan-ignore.txt: Added.

2013-08-05  Brian Holt  <brian.holt@samsung.com>

        [GTK] Implement leak checking with valgrind
        https://bugs.webkit.org/show_bug.cgi?id=118785

        Reviewed by Dirk Pranke.

        Launch the DRT under Valgrind to generate xml files with details
        of leaks found.

        * Scripts/webkitpy/layout_tests/run_webkit_tests.py:
        (parse_args):
        * Scripts/webkitpy/port/gtk.py:
        (GtkPort.__init__):
        (GtkPort.default_timeout_ms): Allow extra time to run under
        Valgrind.
        (GtkPort.setup_environ_for_server): Pass Valgrind instructions
        using environment variables.

2013-08-02  Mario Sanchez Prada  <mario.prada@samsung.com>

        [EFL] REGRESSION after r153432: some accessibility tests crash.
        https://bugs.webkit.org/show_bug.cgi?id=119333

        Reviewed by Gustavo Noronha Silva.

        Add missing null-check to avoid dereferencing a non-existent parent.

        * WebKitTestRunner/InjectedBundle/atk/AccessibilityUIElementAtk.cpp:
        (WTR::attributesOfElement): Ditto.

2013-08-02  Patrick Gansterer  <paroga@webkit.org>

        Add --rmdir option to git svn dcommit
        https://bugs.webkit.org/show_bug.cgi?id=119398

        Reviewed by Ryosuke Niwa.

        Add this option tells git-svn to remove empty directories
        from the svn tree so they do not leave over there.

        * Scripts/webkitpy/common/checkout/scm/git.py:
        (Git.push_local_commits_to_server):

2013-08-01  Brent Fulgham  <bfulgham@apple.com>

        [Windows] WebKit1 Fullscreen Video Play is Broken
        https://bugs.webkit.org/show_bug.cgi?id=119415

        Reviewed by Jer Noble.

        * WinLauncher/WinLauncher.cpp:
        (dllLauncherEntryPoint): Activate full screen mode via
        IWebPreferencesInternal interface.

2013-08-01  ChangSeok Oh  <changseok.oh@collabora.com>

        Unreviewed. Add an alternative address to show my affiliation in team.html.

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

2013-08-01  Bem Jones-Bey  <bjonesbe@adobe.com>

        Duplicate property names can cause test to fail
        https://bugs.webkit.org/show_bug.cgi?id=119399

        Reviewed by Dirk Pranke.

        This problem was noticed when porting the patch for
        http://wkb.ug/119357 to Blink: a test would fail because the converted
        and test property lists weren't the same length, but they contained
        all of the same property names. It looks like this is actually caused
        by a bug in converting the HTML, which is being currently rewritten.
        In the meantime, as long as this compares the number of unique
        properties, it makes the test more robust.

        * Scripts/webkitpy/w3c/test_converter_unittest.py:
        (verify_prefixed_properties):

2013-08-01  Bem Jones-Bey  <bjonesbe@adobe.com>

        Unreviewed. Adding my expertise.

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

2013-08-01  ChangSeok Oh  <changseok.oh@collabora.com>

        Unreviewed. Add myself as a committer. Yoo-hoo! \o/

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

2013-08-01  Commit Queue  <commit-queue@webkit.org>

        Unreviewed, rolling out r153518.
        http://trac.webkit.org/changeset/153518
        https://bugs.webkit.org/show_bug.cgi?id=119386

        The Jhbuild dep bump of GTK+ is not actually required by
        layout testing, is causing pango dep problems (Requested by
        zdobersek on #webkit).

        * gtk/jhbuild.modules:

2013-08-01  Xabier Rodriguez Calvar  <calvaris@igalia.com>

        Unreviewed. Add myself as a committer.

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

2013-08-01  Jaehun Lim  <ljaehun.lim@samsung.com>

        Unreviewed. Add myself as a committer.

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

2013-07-31  Jinwoo Song  <jinwoo7.song@samsung.com>

        Unreviewed. Add myself as a committer.

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

2013-08-01  Alberto Garcia  <berto@igalia.com>

        Unreviewed. Add myself as a committer.

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

2013-07-31  Seokju Kwon  <seokju@webkit.org>

        Unreviewed. Add myself as a committer.

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

2013-07-31  Bem Jones-Bey  <bjonesbe@adobe.com>

        W3C test import script prefixes some properties that it shouldn't
        https://bugs.webkit.org/show_bug.cgi?id=119357

        Reviewed by Dirk Pranke.

        Some prefixed properties also have unprefixed implemetations, but when
        the implementations aren't identical, they aren't declared in
        CSSPropertyNames.in on the same line. This fixes the import script so
        that it catches all instances of prefixed properties that have an
        unprefixed variant, and does not add the prefix in those cases.

        * Scripts/webkitpy/w3c/test_converter.py:
        (W3CTestConverter.read_webkit_prefixed_css_property_list): Read all of
        the properties on every line and record if they are prefixed or not.
        Use this information to only return prefixed properties that do not
        have any unprefixed variant. The prefixed property list has also
        changed to not include the '-webkit-' prefix, making it much easier to
        do the comparison, and removing the need to remove the prefix later.
        (W3CTestConverter.add_webkit_prefix_to_unprefixed_properties): This no
        longer needs to remove the '-webkit-' prefix, but needs to add it in
        the case where a property that needs a prefix is found.
        * Scripts/webkitpy/w3c/test_converter_unittest.py:
        (W3CTestConverterTest.test_read_prefixed_property_list): Remove assert
        for '-webkit-' prefix, as it is no longer included in the properties
        in the prefixed property list.

2013-07-31  Bem Jones-Bey  <bjonesbe@adobe.com>

        Update location of w3c shapes tests to reflect new import location
        https://bugs.webkit.org/show_bug.cgi?id=118156

        Reviewed by Dirk Pranke.

        Partial imports should not be imported to the same place as the full
        import, so this adds an option to allow importing to a different
        location than the default. In doing that, I found that imports from
        contributor directories didn't seem to be working correctly, so I
        updated the import to be smarter about both contributor directories
        and the test status directories. It should now be more likely that the
        script guesses the root directory properly.

        * Scripts/webkitpy/w3c/test_importer.py: Remove comment about the
            script not working with the full set of contributors, as that is
            no longer true, and I didn't see a good way to keep that behavior.
            Also update documentation to properly explain what happens when a
            contributor dir is imported.
        (main): Attempt to find the proper repo dir by looking at the
            directory above the "test status" in the given path, this is still
            not exactly right, but is less error prone than just trimming.
        (parse_args): Add -d option to set the import directory.
        (TestImporter.__init__): Stop appending the subdirs to the
            destination_directory because it was making things more complex
            and isn't really needed.
        (TestImporter.update_test_status): Remove hardcoded strings and use
            the TEST_STATUS constants instead.
        * Scripts/webkitpy/w3c/test_importer_unittest.py:
        (TestImporterTest.test_import_dir_with_no_tests_and_no_hg): Add
            support for new option.
        (TestImporterTest.test_import_dir_with_no_tests): Ditto.

2013-07-31  Brent Fulgham  <bfulgham@apple.com>

        [Windows] Winlauncher shouldn't look for Safari Install Directory
        https://bugs.webkit.org/show_bug.cgi?id=119351

        Reviewed by Darin Adler.

        * win/DLLLauncher/DLLLauncherMain.cpp: Don't check registry for
        the Safari install location. Instead, use the proper support
        library path for the build architecture.

2013-07-31  Bem Jones-Bey  <bjonesbe@adobe.com>

        Update scripts to reference contributors.json instead of committers.py in messaging
        https://bugs.webkit.org/show_bug.cgi?id=119342

        Reviewed by Ryosuke Niwa.

        Change the scripts to point people to contributors.json instead of
        committers.py since the latter no longer contains the list of
        contributors.

        * Scripts/webkitpy/common/config/committervalidator.py:
        (CommitterValidator._contributors_json_path):
        (CommitterValidator._flag_permission_rejection_message):
        * Scripts/webkitpy/common/config/committervalidator_unittest.py:
        (CommitterValidatorTest.test_flag_permission_rejection_message):
        * Scripts/webkitpy/common/net/bugzilla/bugzilla.py:
        (Bugzilla._commit_queue_flag):
        * Scripts/webkitpy/common/watchlist/watchlistparser.py:
        (WatchListParser._validate):
        * Scripts/webkitpy/common/watchlist/watchlistparser_unittest.py:
        (WatchListParserTest.test_cc_rule_with_invalid_email):
        * Scripts/webkitpy/tool/bot/feeders_unittest.py:
        * Scripts/webkitpy/tool/commands/queues_unittest.py:
        * Scripts/webkitpy/tool/steps/validatereviewer.py:
        (ValidateReviewer.run):

2013-07-31  Roger Fong  <roger_fong@apple.com>

        Unreviewed. Re-enable WinEWS tests following r153527.

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

2013-07-31  Bem Jones-Bey  <bjonesbe@adobe.com>

        Unreviewed: Adding myself to the committers' list.

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

2013-07-31  Allan Sandfeld Jensen  <allan.jensen@digia.com>

        [Qt] Build WebKit with C++11
        https://bugs.webkit.org/show_bug.cgi?id=119337

        Reviewed by Csaba Osztrogonác.

        Enable building with C++11.

        * qmake/mkspecs/features/default_pre.prf:
        * qmake/mkspecs/features/unix/default_post.prf:
        * qmake/mkspecs/features/unix/default_pre.prf:

2013-07-31  Allan Sandfeld Jensen  <allan.jensen@digia.com>

        [Qt] ASSERTS trigger in release builds
        https://bugs.webkit.org/show_bug.cgi?id=119336

        Reviewed by Jocelyn Turcotte.

        Ensure the qmake also defaults to release if no configuration is known.

        * qmake/mkspecs/features/default_post.prf:

2013-07-31  Zan Dobersek  <zdobersek@igalia.com>

        [texmap][GStreamer][GTK] composited video shows tearing
        https://bugs.webkit.org/show_bug.cgi?id=118253

        Reviewed by Martin Robinson.

        * gtk/jhbuild.modules: Bump the Jhbuild versions of the Gdk-Pixbuf and GTK+ packages to 2.27.3 and 3.8.2, respectively.
        The first is required by the second, and the GTK+ bump introduces proper display framerate synchronization that removes
        screen tearing when enabling accelerated compositing and performing graphically heavy operations like viewing HD videos.

2013-07-30  Ruth Fong  <ruth_fong@apple.com>

        Unreviewed: Adding myself to the committers' list.

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

2013-07-30  Christophe Dumez  <ch.dumez@sisa.samsung.com>

        Unreviewed, add my new email to contributors.json.

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

2013-07-30  Krzysztof Czech  <k.czech@samsung.com>

        [EFL] REGRESSION after r153439: layout tests do not run.
        https://bugs.webkit.org/show_bug.cgi?id=119240

        Reviewed by Christophe Dumez.

        Changed attribute name from check_xvfb to check_driver.

        * Scripts/webkitpy/port/efl.py:
        (EflPort.check_sys_deps):

2013-07-29  Commit Queue  <commit-queue@webkit.org>

        Unreviewed, rolling out r152860.
        http://trac.webkit.org/changeset/152860
        https://bugs.webkit.org/show_bug.cgi?id=119227

        Disable WinEWS tests until tests stop crashing (Requested by
        rfong on #webkit).

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

2013-07-29  Zan Dobersek  <zdobersek@igalia.com>

        [GTK] Add WestonDriver, use it when appropriate
        https://bugs.webkit.org/show_bug.cgi?id=119100

        Reviewed by Dirk Pranke.

        Introduce the WestonDriver, a Driver-implementing class that sets up an instance of Weston, the Wayland compositor,
        and sets up an environment that enables the test runner to run inside it.

        The design very much mimics the XvfbDriver class. It is currently used by the GTK port when the WAYLAND_DISPLAY
        environment variable is set, that is when NRWT is being run under a Wayland display.

        * Scripts/webkitpy/port/base.py:
        (Port.to.setup_environ_for_server): Also copy the XDG_RUNTIME_DIR env from the original environment for Linux-using ports.
        * Scripts/webkitpy/port/gtk.py:
        (GtkPort):
        (GtkPort._driver_class): Make the method memoized - the display type is not going to change during the testing, so we
        should only check once for the presence of the WAYLAND_DISPLAY env and determine the proper driver class to use based on that.
        (GtkPort.check_sys_deps): Call the static check_driver method on the class as returned by the _driver_class method
        instead of hard-coding the XvfbDriver class in the check.
        * Scripts/webkitpy/port/westondriver.py: Added.
        (WestonDriver):
        (WestonDriver.check_driver): Similarly to XvfbDriver, this checks for existance of the weston executable.
        (WestonDriver.__init__): Again, like in XvfbDriver, we use a small delay between launching the Weston display and launching the driver.
        (WestonDriver._start): Sets up the driver-specific temporary directory, launches the Weston display, sets up the environment for the
        driver and then launches the driver in said environment, using the driver's Weston display.
        (WestonDriver.stop): Cleans up the Weston instance and the temporary directory.
        (WestonDriver._ensure_driver_tmpdir_subdirectory): A helper function that creates a subdirectory in the driver's temporary directory
        and returns the absolute path to it.
        * Scripts/webkitpy/port/xvfbdriver.py:
        (XvfbDriver.check_driver): Renamed from check_xvfb.
        (XvfbDriver._start): Access the FileSystem object through the Port's Host object, instead of the Port's private member.

2013-07-29  Mario Sanchez Prada  <mario.prada@samsung.com>

        [ATK] Implement attributesOfChildren() for AccessibilityUIElement
        https://bugs.webkit.org/show_bug.cgi?id=118967

        Reviewed by Gustavo Noronha Silva.

        Implemented AccessibilityUIElement::attributesOfChildren() both
        in DumpRenderTree and the WebKitTestRunner.

        * DumpRenderTree/atk/AccessibilityUIElementAtk.cpp:
        (AccessibilityUIElement::attributesOfChildren): Implemented.

        * WebKitTestRunner/InjectedBundle/atk/AccessibilityUIElementAtk.cpp:
        (WTR::AccessibilityUIElement::attributesOfChildren): Implemented.

2013-07-29  Mario Sanchez Prada  <mario.prada@samsung.com>

        [ATK] Implement allAttributes() for AccessibilityUIElement
        https://bugs.webkit.org/show_bug.cgi?id=118966

        Reviewed by Gustavo Noronha Silva.

        Implemented AccessibilityUIElement::allAttributes() both in
        DumpRenderTree and the WebKitTestRunner.

        * DumpRenderTree/atk/AccessibilityUIElementAtk.cpp:
        (getAtkAttributeSetAsString): Moved up in the file, and refactored
        to use StringBuilder and return a String instead of a gchar*.
        (roleToString): Changed not to return the "AXRole: " prefix, so
        we can use it as well from attributesOfElement().
        (attributesOfElement): New function to dump attributes for an object.
        (AccessibilityUIElement::allAttributes): Call attributesOfElement().
        (AccessibilityUIElement::role): Updated to prefix "AXRole: ".

        * WebKitTestRunner/InjectedBundle/atk/AccessibilityUIElementAtk.cpp:
        (getAtkAttributeSetAsString): Refactored to use StringBuilder and return
        a String instead of a gchar*.

        (WTF::roleToString): Changed not to return the "AXRole: " prefix,
        so we can use it as well from attributesOfElement().
        (WTF::attributesOfElement): New function to dump attributes for an object.
        (WTR::AccessibilityUIElement::allAttributes): Call attributesOfElement().
        (WTR::AccessibilityUIElement::role): Updated to prefix "AXRole: ".

2013-07-29  Daniel Bates  <dabates@apple.com>

        Add support infrastructure for iOS WebKit port
        https://bugs.webkit.org/show_bug.cgi?id=119168

        Reviewed by Ryosuke Niwa.

        Implement support infrastructure towards building iOS WebKit.

        * Scripts/webkitdirs.pm:
        (xcodeSDKPlatformName): Added.
        (determineConfigurationProductDir):
        (builtDylibPathForName):
        (willUseIOSDeviceSDKWhenBuilding): Added.
        (willUseIOSSimulatorSDKWhenBuilding): Added.
        (isIOSWebKit): Added.
        (copyInspectorFrontendFiles):

2013-07-29  Sergio Correia  <sergio.correia@openbossa.org>

        CoordinatedGraphics: Add API to get and set the active state of a WebView
        https://bugs.webkit.org/show_bug.cgi?id=119067

        Reviewed by Noam Rosenthal.

        Added API tests for WKViewIsActive and WKViewSetIsActive.

        * TestWebKitAPI/PlatformEfl.cmake:
        * TestWebKitAPI/Tests/WebKit2/CoordinatedGraphics/WKViewIsActiveSetIsActive.cpp: Added.
        (TestWebKitAPI::didFinishLoadForFrame):
        (TestWebKitAPI::webProcessCrashed):
        (TestWebKitAPI::webProcessRelaunched):
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/WebKit2/CoordinatedGraphics/WKViewIsActiveSetIsActive_Bundle.cpp:
        Bundle added to allow crashing the WebProcess and testing the active state of a view
        under such condition.
        (TestWebKitAPI::WKViewIsActiveSetIsActiveTest::WKViewIsActiveSetIsActiveTest):
        (TestWebKitAPI::WKViewIsActiveSetIsActiveTest::didReceiveMessage):

2013-07-29  Zan Dobersek  <zdobersek@igalia.com>

        [Automake] Remove references to non-existent *_CFLAGS and *_LIBS variables
        https://bugs.webkit.org/show_bug.cgi?id=119212

        Reviewed by Carlos Garcia Campos.

        * GNUmakefile.am: Remove references to GLOBALDEPS_(CFLAGS|LIBS) and CLUTTER_(CFLAGS|LIBS)
        variables that are not defined during the configuration process.
        * TestWebKitAPI/GNUmakefile.am: Ditto.
        * WebKitTestRunner/GNUmakefile.am: Ditto.

2013-07-28  Andy Estes  <aestes@apple.com>

        Include <stdio.h> to declare perror()
        https://bugs.webkit.org/show_bug.cgi?id=119198

        Reviewed by Andreas Kling.

        Silences an implicit declaration warning.

        * DumpRenderTree/mac/PerlSupport/DumpRenderTreeSupport.c:

2013-07-27  Ryuan Choi  <ryuan.choi@samsung.com>

        [EFL] Bump required version of EFL to 1.7
        https://bugs.webkit.org/show_bug.cgi?id=119144

        Reviewed by Christophe Dumez.

        * MiniBrowser/efl/CMakeLists.txt: Bumped EFL to 1.7

2013-07-26  Filip Pizlo  <fpizlo@apple.com>

        WKTR should know about the JSC extensions to testRunner
        https://bugs.webkit.org/show_bug.cgi?id=119154

        Reviewed by Mark Hahnenberg and Geoffrey Garen.
        
        This makes some fast/js tests pass.

        * WebKitTestRunner/InjectedBundle/Bindings/TestRunner.idl:
        * WebKitTestRunner/InjectedBundle/TestRunner.cpp:
        (WTR::TestRunner::numberOfDFGCompiles):
        (WTR::TestRunner::neverInlineFunction):
        * WebKitTestRunner/InjectedBundle/TestRunner.h:

2013-07-25  Mark Rowe  <mrowe@apple.com>

        Fix build of DumpRenderTree and WebKitTestRunner when building against an SDK.

        * DumpRenderTree/mac/Configurations/Base.xcconfig: Fix framework search path when building against an SDK.
        * WebKitTestRunner/Configurations/Base.xcconfig: Ditto. Also fix where our scripts look for WebCore.framework
        so they pull the version out of the SDK.

2013-07-25  Anders Carlsson  <andersca@apple.com>

        Localizable.strings generated by extract-localizable-strings should be UTF-8
        https://bugs.webkit.org/show_bug.cgi?id=119106

        Reviewed by Mark Rowe.

        Output strings as UTF-8.

        * Scripts/extract-localizable-strings:

2013-07-25  Sam Weinig  <sam@webkit.org>

        -[WebHTMLView attributedSubstringForProposedRange:actualRange:] does not include strikethrough attribute in the returned attributed string
        https://bugs.webkit.org/show_bug.cgi?id=119099
        <rdar://problem/13439291>

        Reviewed by Enrica Casucci.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/mac/AttributedString.mm:
        (TestWebKitAPI::attributedString):
        (TestWebKitAPI::AttributedStringTest_CustomFont::didLoadURL):
        (TestWebKitAPI::AttributedStringTest_CustomFont::url):
        (TestWebKitAPI::AttributedStringTest_CustomFont::runTest):
        (TestWebKitAPI::TEST_F):
        (TestWebKitAPI::AttributedStringTest_Strikethrough::didLoadURL):
        (TestWebKitAPI::AttributedStringTest_Strikethrough::url):
        (TestWebKitAPI::AttributedStringTest_Strikethrough::runTest):
        * TestWebKitAPI/Tests/mac/attributedStringStrikethrough.html: Added.
        Add tests for attributed strings with strikethrough.  Refactor the attributed string tests
        to make adding more easier in the future.

2013-07-20  Filip Pizlo  <fpizlo@apple.com>

        fourthTier: FTL should be able to generate LLVM IR that uses an intrinsic for OSR exit
        https://bugs.webkit.org/show_bug.cgi?id=118948

        Reviewed by Sam Weinig.
        
        - Make ReducedFTL capable of dealing with code that uses the fake OSR exit intrinsic,
          by exporting it as a function.
        
        - Make combineModules.rb idempotent. Sometimes it's convenient to run a file through
          it even if you know that you've already done so. See processIRDump.sh.
        
        - Add a script, processIRDump.sh, that takes the output of --dumpLLVMIR=true and
          runs it through ReducedFTL automatically. You typically want to say something like:
          
          jsc --dumpLLVMIR=true <program(s)> > jsc-output.txt
          ./processIRDump.sh --timing < jsc-output.txt

        * ReducedFTL/ReducedFTL.c:
        (webkit_osr_exit):
        * ReducedFTL/combineModules.rb:
        * ReducedFTL/processIRDump.sh: Added.

2013-07-20  Filip Pizlo  <fpizlo@apple.com>

        fourthTier: We should use the no-asserts build of LLVM if that's what the user configured
        https://bugs.webkit.org/show_bug.cgi?id=118947

        Reviewed by Dan Bernstein.

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

2013-07-16  Filip Pizlo  <fpizlo@apple.com>

        fourthTier: We should have a reduced FTL LLVM pipeline tool in the repository
        https://bugs.webkit.org/show_bug.cgi?id=118647

        Rubber stamped by Geoffrey Garen and Mark Hahnenberg.

        Add a tool that takes in an LLVM bitcode file and JITs it in exactly the same
        way that the FTL would.
        
        Also add a tool that combines multiple LLVM modules generated by FTL into a
        single module.

        * ReducedFTL: Added.
        * ReducedFTL/ReducedFTL.c: Added.
        (usage):
        (currentTime):
        (MemorySection):
        (mmAllocateCodeSection):
        (mmAllocateDataSection):
        (mmApplyPermissions):
        (mmDestroy):
        (symbolLookupCallback):
        (main):
        * ReducedFTL/build.sh: Added.
        * ReducedFTL/combineModules.rb: Added.

2013-06-09  Filip Pizlo  <fpizlo@apple.com>

        Unreviewed, fix minor goof in profiling output layout. We weren't accounting
        for the "/" that is printed between engine counts.

        * Scripts/display-profiler-output:

2013-05-28  Filip Pizlo  <fpizlo@apple.com>

        testRunner should have a way of disabling inlining of functions
        https://bugs.webkit.org/show_bug.cgi?id=116875

        Reviewed by Mark Hahnenberg.

        * DumpRenderTree/TestRunner.cpp:
        (neverInlineFunction):
        (TestRunner::staticFunctions):

2013-05-27  Filip Pizlo  <fpizlo@apple.com>

        testRunner should be able to tell you if a function is DFG compiled
        https://bugs.webkit.org/show_bug.cgi?id=116847

        Reviewed by Mark Hahnenberg.

        * DumpRenderTree/TestRunner.cpp:
        (numberOfDFGCompiles):
        (TestRunner::staticFunctions):

2013-05-21  Filip Pizlo  <fpizlo@apple.com>

        fourthTier: display-profiler-output should make it even easier to diff the compilation story between two different runs
        https://bugs.webkit.org/show_bug.cgi?id=116556

        Reviewed by Oliver Hunt.
        
        This adds three new capabilities:
        
        - 'display' now accepts negative compilation indices, and allows specifying
          wildcard hashes combined with combination indices. Previously you could say
          'display <hash>', 'display <hash>-<index>-<engine>', or 'display *'. The
          latter would display every compilation. This improves this so that you can
          say 'display *-<index>-<engine>'. It also makes it so that you can give a
          negative index, which allows you to say things like 'display blah--1-dfg',
          which displays just the last DFG compilation. Also you can say
          'display *--1-dfg', which displays the last DFG compilation for each code
          block. I realize that this is kind of ugly, but gosh is it practical.
        
        - You can now say 'sort hash', which will henceforth sort all of the output
          by code hash rather than by the time when it was compiled. This means that
          if you're doing 'dispay *--1-dfg' and then want to diff the results against
          something else, you can ensure that this doesn't get confused just by
          changes in compilation order.
        
        - You can now say 'counts off', which will henceforth disable the display of
          execution counts from 'bytecode' and 'display'. This is also useful for
          diffs, since if you're trying to figure out why two compilations are
          different, they probably have radically different counts. 'counts off' gets
          this out of the output so that it doesn't confuse your diff.
        
        Note that to use this effectively you should also have a script that scrubs
        pointers from text so that the diff doesn't get confused by pointers. I'll
        post my elimptr script to the bug. Maybe at some point I'll integrate that
        into display-profiler-output.
        
        Put together this is pretty awesome. I was able to do the following:
        
        (echo "counts off" && echo "sort hash" && echo "d *--1-dfg") | Tools/Scripts/display-profiler-output richards-serial.profile | elimptr > richards-serial.asm
        (echo "counts off" && echo "sort hash" && echo "d *--1-dfg") | Tools/Scripts/display-profiler-output richards-concurrent.profile | elimptr > richards-concurrent.asm
        diff -u richards-serial.asm richards-concurrent.asm
        
        And this immediately told me that the reason why richards is slower in the
        concurrent compilation case is just that we end up compiling *tons* more
        functions, most of which are trivially inlineable. Basically, concurrent
        compilation breaks our previous heuristics for delaying compilation of
        inlineables just enough that they never trigger compilation. We should fix
        that in a separate bug.

        * Scripts/display-profiler-output:

2013-04-30  Filip Pizlo  <fpizlo@apple.com>

        fourthTier: Use hw.availcpu instead of hw.ncpu, and configure LLVM with --enable-zlib=no

        Rubber stamped by Mark Rowe.

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

2013-07-16  Oliver Hunt <oliver@apple.com>

        Merge dfgFourthTier r148853

    2013-04-21  Filip Pizlo  <fpizlo@apple.com>

        fourthTier: tandem WebKit and LLVM builds should ./configure LLVM if needed
        https://bugs.webkit.org/show_bug.cgi?id=114933

        Reviewed by Andy Estes.
        
        This makes it easy to get set up for tandem LLVM builds.

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

2013-07-16  Oliver Hunt <oliver@apple.com>

        Merge dfgFourthTier r148850

    2013-04-21  Filip Pizlo  <fpizlo@apple.com>

        fourthTier: WebKit's build system should relink JavaScriptCore if LLVM's libraries changed but its headers didn't
        https://bugs.webkit.org/show_bug.cgi?id=114926

        Reviewed by Geoffrey Garen.
        
        If the LLVM libraries change, then touch a phony header, which will force relink
        of JavaScriptCore.

        * Scripts/copy-webkitlibraries-to-product-directory:
        (unpackIfNecessary):

2013-07-16  Oliver Hunt <oliver@apple.com>

        Merge dfgFourthTier r148848

    2013-04-21  Filip Pizlo  <fpizlo@apple.com>

        fourthTier: developing LLVM in tandem with WebKit should be fun and easy
        https://bugs.webkit.org/show_bug.cgi?id=114925

        Reviewed by Geoffrey Garen.
        
        This enables building LLVM along with WebKit, so that build-jsc and build-webkit
        will also optionally build LLVM and quickly symlink LLVM's built products into
        the right places.
        
        Most WebKit and JSC hackers will want to rely on the checked-in already-built
        versions of LLVM in WebKitLibraries. But developing both systems in tandem is an
        increasingly common use-case for me, and it may become a common use case for a
        handful of others. Currently, this is really painful: you first have to build
        LLVM, then you have to export-llvm-build (which takes a while), and then you
        have to make sure that your LLVM_LIBRARY_PACKAGE and LLVM_INCLUDE_PACKAGE
        variables are set to point to the thing you exported. The whole process loses
        track of dependencies very quickly: making a tiny change in LLVM requires
        packaging, and then unpackaging, a large number of potentially large headers and
        static libraries. Not only is this slow but it then causes the WebKit build
        system to rebuild anything that transitively includes any LLVM header, which is
        now quite a few files. While this sort of use pattern is still worthwhile if
        you're trying to package a binary drop and test it, it's not great if you're
        just trying to do experimental development that involves making small changes
        in both trees.
        
        This change fixes this use case while keeping the old use cases intact. You can
        do tandem development using one of two modes:
        
        Your own LLVM directory: just set LLVM_SOURCE_PATH to the *absolute* path of
        the LLVM directory you're using. Once this is done, any invocation of a WebKit
        build via build-jsc or build-webkit will also build LLVM, and then quickly
        symlink things into place without perturbing dependency tracking.
        
        Internal LLVM directory: if you check out llvm into a directory called 'llvm'
        right off of the WebKit source tree, then the build system will automatically
        use this.
        
        Here's how this takes care of dependencies:
        
        Headers: the include/llvm and include/llvm-c directories are symlinked into
        $productsDir/usr/local/include. And then everything just works.
        
        Libraries: the build system detects, by reading LLVM's Makefile.config, which
        mode LLVM is built in (like Release+Asserts or Debug+Asserts) and symlinks
        the .a files into $productsDir/<thingy>. It will ranlib those libraries only
        if they have changed, by checking both the modification time and also whether
        the last time we had a symlink, that symlink was from the same directory.
        This helps if you switch to an *older* LLVM build (using LLVM_SOURCE_PATH)
        but that build wasn't yet ranlib'd.
        
        One problem that this does not yet solve is that xcodebuild will not relink
        JavaScriptCore if the only thing that changed was the libraries. I will work
        on this problem separately: https://bugs.webkit.org/show_bug.cgi?id=114926.

        * Scripts/copy-webkitlibraries-to-product-directory:
        (unpackIfNecessary):
        (fileContains):
        (fileContentsEquals):

2013-04-15  Filip Pizlo  <fpizlo@apple.com>

        fourthTier: Update LLVM-related build scripts to copy generated headers as well
        https://bugs.webkit.org/show_bug.cgi?id=114551

        Reviewed by Oliver Hunt.
        
        Also added the ability to use something other than bzip2 compression, since although
        it is great for checking things into the tree, it increases turn-around times when
        experimenting.

        * Scripts/copy-webkitlibraries-to-product-directory:
        (unpackIfNecessary):
        * Scripts/export-llvm-build:

2013-04-03  Filip Pizlo  <fpizlo@apple.com>

        fourthTier: Include LLVM headers with surrounding #pragmas instead of using my #define
        https://bugs.webkit.org/show_bug.cgi?id=113921

        Reviewed by Oliver Hunt.

        The LLVM community wants us to continue including all of LLVM's C++ headers. Change
        the export script to do this.
        
        * Scripts/export-llvm-build:

2013-03-29  Filip Pizlo  <fpizlo@apple.com>

        fourthTier: Check in a known-good build of LLVM into WebKitLibraries, and have a story for updating it
        https://bugs.webkit.org/show_bug.cgi?id=113452

        Rubber stamped by Mark Hahnenberg.

        * Scripts/copy-webkitlibraries-to-product-directory:
        * Scripts/export-llvm-build:

2013-03-29  Filip Pizlo  <fpizlo@apple.com>

        fourthTier: FTL JIT should be able run some simple function
        https://bugs.webkit.org/show_bug.cgi?id=113481

        Reviewed by Geoffrey Garen.
        
        Give the scripts the ability to find an LLVM build and use it.
        
        Also added a script, export-llvm-build, that allows you to take your
        own build of LLVM and package it for use by WebKit's build system.
        
        The build system treats a "build" of LLVM as a pair of .tar.bz2's,
        one for the library archives and one for the headers. It then unpacks
        them into your built products directory in a mannner that is mostly
        analogous to how WebKitSystemInterface works.

        * Scripts/build-jsc:
        * Scripts/copy-webkitlibraries-to-product-directory:
        (unpackIfNecessary):
        (dittoHeaders):
        * Scripts/export-llvm-build: Added.

2013-07-24  Anders Carlsson  <andersca@apple.com>

        Crash when calling WKPageGetProcessIdentifier after aborted process launch
        https://bugs.webkit.org/show_bug.cgi?id=119069
        <rdar://problem/14494064>

        Reviewed by Andreas Kling.

        Add a test.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WebKit2/mac/GetPIDAfterAbortedProcessLaunch.cpp: Added.
        (TestWebKitAPI::didFinishLoadForFrame):
        (TestWebKitAPI::TEST):

2013-07-24  Zan Dobersek  <zdobersek@igalia.com>

        Make KURL::hasPath private
        https://bugs.webkit.org/show_bug.cgi?id=118279

        Reviewed by Darin Adler.

        * TestWebKitAPI/Tests/WebCore/KURL.cpp:
        (TestWebKitAPI::TEST_F): Remove references to KURL::hasPath the method is now private and thus not accessible for testing.

2013-07-24  Anton Obzhirov  <a.obzhirov@samsung.com>

        [GTK] TestInspectorServer unit test is timing out
        https://bugs.webkit.org/show_bug.cgi?id=105866

        Reviewed by Gustavo Noronha Silva.

        * Scripts/run-gtk-tests:
        (TestRunner):

2013-07-24  Anton Obzhirov  <a.obzhirov@samsung.com>

        [GTK] [WK2] Handle wheel event with delta zero
        https://bugs.webkit.org/show_bug.cgi?id=118973

        Reviewed by Gustavo Noronha Silva.

        Added handling of zero mouse scroll deltas in EventSenderProxy similar
        to WK1 and Qt/EFL ports.

        fast/events/platform-wheelevent-with-delta-zero-crash.html is no longer
        failing on WK2.

        * WebKitTestRunner/gtk/EventSenderProxyGtk.cpp:
        (WTR::EventSenderProxy::mouseScrollBy):

2013-07-23  Andreas Kling  <akling@apple.com>

        REGRESSION(r150867): FrameView auto-sizing + delegate denied image load may cause StyleResolver to re-enter itself.
        <rdar://problem/14324895>
        <http://webkit.org/b/119023>

        Reviewed by Simon Fraser.

        Add a test for this rather specific problem.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WebKit2ObjC/PreventImageLoadWithAutoResizing.mm: Added.
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/WebKit2ObjC/PreventImageLoadWithAutoResizing_Bundle.cpp: Added.
        (TestWebKitAPI::DenyWillSendRequestTest::DenyWillSendRequestTest):
        (TestWebKitAPI::DenyWillSendRequestTest::willSendRequestForFrame):
        (TestWebKitAPI::DenyWillSendRequestTest::didCreatePage):

2013-07-23  Tim Horton  <timothy_horton@apple.com>

        Add a test for plug-in unavailability indicator obscurity detection
        https://bugs.webkit.org/show_bug.cgi?id=119007

        Reviewed by Anders Carlsson.

        Expose the ability to block plug-ins via pluginLoadPolicy to testRunner.

        * WebKitTestRunner/InjectedBundle/Bindings/TestRunner.idl:
        * WebKitTestRunner/InjectedBundle/TestRunner.cpp:
        (WTR::TestRunner::setBlockAllPlugins):
        * WebKitTestRunner/InjectedBundle/TestRunner.h:
        * WebKitTestRunner/TestInvocation.cpp:
        (WTR::TestInvocation::didReceiveMessageFromInjectedBundle):
        Add testRunner.setBlockAllPlugins function (and corresponding message to
        forward it through to TestController).

        * WebKitTestRunner/TestController.cpp:
        Initialize m_shouldBlockAllPlugins to false (and drive-by initialize m_handlesAuthenticationChallenges).

        (WTR::TestController::createWebViewWithOptions):
        Register our pluginLoadPolicy callback.

        (WTR::TestController::resetStateToConsistentValues):
        Reset m_shouldBlockAllPlugins to false.

        (WTR::TestController::pluginLoadPolicy):
        Return the existing plugin load policy, unless setBlockAllPlugins(true)
        was called, in which case we reject all plugins with kWKPluginLoadPolicyBlocked.

        * WebKitTestRunner/TestController.h:
        (WTR::TestController::setBlockAllPlugins):

2013-07-21  Andreas Kling  <akling@apple.com>

        KURL creates duplicate strings when completing data: URIs.
        <http://webkit.org/b/118952>
        <rdar://problem/14504480>

        Reviewed by Anders Carlsson.

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

2013-07-19  Chris Fleizach  <cfleizach@apple.com>

        AX: VoiceOver not detecting misspelled words don't work in all cases
        https://bugs.webkit.org/show_bug.cgi?id=118924

        Reviewed by Tim Horton.

        Make the misspelled detection dependent on both types of attributes being present.

        * DumpRenderTree/mac/AccessibilityUIElementMac.mm:
        (AccessibilityUIElement::attributedStringRangeIsMisspelled):
        * WebKitTestRunner/InjectedBundle/mac/AccessibilityUIElementMac.mm:
        (WTR::AccessibilityUIElement::attributedStringRangeIsMisspelled):

2013-07-19  Alex Christensen  <achristensen@apple.com>

        Improved code coverage generation.
        https://bugs.webkit.org/show_bug.cgi?id=118926

        Reviewed by Tim Horton.

        * Scripts/build-webkit: Removed exception preventing ANGLE code coverage support.
        * Scripts/generate-coverage-data: Added --no-build to run-javascriptcore-tests call.
        (generateReport): Moved report generation to a subroutine.

2013-07-19  Stephanie Lewis  <slewis@apple.com>

        <rdar://problem/14499595> pagination wk2 api test failing on ML (118928)

        Unreviewed.

        Rebaseline pagination test after http://trac.webkit.org/changeset/152911

        * TestWebKitAPI/Tests/WebKit2/ResizeReversePaginatedWebView.cpp:
        (TestWebKitAPI::didLayout):

2013-07-19  Daniel Bates  <dabates@apple.com>

        Make Perl tools work when using git bisect with Git branch build setup
        https://bugs.webkit.org/show_bug.cgi?id=118512

        Reviewed by Martin Robinson.

        The various Perl tools (run-webkit-app, {debug, run}-safari, et cetera) don't work
        during a git bisect session with a Git branch build setup (i.e. git config
        core.webKitBranchBuild true). Specifically, the tools cannot find the branch-
        specific build of WebKit because they cannot determine the branch Git is on (since
        git bisect puts Git into a detached HEAD state). We should teach our tooling to
        parse the file .git/BISECT_START (created by git bisect start) for the name of the
        branch Git was on when we began a git bisect session. Then the tools can determine
        the path to the built WebKit.

        * Scripts/VCSUtils.pm:
        (gitDirectory): Added.
        (gitBisectStartBranch): Added.
        (gitBranch): Modified to call gitBisectStartBranch() when we have a detached
        HEAD (e.g. running git bisect).
        (determineVCSRoot): Modified to call gitDirectory() to determine the path to
        the .git directory in the Git checkout.

2013-07-19  Alex Christensen  <achristensen@apple.com>

        Added x64 configuration to Visual Studio build.
        https://bugs.webkit.org/show_bug.cgi?id=118888

        Reviewed by Brent Fulgham.

        * DumpRenderTree/DumpRenderTree.vcxproj/DumpRenderTree/DumpRenderTree.vcxproj:
        * DumpRenderTree/DumpRenderTree.vcxproj/DumpRenderTree/DumpRenderTree.vcxproj.filters:
        * DumpRenderTree/DumpRenderTree.vcxproj/DumpRenderTree/DumpRenderTreeLauncher.vcxproj:
        * DumpRenderTree/DumpRenderTree.vcxproj/ImageDiff/ImageDiff.vcxproj:
        * DumpRenderTree/DumpRenderTree.vcxproj/ImageDiff/ImageDiffLauncher.vcxproj:
        * DumpRenderTree/DumpRenderTree.vcxproj/TestNetscapePlugin/TestNetscapePlugin.vcxproj:
        * TestWebKitAPI/TestWebKitAPI.vcxproj/TestWebKitAPI.vcxproj:
        * WinLauncher/WinLauncher.vcxproj/WinLauncher.vcxproj:
        * WinLauncher/WinLauncher.vcxproj/WinLauncherLib.vcxproj:
        * win/AssembleBuildLogs/AssembleBuildLogs.vcxproj:
        * win/record-memory/record-memory.vcxproj:

2013-07-19  Martin Robinson  <mrobinson@igalia.com>

        Add a couple people to the MathML watchlist
        https://bugs.webkit.org/show_bug.cgi?id=118909

        Reviewed by Andreas Kling.

        Add a couple people to the MathML watchlist and add Kalyan's other
        email address to fix style checker warnings about the watchlist
        contents.

        * Scripts/webkitpy/common/config/contributors.json: Add Frédéric to the
        list of contributors and add Kalyan's second email address.
        * Scripts/webkitpy/common/config/watchlist: Add myself and Frédéric to the MathML
        watchlist.

2013-07-19  Simon Pena  <simon.pena@samsung.com>

        [GTK] Fix regression in DumpRenderTree introduced in r152782 by checking if uri is valid
        https://bugs.webkit.org/show_bug.cgi?id=118895

        Reviewed by Philippe Normand.

        In r152782 an uri is used to create an string representation without checking first if it
        is valid. That fails later when the string is used to check for existing redirections. This
        patch ensures that the uri is valid before using it.

        * DumpRenderTree/gtk/DumpRenderTree.cpp:
        (willSendRequestCallback): Ensure an uri is valid before using it.

2013-07-18  Timothy Hatcher  <timothy@apple.com>

        Add extract-localizable-js-strings and use it for WebInspectorUI.

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

        Reviewed by Joseph Pecoraro.

        * Scripts/extract-localizable-js-strings: Added.
        * Scripts/extract-localizable-strings: Drive-by-fix: disable deprecated warnings about "goto".
        * Scripts/update-webkit-localizable-strings: Use extract-localizable-js-strings for
        the WebInspectorUI project.

2013-07-18  Brent Fulgham  <bfulgham@apple.com>

        [Windows] Build correction #2 after r152861.

        * WinLauncher/WinLauncher.cpp: Declare proper linkage.

2013-07-18  Brent Fulgham  <bfulgham@apple.com>

        [Windows] Build correction after r152861.

        * WinLauncher/WinLauncher.cpp: Don't reference private header.

2013-07-16  Brent Fulgham  <bfulgham@apple.com>

        [Win] Support in-band text tracks.
        https://bugs.webkit.org/show_bug.cgi?id=103770

        Reviewed by Eric Carlson.

        Update WinLauncher to run in a CFRunLoop (rather than a hand-written Windows event loop) so that
        libdispatch and CFRunLoop elements are services during the run loop.

        * WinLauncher/WinLauncher.cpp:
        (dllLauncherEntryPoint): Use CFRunLoopRun (rather than a Windows message loop) if running with
        a CoreFoundation (or CFLite) support library.
        * WinLauncher/WinLauncher.vcxproj/WinLauncherCF.props: Added.
        * WinLauncher/WinLauncher.vcxproj/WinLauncherCFLite.props: Added.
        * WinLauncher/WinLauncher.vcxproj/WinLauncherLib.vcxproj: Add references to WinLauncherCF.props
        and WinLauncherCFLite.props.

2013-07-18  Roger Fong  <roger_fong@apple.com>

        Unreviewed. Test enabling WinEWS tests now that queue is at a good state and NRWT with multiple processes is enabled.

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

2013-07-18  Daniel Bates  <dabates@apple.com>

        REGRESSION (r132678): Tests that use SSL or port 8080 time out when run using old-run-webkit-tests
        https://bugs.webkit.org/show_bug.cgi?id=118854
        <rdar://problem/14081339>

        Reviewed by David Kilzer.

        Following <http://trac.webkit.org/changeset/132678> (https://bugs.webkit.org/show_bug.cgi?id=98602)
        Apache no longer listens to ports 8443 (SSL) and 8080. So, tests that use these ports time out when
        run using old-run-webkit-tests. We need to update old-run-webkit-tests to explicitly tell Apache to
        listen on these ports so that we can run tests that use port 8443 and 8080.

        * Scripts/old-run-webkit-tests:
        (configureAndOpenHTTPDIfNeeded):

2013-07-17  Tim Horton  <timothy_horton@apple.com>

        Update blocked/missing plug-in UI
        https://bugs.webkit.org/show_bug.cgi?id=118347
        <rdar://problem/14209318>

        Reviewed by Sam Weinig.

        * MiniBrowser/mac/WK2BrowserWindowController.m:
        (-[WK2BrowserWindowController awakeFromNib]):
        * WebKitTestRunner/TestController.cpp:
        (WTR::TestController::createWebViewWithOptions):
        Match new WKPageLoaderClient entry.

2013-07-17  Commit Queue  <commit-queue@webkit.org>

        Unreviewed, rolling out r152701, r152703, r152739, r152754,
        and r152756.
        http://trac.webkit.org/changeset/152701
        http://trac.webkit.org/changeset/152703
        http://trac.webkit.org/changeset/152739
        http://trac.webkit.org/changeset/152754
        http://trac.webkit.org/changeset/152756
        https://bugs.webkit.org/show_bug.cgi?id=118821

        this was a buggy fix and we're going to try something
        different (Requested by thorton on #webkit).

        * MiniBrowser/mac/WK2BrowserWindowController.m:
        (-[WK2BrowserWindowController awakeFromNib]):
        * WebKitTestRunner/TestController.cpp:
        (WTR::TestController::createWebViewWithOptions):

2013-07-17  Commit Queue  <commit-queue@webkit.org>

        Unreviewed, rolling out r151535.
        http://trac.webkit.org/changeset/151535
        https://bugs.webkit.org/show_bug.cgi?id=118804

        Re-disable WinEWS tests (Requested by rfong on #webkit).

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

2013-07-17  Simon Pena  <simon.pena@samsung.com>

        [GTK] Make DRT obbey testRunner's addURLToRedirect
        https://bugs.webkit.org/show_bug.cgi?id=118239

        Reviewed by Gustavo Noronha Silva.

        Support testRunner's addURLToRedirect in GTK's DRT, so it redirects
        to the proper URI when indicated.

        * DumpRenderTree/gtk/DumpRenderTree.cpp:
        (willSendRequestCallback):

2013-07-17  Gabor Abraham  <abrhm@inf.u-szeged.hu>

        Add a new find-resolved-bugs command to webkit-patch.
        https://bugs.webkit.org/show_bug.cgi?id=118060

        Reviewed by Csaba Osztrogonác.

        * Scripts/webkitpy/tool/commands/queries.py:
        (PrintBaselines._platform_for_path):
        (FindResolvedBugs):
        (FindResolvedBugs.execute):

2013-07-16  Balazs Kelemen  <kbalazs@webkit.org>

        [CMake] Undefined references should be detected at build time
        https://bugs.webkit.org/show_bug.cgi?id=110236

        Reviewed by Christophe Dumez.

        Add library dependencies that were not defined explicitly before.

        * DumpRenderTree/TestNetscapePlugIn/CMakeLists.txt:
        * TestWebKitAPI/CMakeLists.txt:
        * WebKitTestRunner/CMakeLists.txt:

2013-07-16  Kwang Yul Seo  <skyul@company100.net>

        check-webkit-style: "using namespace foo;" should be flagged as an error only in headers
        https://bugs.webkit.org/show_bug.cgi?id=118755

        Reviewed by Ryosuke Niwa.

        Fix r152719 to check "using namespace foo;" only in headers.

        * Scripts/webkitpy/style/checkers/cpp.py:
        (check_using_namespace):
        (check_style):
        * Scripts/webkitpy/style/checkers/cpp_unittest.py:
        (WebKitStyleTest.test_using_namespace):

2013-07-16  Christophe Dumez  <ch.dumez@sisa.samsung.com>

        Get rid of multiple inheritance support from the bindings generators
        https://bugs.webkit.org/show_bug.cgi?id=118353

        Reviewed by Kentaro Hara.

        Update CodeGeneratorTestRunner.pm to use domInterface->parent instead of
        deprecated domInterface->parents.

        * WebKitTestRunner/InjectedBundle/Bindings/CodeGeneratorTestRunner.pm:
        (_parentInterface):

2013-07-16  Brian Holt  <brian.holt@samsung.com>

        check-webkit-style: "using namespace foo;" should be flagged as an error in headers
        https://bugs.webkit.org/show_bug.cgi?id=57241

        Reviewed by Ryosuke Niwa.

        Added check for "using namespace foo" and unit test.

        * Scripts/webkitpy/style/checkers/cpp.py:
        (check_using_namespace):
        (check_style):
        (CppChecker):
        * Scripts/webkitpy/style/checkers/cpp_unittest.py:
        (WebKitStyleTest.test_using_namespace):

2013-07-16  Anton Obzhirov  <a.obzhirov@samsung.com>

        [GTK] fast/events/platform-wheelevent-with-delta-zero-crash.html is crashing
        https://bugs.webkit.org/show_bug.cgi?id=110222

        Reviewed by Gustavo Noronha Silva.

        Added handling of zero mouse scroll deltas in EventSender.

        * DumpRenderTree/gtk/EventSender.cpp:
        (mouseScrollByCallback):

2013-07-16  Brian Holt  <brian.holt@samsung.com>

        webkitpy: replace urllib with urllib2 for downloading additional modules
        https://bugs.webkit.org/show_bug.cgi?id=118671

        Reviewed by Ryosuke Niwa.

        Urllib2 is available whereever urllib is, but has better proxy support.

        * Scripts/webkitpy/common/system/autoinstall.py:
        (AutoInstaller._download_to_stream):

2013-07-16  Krzysztof Czech  <k.czech@samsung.com>

        [ATK] Adds support for aria-haspopup property.
        https://bugs.webkit.org/show_bug.cgi?id=117834

        Reviewed by Christophe Dumez.

        Adds implementation for testing aria-haspopup property.

        * DumpRenderTree/atk/AccessibilityUIElementAtk.cpp:
        (getAttributeSetValueForId):
        (AccessibilityUIElement::stringAttributeValue):
        (AccessibilityUIElement::hasPopup):
        * WebKitTestRunner/InjectedBundle/atk/AccessibilityUIElementAtk.cpp:
        (WTR::getAttributeSetValueForId):
        (WTR::AccessibilityUIElement::stringAttributeValue):
        (WTR::AccessibilityUIElement::hasPopup):

2013-07-16  Michael Brüning  <michael.bruning@digia.com>

        [Qt] Replace Nokia references.
        https://bugs.webkit.org/show_bug.cgi?id=118728

        Reviewed by Simon Hausmann.

        * MiniBrowser/qt/MiniBrowserApplication.cpp:
        (MiniBrowserApplication::MiniBrowserApplication):
        * QtTestBrowser/qttestbrowser.cpp:
        (LauncherApplication::LauncherApplication):

2013-07-15  Tim Horton  <timothy_horton@apple.com>

        Update blocked/missing plug-in UI
        https://bugs.webkit.org/show_bug.cgi?id=118347
        <rdar://problem/14209318>

        Reviewed by Sam Weinig.

        * MiniBrowser/mac/WK2BrowserWindowController.m:
        (-[WK2BrowserWindowController awakeFromNib]):
        * WebKitTestRunner/TestController.cpp:
        (WTR::TestController::createWebViewWithOptions):
        Match new WKPageLoaderClient entry.

2013-07-15  Chris Fleizach  <cfleizach@apple.com>

        Update James Craig's email address.

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

2013-07-15  Dong-Gwan Kim  <donggwan.kim@samsung.com>

        [EFL] Add fallback for TestWebKitAPI if opengl is not available.
        https://bugs.webkit.org/show_bug.cgi?id=118583

        Reviewed by Christophe Dumez.

        There're many fails on efl webkit2 API test if opengl is not available.
        So, add fallback to non-opengl evas engine.

        * TestWebKitAPI/efl/PlatformWebView.cpp:
        (TestWebKitAPI::initEcoreEvas):

2013-07-15  Brian Holt  <brian.holt@samsung.com>

        check-webkit-style: Ignore false positive: Instance of 'Popen' has no 'pid' member
        https://bugs.webkit.org/show_bug.cgi?id=118592

        Reviewed by Martin Robinson.

        Added a suppression for pylint false positives and a unit test.

        * Scripts/webkitpy/style/checkers/python.py:
        (Pylinter):
        * Scripts/webkitpy/style/checkers/python_unittest.py:
        (PythonCheckerTest.test_check):
        (PythonCheckerTest):
        (PythonCheckerTest.test_pylint_false_positives):
        (PythonCheckerTest.test_pylint_false_positives._mock_handle_style_error):
        * Scripts/webkitpy/style/checkers/python_unittest_falsepositives.py: Added.
        (test_popen):

2013-07-15  Xabier Rodriguez Calvar  <calvaris@igalia.com>

        [GTK] Increase the JHBuild version of GStreamer to 1.0.7
        https://bugs.webkit.org/show_bug.cgi?id=115166

        Reviewed by Philippe Normand.

        * gtk/jhbuild.modules: Bumping GStreamer version up to 1.0.8.

2013-07-12  Kwang Yul Seo  <skyul@company100.net>

        Unreviewed. Add an email address and update my domain of experts.

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

2013-07-12  Emanuele Aina  <emanuele.aina@collabora.com>

        [jhbuild] Avoid restarting from scratch failed initial checkouts
        https://bugs.webkit.org/show_bug.cgi?id=118603

        Reviewed by Martin Robinson.

        If the initial checkout is interrupted midway (eg. because the internet
        connection went down) config files do not get generated and that causes
        the next checkout to start from scratch (the missing files cause the
        script to delete the build root and the downloaded sources).

        By generating the files before invoking jhbuild, subsequent runs are able
        to start where the previous run left.

        * Scripts/update-webkit-libs-jhbuild:
        (saveJhbuildMd5): invoke it before runJhbuild().

2013-07-12  Brent Fulgham  <bfulgham@apple.com>

        [Windows] Remove single-worker restriction on tests.

        * Scripts/webkitpy/port/win.py: Remove restriction of one worker.

2013-07-12  Commit Queue  <commit-queue@webkit.org>

        Unreviewed, rolling out r152599.
        http://trac.webkit.org/changeset/152599
        https://bugs.webkit.org/show_bug.cgi?id=118612

        This patch includes a failing unit test (Requested by
        mrobinson on #webkit).

        * Scripts/webkitpy/style/checkers/python.py:
        (Pylinter):
        * Scripts/webkitpy/style/checkers/python_unittest.py:
        (PythonCheckerTest.test_check):
        * Scripts/webkitpy/style/checkers/python_unittest_falsepositives.py: Removed.

2013-07-12  Emanuele Aina  <emanuele.aina@collabora.com>

        [Tools] Ignore missing GNUmakefile when detecting previous arch in build-webkit
        https://bugs.webkit.org/show_bug.cgi?id=91223

        Reviewed by Martin Robinson.

        When run on a clean checkout, `build-webkit` complains that no
        GNUmakefile exists when trying to detect the previously configured
        architecture, but in this case there's no previous configuration so
        the warning is pointless.

        * Scripts/webkitdirs.pm:
        (determineArchitecture): Redirect grep stderr to /dev/null.

2013-07-12  Brian Holt  <brian.holt@samsung.com>

        check-webkit-style: Ignore false positive: Instance of 'Popen' has no 'pid' member
        https://bugs.webkit.org/show_bug.cgi?id=118592

        Reviewed by Martin Robinson.

        Added a suppression for pylint false positives and a unit test.

        * Scripts/webkitpy/style/checkers/python.py:
        (Pylinter):
        * Scripts/webkitpy/style/checkers/python_unittest.py:
        (PythonCheckerTest.test_check):
        (PythonCheckerTest):
        (PythonCheckerTest.test_pylint_false_positives):
        (PythonCheckerTest.test_pylint_false_positives._mock_handle_pylint_false_positives):
        * Scripts/webkitpy/style/checkers/python_unittest_falsepositives.py: Added.
        (test_popen):

2013-07-11  Arnaud Renevier  <a.renevier@samsung.com>

        Unreviewed. Add myself as a committer.

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

2013-07-10  Sergio Correia  <sergio.correia@openbossa.org>

        Handle "load,provisional,failed" with the on_error callback on EFL MiniBrowser
        https://bugs.webkit.org/show_bug.cgi?id=118538

        Reviewed by Christophe Dumez.

        When attempting some odd url such as ``foo'', MiniBrowser will now show an
        error message such as "Cannot resolve hostname (foo)".

        Previously, it had the following behavior if MiniBrowser was started with
        such urls, e.g ``./MiniBrowser foo'':

        - Debug:
        It wouldt hit WebKit2/Platform/CoreIPC/unix/ConnectionUnix.cpp(460) and crash.

        - Release:
        No asserts, naturally, but the view would remain blank, even if we tried to
        change to a valid url.

        * MiniBrowser/efl/main.c:
        (window_create):

2013-07-10  Simon Pena  <simon.pena@samsung.com>

        [GTK] WebKitTestRunner tries to remove an already deleted event in EventSenderProxy::replaySavedEvents
        https://bugs.webkit.org/show_bug.cgi?id=118509

        Reviewed by Martin Robinson.

        In EventSenderProxy::replaySavedEvents WebKitTestRunner can crash
        when trying to remove an event already removed, if another event is
        processed in the middle. By using a Deque's takeFirst, we ensure the
        element is removed before we dispatch it.

        fast/events/mousedown-inside-dragstart-should-not-cause-crash.html no longer
        crashes after this fix is added.

        * WebKitTestRunner/EventSenderProxy.h: Use a Deque instead of Vector in GTK
        * WebKitTestRunner/gtk/EventSenderProxyGtk.cpp:
        (WTR::EventSenderProxy::replaySavedEvents): Use takeFirst to retrieve the event
        from the queue.

2013-07-09  Ryuan Choi  <ryuan.choi@samsung.com>

        [EFL] Add ewk_view_device_pixel_ratio_set
        https://bugs.webkit.org/show_bug.cgi?id=118521

        Reviewed by Gyuyoung Kim.

        * EWebLauncher/main.c: Added new option(-r) to test device pixel ratio.
        (windowCreate):
        (parseUserArguments):

2013-07-09  Bruno de Oliveira Abinader  <brunoabinader@gmail.com>

        Unreviewed change of my email addresses.
        https://bugs.webkit.org/show_bug.cgi?id=100122

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

2013-07-09  Anders Carlsson  <andersca@apple.com>

        DumpRenderTree should stop sending unsupported URLs to NSWorkspace
        https://bugs.webkit.org/show_bug.cgi?id=118514
        <rdar://problem/13686836>

        Reviewed by Sam Weinig.

        Add a new default policy delegate and override decidePolicyForNavigationAction: to not pass unhandled URLs to NSWorkspace.

        * DumpRenderTree/DefaultPolicyDelegate.h: Added.
        * DumpRenderTree/DefaultPolicyDelegate.m: Added.
        (-[DefaultPolicyDelegate webView:decidePolicyForNavigationAction:request:frame:decisionListener:]):
        * DumpRenderTree/DumpRenderTree.xcodeproj/project.pbxproj:
        Add DefaultPolicyDelegate.h and DefaultPolicyDelegate.m.

        * DumpRenderTree/mac/DumpRenderTree.mm:
        (allocateGlobalControllers):
        Allocate a DefaultPolicyDelegate object.

        (resetWebViewToConsistentStateBeforeTesting):
        Set the policy delegate to the default policy delegate.

        * DumpRenderTree/mac/DumpRenderTreeMac.h:
        Declare the defaultPolicyDelegate object.

        * DumpRenderTree/mac/TestRunnerMac.mm:
        (TestRunner::setCustomPolicyDelegate):
        Set the policy delegate to the default delegate if setDelegate is false.

2013-07-08  Zan Dobersek  <zdobersek@igalia.com>

        KURL unit test fixture class should have a meaningful name
        https://bugs.webkit.org/show_bug.cgi?id=118467

        Reviewed by Sam Weinig.

        * TestWebKitAPI/Tests/WebCore/KURL.cpp:
        (TestWebKitAPI::TEST_F): Use 'KURLTest' as the name for the KURL unit test's fixture class
        instead of the generic and inappropriate 'WebCore' name.

2013-07-08  Antti Koivisto  <antti@apple.com>

        Add Deque::removeLast
        https://bugs.webkit.org/show_bug.cgi?id=118466

        Reviewed by Andreas Kling.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WTF/Deque.cpp: Added.
        (TestWebKitAPI::TEST):

2013-07-08  Brian Holt  <brian.holt@samsung.com>

        [GTK] Leak: GFile* leaking in beginDragWithFilesCallback
        https://bugs.webkit.org/show_bug.cgi?id=118412

        Reviewed by Martin Robinson.

        An adoptRef is required to balance ref and deref calls.

        * DumpRenderTree/gtk/EventSender.cpp:
        (beginDragWithFilesCallback):

2013-07-06  Sergio Correia  <sergio.correia@openbossa.org>

        Update list of EFL WK2 API tests
        https://bugs.webkit.org/show_bug.cgi?id=118443

        Reviewed by Christophe Dumez.

        The following tests were included:

        Passing:
        - CloseThenTerminate
        - DidAssociateFormControls
        - PageVisibilityState
        - ResponsivenessTimerDoesntFireEarly
        - TerminateTwice
        - WillLoad

        Failing:
        - ResizeReversePaginatedWebView
        - ScrollPinningBehaviors

        This patch also modified ``test_webkit2_api_BINARIES'' list so that it is in
        alphabetical order.

        * TestWebKitAPI/CMakeLists.txt: Added Bundles for included tests.
        * TestWebKitAPI/PlatformEfl.cmake: Added a few tests.

2013-07-05  Tim Horton  <timothy_horton@apple.com>

        Fix r152265: FrameView's pagination mode is only one of two, and the logic was totally wrong
        https://bugs.webkit.org/show_bug.cgi?id=118439
        <rdar://problem/14366120>

        Reviewed by Anders Carlsson.

        * TestWebKitAPI/Tests/WebKit2/ResizeReversePaginatedWebView.cpp:
        (TestWebKitAPI::didLayout):
        (TestWebKitAPI::TEST):
        - Make use of EXPECT_JS_EQ instead of manually doing JavaScript stuff.
        - Assert that we got the right number of pages for sanity.
        - Reduce the page gap size so that DrawingAreaImpl doesn't try to allocate
            so much memory that SharedMemory asserts and makes the test time out.
        - Use didFirstLayoutAfterSuppressedIncrementalRendering instead of Paint
            because paint doesn't fire if the window is offscreen.

2013-07-05  Tim Horton  <timothy_horton@apple.com>

        [wk2] Add API to lock the scroll position at the top or bottom of the page
        https://bugs.webkit.org/show_bug.cgi?id=118429
        <rdar://problem/14120323>

        Reviewed by Anders Carlsson.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WebKit2/ScrollPinningBehaviors.cpp: Added.
        (TestWebKitAPI::didFinishDocumentLoadForFrame):
        (TestWebKitAPI::TEST):
        Add a test that ensures that the three pinning modes (DoNotPin, PinToTop, PinToBottom)
        all work correctly in the face of resizing the view and scrolling from JS.

2013-07-05  Michael Pruett  <michael@68k.org>

        Unreviewed. Add myself as a committer.

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

2013-07-05  Xabier Rodriguez Calvar  <calvaris@igalia.com>

        [GTK] WebKit2 test TestWebKitFaviconDatabase times out with recent glib
        https://bugs.webkit.org/show_bug.cgi?id=111434

        Reviewed by Carlos Garcia Campos.

        * Scripts/run-gtk-tests:
        (TestRunner): Unskipped TestWebKitFaviconDatabase tests.

2013-07-04  Viatcheslav Ostapenko  <sl.ostapenko@samsung.com>

        [EFL] DumpRenderTree doesn't run if "opengl_x11" engine is not available
        https://bugs.webkit.org/show_bug.cgi?id=118370

        Reviewed by Christophe Dumez.

        Add fallback to software X11 engine if opengl_x11 engine creation fails.

        * DumpRenderTree/efl/DumpRenderTree.cpp:
        (initEcoreEvas):

2013-07-04  Brian Holt  <brian.holt@samsung.com>

        [ATK] Leak: AtkAttributeSet* should be freed
        https://bugs.webkit.org/show_bug.cgi?id=118307

        Reviewed by Christophe Dumez.

        Fixed memory leaks for AtkAttributeSet by calling
        atk_attribute_set_free().

        * DumpRenderTree/atk/AccessibilityControllerAtk.cpp:
        (AccessibilityController::childElementById):
        * DumpRenderTree/atk/AccessibilityUIElementAtk.cpp:
        (getAtkAttributeSetAsString):
        (AccessibilityUIElement::allAttributes):
        (AccessibilityUIElement::stringAttributeValue):
        * WebKitTestRunner/InjectedBundle/atk/AccessibilityControllerAtk.cpp:
        (WTR::childElementById):
        * WebKitTestRunner/InjectedBundle/atk/AccessibilityUIElementAtk.cpp:
        (WTR::getAtkAttributeSetAsString):
        (WTR::AccessibilityUIElement::allAttributes):
        (WTR::AccessibilityUIElement::stringAttributeValue):

2013-07-03  David Farler  <dfarler@apple.com>

        Add Makefile to WebKitLauncher
        https://bugs.webkit.org/show_bug.cgi?id=118365

        Reviewed by Mark Rowe.

        * WebKitLauncher/Makefile: Added.

2013-07-03  Brian Holt  <brian.holt@samsung.com>

        [ATK] Leak: more leaks in AccessibilityUIElement
        https://bugs.webkit.org/show_bug.cgi?id=118362

        Reviewed by Christophe Dumez.

        Free the memory created by g_strdup_printf.

        * DumpRenderTree/atk/AccessibilityUIElementAtk.cpp:
        (AccessibilityUIElement::language):
        * WebKitTestRunner/InjectedBundle/atk/AccessibilityUIElementAtk.cpp:
        (WTR::AccessibilityUIElement::language):

2013-07-03  Jer Noble  <jer.noble@apple.com>

        Xcode often gets in a state where the debugger is completely unresponsive
        https://bugs.webkit.org/show_bug.cgi?id=118157

        The GetPointeeData() operations we use to retrieve strings is extremely expensive.
        Rather than pull the character data out of the debugger one byte at a time
        through the GetPointeeData() API, retrieve the memory contents of the string through
        the ReadMemory() API, and convert the retrieved memory into a python string.

        Reviewed by Anders Carlsson.

        * lldb/lldb_webkit.py:
        (__lldb_init_module.lldb_webkit):
        (guess_string_length):
        (ustring_to_string):
        (lstring_to_string):

2013-07-03  Morten Stenshorne  <mstensho@opera.com>

        [GTK] Let F5 refresh the page in MiniBrowser
        https://bugs.webkit.org/show_bug.cgi?id=117638

        Reviewed by Carlos Garcia Campos.

        Also use the correct icon for the refresh button that was already there.

        * MiniBrowser/gtk/BrowserWindow.c:
        (browser_window_init):

2013-07-02  Kondapally Kalyan  <kalyan.kondapally@intel.com>

        Unreviewed. Add my email to a few watchlists.

        * Scripts/webkitpy/common/config/watchlist:

2013-07-02  David Farler  <dfarler@apple.com>

        Unreviewed. Adding myself to contributors.json.

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

2013-07-02  Brian Holt  <brian.holt@samsung.com>

        [ATK] Leak: leaks in AccessibilityUIElement
        https://bugs.webkit.org/show_bug.cgi?id=118297

        Fixed memory leak.

        Reviewed by Christophe Dumez.

        * DumpRenderTree/atk/AccessibilityUIElementAtk.cpp:
        (AccessibilityUIElement::stringValue):

2013-07-02  Byungwoo Lee  <bw80.lee@samsung.com>

        Fix WebKitTestRunner crashes.
        https://bugs.webkit.org/show_bug.cgi?id=117630

        Reviewed by Darin Adler.

        Create static function to dump for WebProcess unresponsiveness status,
        and use it before calling TestController::runTest().

        Accessing TestController::m_currentInvocation before calling
        TestController::runTest() can make crash because the invocation
        instance will be assigned at the function.

        * WebKitTestRunner/TestController.cpp:
        (WTR::TestController::run):
        * WebKitTestRunner/TestInvocation.cpp:
        (WTR::TestInvocation::dumpWebProcessUnresponsiveness):
        * WebKitTestRunner/TestInvocation.h:

2013-07-02  Allan Sandfeld Jensen  <allan.jensen@digia.com>

        [Qt][WK1] Support WebGL with EGL on Linux
        https://bugs.webkit.org/show_bug.cgi?id=118251

        Reviewed by Kenneth Rohde Christiansen.

        * qmake/mkspecs/features/features.prf:

2013-07-01  Nick Diego Yamane  <nick.yamane@openbossa.org>

        [Efl][Gtk] Look at WEBKIT_OUTPUTDIR instead of WEBKITOUTPUTDIR in jhbuildrc
        https://bugs.webkit.org/show_bug.cgi?id=118267

        Reviewed by Gyuyoung Kim.

        After r152226 (from https://bugs.webkit.org/show_bug.cgi?id=117249)
        WEBKIT_OUTPUTDIR should be used instead of WEBKITOUPUTDIR. However
        Efl's jhbuildrc is still using the WEBKITOUTPUTDIR environment variable.

        * efl/jhbuildrc:
        * gtk/jhbuildrc:

2013-07-01  Gustavo Noronha Silva  <gustavo.noronha@collabora.com>

        [GTK] Remove unsupported AC backends
        https://bugs.webkit.org/show_bug.cgi?id=117362

        Reviewed by Martin Robinson.

        * gtk/jhbuild-optional.modules: no longer needs clutter-gtk, clutter
        and cogl, so removed.

2013-07-01  Timothy Hatcher  <timothy@apple.com>

        Link to WebInspectorUI.framework at build time instead of soft linking.

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

        Reviewed by Joseph Pecoraro.

        * Scripts/build-webkit: Build WebInspectorUI before WebKit and WebKit2.

2013-07-01  Tim Horton  <timothy_horton@apple.com>

        Maximum scroll position can be negative in some cases
        https://bugs.webkit.org/show_bug.cgi?id=118175
        <rdar://problem/14301217>

        Reviewed by Anders Carlsson.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WebKit2/ResizeReversePaginatedWebView.cpp: Added.
        (TestWebKitAPI::didRunJavaScript):
        (TestWebKitAPI::didLayout):
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/WebKit2/lots-of-text-vertical-lr.html: Added.
        Add a test that loads a vertical-lr document, paginates it horizontally
        from right to left, resizes the view to fit the entire document, and
        verifies that the scroll position is negative, as it must be for the
        document to be enclosed by the view.

2013-07-01  Raphael Kubo da Costa  <raphael.kubo.da.costa@intel.com>

        [EFL][GTK] Migrate from WEBKITOUTPUTDIR to WEBKIT_OUTPUTDIR
        https://bugs.webkit.org/show_bug.cgi?id=117249

        Reviewed by Brent Fulgham.

        Finish converting all use cases of WEBKITOUTPUTDIR to
        WEBKIT_OUTPUTDIR, which seems to be preferred these days.

        * DumpRenderTree/efl/FontManagement.cpp:
        (getCustomBuildDir):
        (getPlatformFontsPath):
        * DumpRenderTree/gtk/DumpRenderTree.cpp:
        (getOutputDir):
        * Scripts/webkitdirs.pm:
        (determineBaseProductDir):
        (usesPerConfigurationBuildDirectory):
        * Scripts/webkitpy/port/base.py:
        (Port.to.setup_environ_for_server):
        * Scripts/webkitpy/port/driver.py:
        (Driver._setup_environ_for_driver):
        * Scripts/webkitpy/port/gtk.py:
        (GtkPort.setup_environ_for_server):
        * WebKitTestRunner/InjectedBundle/gtk/ActivateFontsGtk.cpp:
        (WTR::getOutputDir):
        * jhbuild/jhbuildutils.py:
        (get_dependencies_path):

2013-07-01  Rafael Brandao  <rafael.lobo@webkit.org>

        Unreviewed change of my email address.

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

2013-06-28  Andreas Kling  <akling@apple.com>

        Fix Windows builds after deprecatedCharactersWithNullTermination() removal.

        * DumpRenderTree/win/DumpRenderTree.cpp:
        (addFontFallbackIfPresent):
        (removeFontFallbackIfPresent):

2013-06-28  Anders Carlsson  <andersca@apple.com>

        Remove String::deprecatedCharactersWithNullTermination() and related code
        https://bugs.webkit.org/show_bug.cgi?id=118211

        Reviewed by Benjamin Poulain.

        Remove all hasTerminatingNullCharacter() checks.

        * TestWebKitAPI/Tests/WTF/AtomicString.cpp:
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/WTF/StringImpl.cpp:
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/WTF/WTFString.cpp:
        (TestWebKitAPI::TEST):

2013-06-28  Alexey Proskuryakov  <ap@apple.com>

        [Mac] Crash when loading is stopped from -didReceiveResponse
        https://bugs.webkit.org/show_bug.cgi?id=118209
        <rdar://problem/14259249>

        Reviewed by Brady Eidson.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/mac/StopLoadingFromDidReceiveResponse.html: Added.
        * TestWebKitAPI/Tests/mac/StopLoadingFromDidReceiveResponse.mm: Added.
        (-[StopLoadingFromDidReceiveResponse webView:resource:didReceiveResponse:fromDataSource:]):
        (TestWebKitAPI::TEST):

2013-06-28  Andy Estes  <aestes@apple.com>

        [Mac] Newer versions of clang use a default template instantiation depth that is too small for TestWebKitAPI
        https://bugs.webkit.org/show_bug.cgi?id=118208

        Reviewed by Mark Rowe.

        Newer versions of clang use a default template depth of 128, but this
        is too small for Tests/WTF/HashSet.cpp. Use 256 instead, which was the
        previous default.

        Clang lowered the default to keep recursive template instantiation
        from overflowing the stack (see <rdar://problem/13935016>), but
        TestWebKitAPI's C++ files don't trigger a stack overflow even with the
        higher limit. If for some reason this starts happening then we can
        lower the limit back down.

        * TestWebKitAPI/Configurations/Base.xcconfig: Build TestWebKitAPI with -ftemplate-depth=256.

2013-06-28  Nick Diego Yamane  <nick.yamane@openbossa.org>

        [Tools] Add support for "webKitBranchBuild" git option when calculating jhbuildPath
        https://bugs.webkit.org/show_bug.cgi?id=118195

        Reviewed by Daniel Bates.

        Currently, ports that use jhbuild fail to determine jhbuild directory
        when "webKitBranchBuild" git configuration property is enabled. To reproduce
        that issue in Efl port, enable that flag in .git/config, switch to a git branch
        other than "master" and try to build webkit. The build will fail to
        locate dependencies due to lack of pkg-config paths which should be set
        by jhbuild.

        For more details about "webKitBranchBuild" option, see:
        https://trac.webkit.org/wiki/UsingGitWithWebKit

        * Scripts/webkitdirs.pm:
        (getJhbuildPath):

2013-06-28  Jessie Berlin  <jberlin@apple.com>

        WebKitTestRunner should disable automatic quote and dash substitution like DumpRenderTree does
        https://bugs.webkit.org/show_bug.cgi?id=118201

        Reviewed by Dean Jackson.

        * WebKitTestRunner/mac/main.mm:
        (main):
        Modify NSUserDefaults directly since setAutomaticQuoteSubstitutionEnabled and
        setAutomaticDashSubstitutionEnabled are not exposed on WKView.

2013-06-28  David Farler  <dfarler@apple.com>

        Upstream WebKit Nightly’s WebKitLauncher
        https://bugs.webkit.org/show_bug.cgi?id=117418

        Reviewed by Mark Rowe.

        Literal patch from Nightly's OpenSource repo.

        * WebKitLauncher/Configurations/Base.xcconfig:
        * WebKitLauncher/Configurations/WebKitLauncher.xcconfig:
        * WebKitLauncher/Info.plist:
        * WebKitLauncher/WebKitLauncher.xcodeproj/project.pbxproj:
        * WebKitLauncher/WebKitLauncherURLProtocol.m:
        (+[WebKitLauncherURLProtocol load]):
        (+[WebKitLauncherURLProtocol canInitWithRequest:]):
        (-[WebKitLauncherURLProtocol startLoading]):
        (-[WebKitLauncherURLProtocol handleWebKitVersionInformation]):
        (-[WebKitLauncherURLProtocol resourceNotFound]):
        * WebKitLauncher/WebKitNightlyEnablerSparkle.m:
        (initializeSparkle):
        * WebKitLauncher/main.m:
        (determineExecutablePath):
        (currentMacOSXVersion):
        (main):
        * WebKitLauncher/start.html:

2013-06-28  Balazs Kelemen  <b.kelemen@samsung.com>

        [EFL] back/forward keyboard shortcuts are non-intuitive
        https://bugs.webkit.org/show_bug.cgi?id=118193

        Reviewed by Christophe Dumez.

        Changed shortcuts for go-back/go-forward to alt+left and alt+right.

        * EWebLauncher/main.c:
        (on_key_down):
        * MiniBrowser/efl/main.c:
        (on_key_down):

2013-06-28  Roger Fong  <roger_fong@apple.com>

        Enable AVFoundation in Web Prefs for WinLauncher and DumpRenderTree on Windows.
        https://bugs.webkit.org/show_bug.cgi?id=118194.

        Reviewed by Brent Fulgham.

        * DumpRenderTree/win/DumpRenderTree.cpp:
        (dllLauncherEntryPoint):
        * WinLauncher/WinLauncher.cpp:
        (dllLauncherEntryPoint):

2013-06-28  Roger Fong  <roger_fong@apple.com>

        Unreviewed build fix for AppleWin port. Fix some file paths.

        * WinLauncher/WinLauncher.vcxproj/WinLauncherLib.vcxproj:
        * WinLauncher/WinLauncher.vcxproj/WinLauncherLib.vcxproj.filters:

2013-06-27  Roger Fong  <roger_fong@apple.com>

        Add IAccessibilityDelegate implementation to WinLauncher for testing purposes.
        https://bugs.webkit.org/show_bug.cgi?id=118160.

        Reviewed by Brent Fulgham.

        * WinLauncher/AccessibilityDelegate.cpp: Added.
        (AccessibilityDelegate::QueryInterface):
        (AccessibilityDelegate::AddRef):
        (AccessibilityDelegate::Release):
        (AccessibilityDelegate::fireFrameLoadStartedEvents): Just returns S_OK;
        (AccessibilityDelegate::fireFrameLoadFinishedEvents): Ditto.
        * WinLauncher/AccessibilityDelegate.h: Added.
        (AccessibilityDelegate::AccessibilityDelegate):
        * WinLauncher/WinLauncher.cpp:
        (dllLauncherEntryPoint):
        * WinLauncher/WinLauncher.vcxproj/WinLauncherLib.vcxproj:
        * WinLauncher/WinLauncher.vcxproj/WinLauncherLib.vcxproj.filters:

2013-06-28  Christophe Dumez  <ch.dumez@sisa.samsung.com>

        Clean up temporary files created by the bindings test script
        https://bugs.webkit.org/show_bug.cgi?id=118189

        Reviewed by Kentaro Hara.

        Remove temporary files created by preprocess-idls.pl script after
        the bindings tests are executed.

        Based on Blink 153236 by Kentaro Hara <haraken@chromium.org>.

        * Scripts/webkitpy/bindings/main.py:
        (BindingsTests.main):

2013-06-26  Dean Jackson  <dino@apple.com>

        [Mac] Add Mavericks system font to Test systems
        https://bugs.webkit.org/show_bug.cgi?id=118109

        Reviewed by Simon Fraser.

        OS X Mavericks uses a different font for system controls. Tell DRT and
        WKTR about them otherwise they use a fallback font. Unfortunately the
        fonts are hidden (not found in the list of available fonts) so I
        had to add them manually.

        Even though there is only one at the moment, I implemented this
        as a set so it will be easier to add new fonts if necessary.

        * DumpRenderTree/mac/DumpRenderTree.mm:
        (allowedFontFamilySet): Fixed typo.
        (systemHiddenFontFamilySet): New method that returns the system control font.
        (drt_NSFontManager_availableFonts): Merge the hidden fonts.
        * WebKitTestRunner/InjectedBundle/mac/ActivateFonts.mm:
        (WTR::allowedFontFamilySet): Fixed typo.
        (WTR::systemHiddenFontFamilySet): As above.
        (WTR::wtr_NSFontManager_availableFonts):

2013-06-27  Anders Carlsson  <andersca@apple.com>

        Get rid of the last uses of deprecatedCharactersWithNullTermination()
        https://bugs.webkit.org/show_bug.cgi?id=118159

        Reviewed by Andreas Kling.

        Replace calls to deprecatedCharactersWithNullTermination() with charactersWithNullTermination().data().

        * DumpRenderTree/win/DumpRenderTree.cpp:
        (findFontFallback):

2013-06-27  Bem Jones-Bey  <bjonesbe@adobe.com>

        Sync up w3c import script with changes in Blink
        https://bugs.webkit.org/show_bug.cgi?id=118149

        Reviewed by Dirk Pranke.

        This is a port of the following blink changes:

        https://codereview.chromium.org/15366004
        https://chromiumcodereview.appspot.com/15592005
        https://codereview.chromium.org/16021006
        https://codereview.chromium.org/15590004
        https://codereview.chromium.org/15901008
        https://codereview.chromium.org/16171009
        https://codereview.chromium.org/16465007
        https://codereview.chromium.org/15981013

        * Scripts/webkitpy/common/checkout/checkout_unittest.py:
        (setUp):
        (test_commit_message_for_this_commit):
        * Scripts/webkitpy/port/base.py:
        (Port):
        * Scripts/webkitpy/port/test.py:
        * Scripts/webkitpy/w3c/test_converter.py:
        (W3CTestConverter.__init__):
        (W3CTestConverter.read_webkit_prefixed_css_property_list):
        (W3CTestConverter.convert_for_webkit):
        (W3CTestConverter.convert_css):
        (W3CTestConverter.convert_html):
        (W3CTestConverter.convert_testharness_paths):
        (W3CTestConverter.convert_prefixed_properties):
        (W3CTestConverter.add_webkit_prefix_to_unprefixed_properties):
        * Scripts/webkitpy/w3c/test_converter_unittest.py:
        * Scripts/webkitpy/w3c/test_importer.py:
        (main):
        (configure_logging):
        (configure_logging.LogHandler):
        (configure_logging.LogHandler.format):
        (parse_args):
        (TestImporter.__init__):
        (TestImporter.find_importable_tests):
        (TestImporter.import_tests):
        (TestImporter.setup_destination_directory):
        (TestImporter.remove_deleted_files):
        * Scripts/webkitpy/w3c/test_importer_unittest.py:
        (TestImporterTest.test_import_dir_with_no_tests_and_no_hg):
        (TestImporterTest.test_import_dir_with_no_tests):
        (TestImporterTest):
        * Scripts/webkitpy/w3c/test_parser.py:
        (TestParser.load_file):
        (TestParser.analyze_test):
        (TestParser.support_files):
        * Scripts/webkitpy/w3c/test_parser_unittest.py:

2013-06-27  Csaba Osztrogonác  <ossy@webkit.org>

        [webkitpy] AbstractPatchSequencingCommand should have _prepare_state
        https://bugs.webkit.org/show_bug.cgi?id=118128

        Reviewed by Ryosuke Niwa.

        It is a preparation for a new webkit-patch command: run-tests-touched-by-attachment
        https://bugs.webkit.org/show_bug.cgi?id=117831

        * Scripts/webkitpy/tool/commands/download.py:
        (AbstractPatchSequencingCommand):
        (AbstractPatchSequencingCommand._prepare_to_process): Call _prepare_state before prepare_steps.
        (AbstractPatchSequencingCommand._process_patch): Use the same initial state for each patch.
        (AbstractPatchSequencingCommand._prepare_state): Added.

2013-06-27  Brendan Long  <b.long@cablelabs.com>

        [Qt] Build overrides -j when given --makeargs="-sj40"
        https://bugs.webkit.org/show_bug.cgi?id=116897

        Reviewed by Csaba Osztrogonác.

        * Scripts/webkitdirs.pm:
        (buildQMakeProjects):
        Change regex checking for -j* to also check for -*j*

2013-06-27  Christophe Dumez  <ch.dumez@sisa.samsung.com>

        Remove [NoInterfaceObject] from WorkerGlobalScope
        https://bugs.webkit.org/show_bug.cgi?id=118071

        Reviewed by Kentaro Hara.

        Update bindings test script to pass 2 additional parameters
        now needed by the preprocess-idls.pl script.

        * Scripts/webkitpy/bindings/main.py:
        (BindingsTests.generate_supplemental_dependency):
        (BindingsTests.main):

2013-06-27  Xabier Rodriguez Calvar  <calvaris@igalia.com>

        Fixing some compiler warnings
        https://bugs.webkit.org/show_bug.cgi?id=117791

        Reviewed by Martin Robinson.

        * GNUmakefile.am: Silenced format warning.
        * TestWebKitAPI/Tests/WebKit2/DOMWindowExtensionNoCache_Bundle.cpp:
        (TestWebKitAPI::DOMWindowExtensionNoCache::globalObjectIsAvailableForFrame):
        Solved warning about uninitialized variable.

2013-06-27  Christophe Dumez  <ch.dumez@sisa.samsung.com>

        Fix bindings tests after r152080
        https://bugs.webkit.org/show_bug.cgi?id=118118

        Reviewed by Gyuyoung Kim.

        r152080 renamed argument to preprocess-idls.pl from --workerContextConstructorsFile
        to --workerGlobalScopeConstructorsFile. This patch updates to bindings test script
        accordingly.

        * Scripts/webkitpy/bindings/main.py:
        (BindingsTests.generate_supplemental_dependency):
        (BindingsTests.main):

2013-06-26  Carlos Garcia Campos  <cargarcia@blackberry.com>

        [BlackBerry] Handle testRunner.setCustomPolicyDelegate()
        https://bugs.webkit.org/show_bug.cgi?id=117982

        Reviewed by Rob Buis.

        * DumpRenderTree/blackberry/DumpRenderTree.cpp:
        (BlackBerry::WebKit::DumpRenderTree::DumpRenderTree): Initialize
        m_policyDelegateIsPermissive.
        (BlackBerry::WebKit::DumpRenderTree::resetToConsistentStateBeforeTesting):
        Reset m_policyDelegateIsPermissive.
        (BlackBerry::WebKit::DumpRenderTree::setCustomPolicyDelegate): Set
        m_policyDelegateIsPermissive.
        * DumpRenderTree/blackberry/DumpRenderTreeBlackBerry.h:
        (BlackBerry::WebKit::DumpRenderTree::policyDelegateEnabled):
        Return whether custom policy is enabled.
        (BlackBerry::WebKit::DumpRenderTree::policyDelegateIsPermissive):
        Return whether custom policy is permissive.

2013-06-26  Anders Carlsson  <andersca@apple.com>

        Deprecate StringImpl::charactersWithNullTermination
        https://bugs.webkit.org/show_bug.cgi?id=118108

        Reviewed by Beth Dakin.

        Rename calls to charactersWithNullTermination to deprecatedCharactersWithNullTermination.

        * DumpRenderTree/win/DumpRenderTree.cpp:
        (findFontFallback):
        (addFontFallbackIfPresent):
        (removeFontFallbackIfPresent):

2013-06-26  Nico Weber  <thakis@chromium.org>

        Remove detect-mismached-virtual-const.
        https://bugs.webkit.org/show_bug.cgi?id=117999

        Reviewed by Anders Carlsson.

        Clang warns on mismatched virtual const, so there's no need for this
        script any more.

        * Scripts/detect-mismatched-virtual-const: Removed.

2013-06-26  Alex Christensen  <achristensen@apple.com>

        Added a code coverage report.
        https://bugs.webkit.org/show_bug.cgi?id=117941

        Reviewed by Joseph Pecoraro.

        * CodeCoverage: Added.
        * CodeCoverage/results-template.html: Added.
        * Scripts/generate-coverage-data: Generate and open the new report.

2013-06-25  Raphael Kubo da Costa  <raphael.kubo.da.costa@intel.com>

        gdb: Remove the webcore.py pretty printer.
        https://bugs.webkit.org/show_bug.cgi?id=117992

        Reviewed by Jochen Eisinger.

        webcore.py has been only a placeholder for backwards compatibility
        for almost 3 years. It should be safe enough to remove it now.

        * gdb/webcore.py: Removed.

2013-05-26  Peter Gal  <galpeter@inf.u-szeged.hu>

        Creating cURL watchlist and adding myself to it.

        Reviewed by Csaba Osztrogonác.

        * Scripts/webkitpy/common/config/watchlist:

2013-06-25  Gyuyoung Kim  <gyuyoung.kim@samsung.com>

        Unreviewed, change my email address for watch list.

        * Scripts/webkitpy/common/config/watchlist:

2013-06-25  Byungwoo Lee  <bw80.lee@samsung.com>

        [EFL] Add a script to install dependencies.
        https://bugs.webkit.org/show_bug.cgi?id=117968

        Reviewed by Christophe Dumez.

        Add a script which installs basic dependencies for building WebKit EFL.

        The dependencies are from the current EFLWebKit wiki page.
        After this patch is landed, the wiki page will be updated to use
        this script.

        * efl/install-dependencies: Added.

2013-06-24  Dean Jackson  <dino@apple.com>

        [Mac] Update font used for Chinese in test systems
        https://bugs.webkit.org/show_bug.cgi?id=117970

        Reviewed by Alexey Proskuryakov.

        Add "Songti TC" and "Songti SC" to the list of allowed fonts
        in DRT and WKTR.

        * DumpRenderTree/mac/DumpRenderTree.mm:
        (allowedFontFamilySet):
        * WebKitTestRunner/InjectedBundle/mac/ActivateFonts.mm:
        (WTR::allowedFontFamilySet):

2013-06-24  Tim Horton  <timothy_horton@apple.com>

        Make MiniBrowser paginated mode work with WebKit1
        https://bugs.webkit.org/show_bug.cgi?id=117950

        Reviewed by Beth Dakin.

        * MiniBrowser/mac/WK1BrowserWindowController.m:
        (-[WK1BrowserWindowController isPaginated]):
        (-[WK1BrowserWindowController togglePaginationMode:]):
        Hook up isPaginated and togglePaginationMode just as for WebKit2.

2013-06-24  David Kilzer  <ddkilzer@apple.com>

        bisect-builds: improve heuristic for choosing the next build after a broken build
        <http://webkit.org/b/117918>

        Reviewed by Simon Fraser.

        * Scripts/bisect-builds: When a build is broken, use a heuristic
        that "bisects" the left side or the right side of the remaining
        revisions to pick a revision that's sufficiently different from
        the revision of the broken build.  This heuristic assumes there
        is a sequential range of broken builds whenever one broken build
        is found.

2013-06-24  Chris Rogers  <crogers@google.com>

        WaveTable name has changed to PeriodicWave
        https://bugs.webkit.org/show_bug.cgi?id=117748

        Reviewed by Jer Noble.

        * Scripts/do-webcore-rename:

2013-06-22  Santosh Mahto  <santosh.ma@samsung.com>

        [EFL] Add support for MHTML save/load feature to MiniBrowser
        https://bugs.webkit.org/show_bug.cgi?id=106620

        Reviewed by Christophe Dumez.

        Enable CTRL + S as save page in mhtml and CTRL + L to load any page
        from filesystem.

        * MiniBrowser/efl/CMakeLists.txt:
        * MiniBrowser/efl/main.c:
        (page_contents_callback):
        (on_key_down):
        (show_file_entry_dialog): generic function to show file enrty
        selector dialogue

2013-06-21  Brent Fulgham  <bfulgham@apple.com>

        [Windows] Unreviewed crash protection for DRT

        * DumpRenderTree/win/AccessibilityUIElementWin.cpp: Check for null elements in routines
        to avoid crashing during test runs.

2013-06-21  Christophe Dumez  <ch.dumez@sisa.samsung.com>

        REGRESSION (r150663): Using webkitAudioContext in Inspector makes it undefined everywhere
        https://bugs.webkit.org/show_bug.cgi?id=117825

        Reviewed by Kentaro Hara.

        DumpRenderTreeSupportEfl::setWebAudioEnabled() now requires an additional view argument.

        * DumpRenderTree/efl/DumpRenderTreeChrome.cpp:
        (DumpRenderTreeChrome::resetDefaultsToConsistentValues):
        * DumpRenderTree/efl/TestRunnerEfl.cpp:
        (TestRunner::overridePreference):

2013-06-21  Krzysztof Czech  <k.czech@samsung.com>

        [ATK] Added support for aria-required attribute.
        https://bugs.webkit.org/show_bug.cgi?id=117730

        Reviewed by Chris Fleizach.

        Added support for testing aria-required attribute.

        * DumpRenderTree/atk/AccessibilityUIElementAtk.cpp:
        (AccessibilityUIElement::isRequired):
        * WebKitTestRunner/InjectedBundle/atk/AccessibilityUIElementAtk.cpp:
        (WTR::AccessibilityUIElement::isRequired):

2013-06-20  Ryuan Choi  <ryuan.choi@samsung.com>

        [CMAKE][EFL] Enable DOM4 Events Constructor
        https://bugs.webkit.org/show_bug.cgi?id=117858

        Reviewed by Laszlo Gombos.

        * Scripts/webkitperl/FeatureList.pm: Enable the feature for the EFL port.

2013-06-20  Carlos Garcia Campos  <cgarcia@igalia.com>

        [BlackBerry] Handle testRunner.setWillSendRequestReturnsNull() in DRT
        https://bugs.webkit.org/show_bug.cgi?id=117827

        Reviewed by Rob Buis.

        Reset the passed in request if willSendRequestReturnsNull() is
        true or willSendRequestReturnsNullOnRedirect() is true and it's a
        redirection.

        * DumpRenderTree/blackberry/DumpRenderTree.cpp:
        (BlackBerry::WebKit::DumpRenderTree::willSendRequestForFrame):
        * DumpRenderTree/blackberry/DumpRenderTreeBlackBerry.h:

2013-06-20  Csaba Osztrogonác  <ossy@webkit.org>

        Commit queue shouldn't reopen unrelated bugs because of flakiness
        https://bugs.webkit.org/show_bug.cgi?id=117503

        Reviewed by Ryosuke Niwa.

        * Scripts/webkitpy/tool/bot/flakytestreporter.py:
        (_follow_duplicate_chain):
        (_update_bug_for_flaky_test):

2013-06-19  Brent Fulgham  <bfulgham@apple.com>

        [Windows] AX: Expand notification support.
        https://bugs.webkit.org/show_bug.cgi?id=117761

        Reviewed by Anders Carlsson.

        * DumpRenderTree/win/AccessibilityUIElementWin.cpp:
        (AccessibilityUIElement::isPressActionSupported): Provide implementation.
        (AccessibilityUIElement::press): Provide implementation.

2013-06-19  Benjamin Poulain  <bpoulain@apple.com>

        Use the PlatformEvent timestamp when creating a DOM Event
        https://bugs.webkit.org/show_bug.cgi?id=117179

        Reviewed by Darin Adler.

        * WebKitTestRunner/mac/EventSenderProxy.mm:
        (WTR::EventSenderProxy::mouseDown):
        (WTR::EventSenderProxy::mouseUp):
        (WTR::EventSenderProxy::mouseMoveTo):
        (WTR::EventSenderProxy::keyDown):

2013-06-18  Alex Christensen  <achristensen@apple.com>

        Working on coverage script, added xml to json data extraction script.
        https://bugs.webkit.org/show_bug.cgi?id=117648

        This is part of a new test code coverage analysis tool.  This compiles WebKit to generate
        coverage data, runs the tests, and collects all of the data in json format.

        Reviewed by Stephanie Lewis.

        * Scripts/generate-coverage-data:
        (parseGcovrOutput):
        (getFileHitsAndBranches):
        (addLineCounts):
        (createResultName):
        * Scripts/webkitpy/tool/gcovr: Added.

2013-06-18  Ryuan Choi  <ryuan.choi@samsung.com>

        Unreviewed build fix after r151699.

        * TestWebKitAPI/CMakeLists.txt:
        * WebKitTestRunner/CMakeLists.txt:
        Added include dir for InjectedBundleHitTestResultMediaType.h and WKBundleHitTestResult.h

2013-06-18  Roger Fong  <roger_fong@apple.com>

        Replace tools32 folder with tools and update WebKit Windows solution accordingly.
        <rdar://problem/14118143>.

        Rubberstamped by Brent Fulgham.

        * DumpRenderTree/DumpRenderTree.vcxproj/DumpRenderTree/DumpRenderTree.vcxproj:
        * DumpRenderTree/DumpRenderTree.vcxproj/DumpRenderTree/DumpRenderTreeDebug.props:
        * DumpRenderTree/DumpRenderTree.vcxproj/DumpRenderTree/DumpRenderTreeDebugWinCairo.props:
        * DumpRenderTree/DumpRenderTree.vcxproj/DumpRenderTree/DumpRenderTreeLauncher.vcxproj:
        * DumpRenderTree/DumpRenderTree.vcxproj/DumpRenderTree/DumpRenderTreeLauncherDebug.props:
        * DumpRenderTree/DumpRenderTree.vcxproj/DumpRenderTree/DumpRenderTreeLauncherProduction.props:
        * DumpRenderTree/DumpRenderTree.vcxproj/DumpRenderTree/DumpRenderTreeLauncherRelease.props:
        * DumpRenderTree/DumpRenderTree.vcxproj/DumpRenderTree/DumpRenderTreeProduction.props:
        * DumpRenderTree/DumpRenderTree.vcxproj/DumpRenderTree/DumpRenderTreeRelease.props:
        * DumpRenderTree/DumpRenderTree.vcxproj/DumpRenderTree/DumpRenderTreeReleaseWinCairo.props:
        * DumpRenderTree/DumpRenderTree.vcxproj/ImageDiff/ImageDiff.vcxproj:
        * DumpRenderTree/DumpRenderTree.vcxproj/ImageDiff/ImageDiffDebug.props:
        * DumpRenderTree/DumpRenderTree.vcxproj/ImageDiff/ImageDiffDebugWinCairo.props:
        * DumpRenderTree/DumpRenderTree.vcxproj/ImageDiff/ImageDiffLauncher.vcxproj:
        * DumpRenderTree/DumpRenderTree.vcxproj/ImageDiff/ImageDiffLauncherDebug.props:
        * DumpRenderTree/DumpRenderTree.vcxproj/ImageDiff/ImageDiffLauncherProduction.props:
        * DumpRenderTree/DumpRenderTree.vcxproj/ImageDiff/ImageDiffLauncherRelease.props:
        * DumpRenderTree/DumpRenderTree.vcxproj/ImageDiff/ImageDiffProduction.props:
        * DumpRenderTree/DumpRenderTree.vcxproj/ImageDiff/ImageDiffRelease.props:
        * DumpRenderTree/DumpRenderTree.vcxproj/ImageDiff/ImageDiffReleaseWinCairo.props:
        * DumpRenderTree/DumpRenderTree.vcxproj/TestNetscapePlugin/TestNetscapePlugin.vcxproj:
        * DumpRenderTree/DumpRenderTree.vcxproj/TestNetscapePlugin/TestNetscapePluginDebug.props:
        * DumpRenderTree/DumpRenderTree.vcxproj/TestNetscapePlugin/TestNetscapePluginProduction.props:
        * DumpRenderTree/DumpRenderTree.vcxproj/TestNetscapePlugin/TestNetscapePluginRelease.props:
        * TestWebKitAPI/TestWebKitAPI.vcxproj/TestWebKitAPI.vcxproj:
        * TestWebKitAPI/TestWebKitAPI.vcxproj/TestWebKitAPIDebug.props:
        * TestWebKitAPI/TestWebKitAPI.vcxproj/TestWebKitAPIDebugWinCairo.props:
        * TestWebKitAPI/TestWebKitAPI.vcxproj/TestWebKitAPIProduction.props:
        * TestWebKitAPI/TestWebKitAPI.vcxproj/TestWebKitAPIRelease.props:
        * TestWebKitAPI/TestWebKitAPI.vcxproj/TestWebKitAPIReleaseWinCairo.props:
        * WinLauncher/WinLauncher.vcxproj/WinLauncher.vcxproj:
        * WinLauncher/WinLauncher.vcxproj/WinLauncherDebug.props:
        * WinLauncher/WinLauncher.vcxproj/WinLauncherLib.vcxproj:
        * WinLauncher/WinLauncher.vcxproj/WinLauncherLibDebug.props:
        * WinLauncher/WinLauncher.vcxproj/WinLauncherLibProduction.props:
        * WinLauncher/WinLauncher.vcxproj/WinLauncherLibRelease.props:
        * WinLauncher/WinLauncher.vcxproj/WinLauncherProduction.props:
        * WinLauncher/WinLauncher.vcxproj/WinLauncherRelease.props:
        * win/AssembleBuildLogs/AssembleBuildLogs.vcxproj:
        * win/record-memory/record-memory.vcxproj:
        * win/record-memory/record-memoryDebug.props:
        * win/record-memory/record-memoryDebugWinCairo.props:
        * win/record-memory/record-memoryProduction.props:
        * win/record-memory/record-memoryRelease.props:
        * win/record-memory/record-memoryReleaseWinCairo.props:

2013-06-17  Kangil Han  <kangil.han@samsung.com>

        Unreviewed. Add my email to a DOM watchlist.

        * Scripts/webkitpy/common/config/watchlist:

2013-06-17  Zan Dobersek  <zdobersek@igalia.com>

        Unreviewed GTK gardening.

        * Scripts/run-gtk-tests:
        (TestRunner): Skip three WebKit2APITests suites that are currently timing out.

2013-06-15  Bruno de Oliveira Abinader  <brunoabinader@gmail.com>

        Unreviewed. Reorder my email addresses.
        https://bugs.webkit.org/show_bug.cgi?id=100122

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

2013-06-14  Enrica Casucci  <enrica@apple.com>

        WKPageFindStringMatches ignores the kWKFindOptionsBackwards option.
        https://bugs.webkit.org/show_bug.cgi?id=117647
        <rdar://problem/13881024>

        Reviewed by Darin Adler.
        
        The test now uses content with a selection and tests both
        forwards and backward find as well as the case of a find
        that has no matches after the user selection.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WebKit2/FindMatches.mm:
        (TestWebKitAPI::didFindStringMatches):
        * TestWebKitAPI/Tests/WebKit2/findRanges.html: Added.

2013-06-14  Tor Arne Vestbø  <tor.arne.vestbo@digia.com>

        Remove myself from Qt build system watchlist

        Reviewed by Simon Hausmann.

        * Scripts/webkitpy/common/config/watchlist:

2013-06-13  Michael Brüning  <michael.bruning@digia.com>

        [Qt][Mac] Disable QTKit video on OS X.
        https://bugs.webkit.org/show_bug.cgi?id=117591

        Reviewed by Tor Arne Vestbø.

        Deployment of Qt binaries to different Mac OS X
        platform version makes it impossible to link against
        the correct version of the WebKitSystemInterface library,
        so we need to disable QTKit for media elements.

        * qmake/mkspecs/features/features.prf:

2013-06-13  Michał Pakuła vel Rutka  <m.pakula@samsung.com>

        [EFL][WK2] Wrong context menu and popup menu positions when scroll is applied
        https://bugs.webkit.org/show_bug.cgi?id=116610

        Reviewed by Noam Rosenthal.

        Remove unnecessary code adjusting context menu position to webview position.
        Now position is calculcated in EwkView.

        * MiniBrowser/efl/main.c:
        (on_context_menu_show):

2013-06-12  Roger Fong  <roger_fong@apple.com>

        Unreviewed. Turn on WinEWS test now that AppleWin port uses new-run-webkit-tests.

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

2013-06-12  Eduardo Lima Mitev  <elima@igalia.com>

        [atk] Replace deprecated call to atk_document_get_locale() in DumpRenderTree
        https://bugs.webkit.org/show_bug.cgi?id=115647

        Reviewed by Martin Robinson.

        Locale resolution is moved to WebKitAccessibleWrapperAtk using
        AtkObject::get_object_locale() API. Now, implementation of
        AccessibilityUIElement::language() in both DumpRenderTree and WebKitTestRunner can
        be leveraged to get_object_locale() of AtkObject.

        Apart from improving encapsulation, this avoids calling deprecated get_document_locale()
        method.

        No new functionality, no new tests.

        * DumpRenderTree/atk/AccessibilityUIElementAtk.cpp:
        (AccessibilityUIElement::language): Leverage locale resolution to
        AtkObject::get_object_locale().
        * WebKitTestRunner/InjectedBundle/atk/AccessibilityUIElementAtk.cpp:
        (WTR::AccessibilityUIElement::language): Leverage locale resolution to
        AtkObject::get_object_locale().

2013-06-12  Hugo Parente Lima  <hugo.lima@openbossa.org>

        Remove last bits of GYP from build-webkit and update-webkit scripts
        https://bugs.webkit.org/show_bug.cgi?id=117557

        Reviewed by Ryosuke Niwa.

        * Scripts/build-webkit:
        * Scripts/update-webkit:

2013-06-12  Hugo Parente Lima  <hugo.lima@openbossa.org>

        Remove forgotten unused Tools/Script/make-gypi script
        https://bugs.webkit.org/show_bug.cgi?id=117558

        Reviewed by Ryosuke Niwa.

        This script isn't used since the GYP removal from WebKit.

        * Scripts/make-gypi: Removed.

2013-06-12  Andres Gomez  <agomez@igalia.com>

        [GTK] MiniBrowser to automatically download "non-showable" documents when left click in link
        https://bugs.webkit.org/show_bug.cgi?id=117533

        Reviewed by Carlos Garcia Campos.

        MiniBrowser now starts automatically the download of the documents
        that cannot be shown just by WebKit itself on link left clicking.

        * MiniBrowser/gtk/BrowserWindow.c:
        (webViewDecidePolicy): handled the
        WEBKIT_POLICY_DECISION_TYPE_RESPONSE decision type too.

2013-06-12  Zan Dobersek  <zdobersek@igalia.com>

        [GTK] Remove the WebCoreLayer(Gtk2).a archives before regenerating them
        https://bugs.webkit.org/show_bug.cgi?id=116723

        Reviewed by Carlos Garcia Campos.

        * TestWebKitAPI/GNUmakefile.am: When generating the WebCoreLayer.a archive from all the dependency archives,
        remove the current archive (if any). Updating an existent archive in an incremental build is not bulletproof
        and can lead to corrupt archives and subsequent build failures. On the other hand, the archive generation is
        not expensive and produces a working archive without problems even on incremental builds.

2013-06-11  Santosh Mahto  <santosh.ma@samsung.com>

        [EFL] Window resize should close the popupmenu
        https://bugs.webkit.org/show_bug.cgi?id=117391

        Reviewed by Christophe Dumez.
        
        Added the code to close the popup when main window is resized.

        * MiniBrowser/efl/main.c:
        (on_window_resize):

2013-06-11  Alex Christensen  <achristensen@apple.com>

        Removed old broken code coverage tool.
        https://bugs.webkit.org/show_bug.cgi?id=117520

        Reviewed by Sam Weinig.

        * CodeCoverage: Removed.
        * CodeCoverage/README: Removed.
        * CodeCoverage/amber.png: Removed.
        * CodeCoverage/cov.py: Removed.
        * CodeCoverage/emerald.png: Removed.
        * CodeCoverage/gcov.css: Removed.
        * CodeCoverage/glass.png: Removed.
        * CodeCoverage/regenerate-coverage-display: Removed.
        * CodeCoverage/ruby.png: Removed.
        * CodeCoverage/run-generate-coverage-data: Removed.
        * CodeCoverage/snow.png: Removed.

2013-06-11  Timothy Hatcher  <timothy@apple.com>

        Have build-webkit build the WebInspectorUI project.

        * Scripts/build-webkit:

2013-06-11  Ryosuke Niwa  <rniwa@webkit.org>

        Add an option to run-webkit-tests to skip java dependency check
        https://bugs.webkit.org/show_bug.cgi?id=117516

        Reviewed by Andreas Kling.

        * Scripts/webkitpy/layout_tests/run_webkit_tests.py:
        (parse_args):
        * Scripts/webkitpy/port/mac.py:
        (MacPort._check_port_build):

2013-06-11  Alex Christensen  <achristensen@apple.com>

        https://bugs.webkit.org/show_bug.cgi?id=117514
        Removed extra Xcode code coverage flags.

        Reviewed by Sam Weinig.

        * Scripts/webkitdirs.pm:
        (XcodeCoverageSupportOptions):

2013-06-11  Brent Fulgham  <bfulgham@apple.com>

        [Windows] Implement 'attributeValue' accessor to support testing
        https://bugs.webkit.org/show_bug.cgi?id=117513

        Reviewed by Anders Carlsson.

        * DumpRenderTree/win/AccessibilityControllerWin.cpp:
        (comparableObject): Move earlier in file.
        (findAccessibleObjectById): New implemenation.
        (AccessibilityController::accessibleElementById): New implementation.

2013-06-11  Csaba Osztrogonác  <ossy@webkit.org>

        Make WTR use its own temporary directory for application cache
        https://bugs.webkit.org/show_bug.cgi?id=117143

        Reviewed by Alexey Proskuryakov.

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

2013-06-10  Alexey Proskuryakov  <ap@apple.com>

        https://bugs.webkit.org/show_bug.cgi?id=117449
        Remove dead code for storing fonts in __DATA section

        Reviewed by Dan Bernstein.

        * DumpRenderTree/mac/Configurations/DumpRenderTree.xcconfig:
        Don't copy font resources to __DATA, as we don't have any code that reads them
        from there (previously removed due to being under "defined(BUILDING_ON_LEOPARD)").

        * DumpRenderTree/mac/DumpRenderTree.mm: (activateTestingFonts):
        * WebKitTestRunner/InjectedBundle/mac/ActivateFonts.mm: (WTR::activateFonts):
        Removed comments suggesting that we want to restore the old solution.

2013-06-10  Bear Travis  <betravis@adobe.com>

        [CSS Shapes][CSS Exclusions] Split CSS Exclusions and CSS Shapes code
        https://bugs.webkit.org/show_bug.cgi?id=117162

        Reviewed by Alexandru Chiculita.

        Adding the WebCore/rendering/shapes directory to the include list.

        * DumpRenderTree/efl/CMakeLists.txt:

2013-06-09  Brent Fulgham  <bfulgham@apple.com>

        [Windows] Unreviewed test correction:  Prevent DumpRenderTree crashes
        * DumpRenderTree/win/AccessibilityUIElementWin.cpp:
        (AccessibilityUIElement::role): Prevent crashes when m_element is null. This
        happends in some of the 'accessibility' test cases.

2013-06-08  peavo@outlook.com  <peavo@outlook.com>

        [WinCairo] TestWebKitAPI fails to link.
        https://bugs.webkit.org/show_bug.cgi?id=117345

        Reviewed by Brent Fulgham.

        Need to link with WTF.lib.

        * TestWebKitAPI/TestWebKitAPI.vcxproj/TestWebKitAPICommonWinCairo.props: Link with WTF.lib.

2013-06-07  Roger Fong  <roger_fong@apple.com>

        Get rid of not very helpful test that fails only on some machines because xcrun is not installed.

        Rubberstamped by Ryousuke Niwa.

        * Scripts/webkitpy/layout_tests/run_webkit_tests_integrationtest.py:
        (RunTest.test_build_check):

2013-06-07  Hugo Parente Lima  <hugo.lima@openbossa.org>

        [Qt] Remove Qt bits from Scripts/webkitperl/FeatureList.pm
        https://bugs.webkit.org/show_bug.cgi?id=117315

        Reviewed by Benjamin Poulain.

        Qt doesn't use the default values specified on FeatureList since r44681,
        this patch just remove a bit of noise.

        * Scripts/webkitperl/FeatureList.pm:

2013-06-07  Jungsik Tae  <davidtlay88@gmail.com>

        [EFL] Implement colorpicker for HTML5 input type color on Minibrowser
        https://bugs.webkit.org/show_bug.cgi?id=115890

        Reviewed by Christophe Dumez.

        When user clicks HTML5 input type color,
        color selector window is created on browser object by using elm_colorchooser_add().
        It can listen a signal dismissing colorpicker by calling the ewk_color_picker_color_set().
        The evas_object_color_set() sets a color value returning to browser.

        * MiniBrowser/efl/main.c:
        (window_free): When we delete parent window, deleting the colorpicker object.
        (on_color_changed): Change color of rectangle to show color selected by user.
        (on_color_item_selected): Change color of rectangle when clicked color palettes offered by elm_color_chooser().
        (on_color_picker_ok_clicked): Call on_colorpicker_dismiss() and set the color.
        (on_color_picker_cancel_clicked): Get a preexisting color and call ewk_color_picker_color_set().
        (on_color_picker_dismiss): Delete colorpicker object.
        (on_color_picker_request): Create colorpicker window object.
        (window_create):

2013-06-06  Yuki Sekiguchi  <yuki.sekiguchi@access-company.com>

        svn-apply cannot apply patches which is generated by git to files that contain space characters in their path
        https://bugs.webkit.org/show_bug.cgi?id=111066

        Reviewed by Daniel Bates.

        Fixes an issue where parseGitDiffHeader() would extract the wrong substring of the diff --git line as the target file path when the source file path contains a space character.

        ParseGitDiffHeader() should support the path which line has space characters.
        To support this, I changed parsing algorithm like the following:
        - When the diff have prefix, we consider next characters after "b/" as part of a file path.
        - When the diff have no prefix, we assume that both path have same directory prefix, and we split the diff line using the prefix.

        We only support --src-prefix and --dst-prefix don't contain a non-word character (\W) and end with '/' because we cannot distinguish the prefix from directory path.

        If the path has a tab, the patch(1) command thinks file path is characters before the tab.
        I added a dummy tab and revision when we convert git diff to svn diff.

        * Scripts/VCSUtils.pm:
        (parseGitDiffHeader):
        * Scripts/webkitperl/VCSUtils_unittest/parseDiff.pl: Update expectations for dummy revision.
        * Scripts/webkitperl/VCSUtils_unittest/parseDiffWithMockFiles.pl: Ditto.
        * Scripts/webkitperl/VCSUtils_unittest/parseGitDiffHeader.pl: Ditto.
          - Added test case for files which have space in their path and --src-prefix and --dst-prefix option.

2013-06-06  Simon Fraser  <simon.fraser@apple.com>

        Add a menu item to MiniBrowser to toggle Transparent windows
        https://bugs.webkit.org/show_bug.cgi?id=117316

        Reviewed by Anders Carlsson.
        
        Add a menu item that toggles "Transparent window" mode, which is exposed
        via private WebKit API and WebKit2 API.

        * MiniBrowser/mac/BrowserWindowController.h:
        * MiniBrowser/mac/MainMenu.xib:
        * MiniBrowser/mac/MiniBrowser_Prefix.pch:
        * MiniBrowser/mac/WK1BrowserWindowController.m:
        (-[WK1BrowserWindowController validateMenuItem:]):
        (-[WK1BrowserWindowController toggleTransparentWindow:]):
        * MiniBrowser/mac/WK2BrowserWindowController.m:
        (-[WK2BrowserWindowController validateMenuItem:]):
        (-[WK2BrowserWindowController toggleTransparentWindow:]):
        (-[WK2BrowserWindowController dumpSourceToConsole:]): Fix a crash that was seen
        when testing.

2013-06-06  Roger Fong  <roger_fong@apple.com>

        Stop copying AAS binaries into build folder.
        https://bugs.webkit.org/show_bug.cgi?id=117319.

        Rubberstamped by Darin Adler.

        * DumpRenderTree/DumpRenderTree.vcxproj/DumpRenderTree/DumpRenderTreePostBuild.cmd:

2013-06-06  Hugo Parente Lima  <hugo.lima@openbossa.org>

        Aligning build-webkit command line switch names to the WebKit flag names
        https://bugs.webkit.org/show_bug.cgi?id=117254

        Reviewed by Laszlo Gombos.

        * Scripts/webkitperl/FeatureList.pm: Rename some command line switches.

2013-06-06  Chris Fleizach  <cfleizach@apple.com>

        AX: iOS ignores ARIA progressbar elements
        https://bugs.webkit.org/show_bug.cgi?id=116727

        Reviewed by David Kilzer.

        * DumpRenderTree/ios/AccessibilityUIElementIOS.mm:
        (AccessibilityUIElement::minValue):
        (AccessibilityUIElement::maxValue):

2013-06-06  peavo@outlook.com  <peavo@outlook.com>

        [WinCairo] Fix build-webkit to build WinCairo under VS2010.
        https://bugs.webkit.org/show_bug.cgi?id=117255

        Reviewed by Daniel Bates.

        Need to update configuration names according to solution file.

        * Scripts/webkitdirs.pm:
        (determineConfiguration):
        (determinePassedConfiguration):

2013-06-06  Ryosuke Niwa  <rniwa@webkit.org>

        Remove run-performance-tests
        https://bugs.webkit.org/show_bug.cgi?id=117285

        Reviewed by Andreas Kling.
        
        Remove the script since it's not used anywhere.

        * BuildSlaveSupport/run-performance-tests: Removed.

2013-06-05  Bear Travis  <betravis@adobe.com>

        [CSS Exclusions][CSS Shapes] Split CSS Exclusions & Shapes compile & runtime flags
        https://bugs.webkit.org/show_bug.cgi?id=117172

        Reviewed by Alexandru Chiculita.

        Adding the CSS_SHAPES compile flag.

        * Scripts/webkitperl/FeatureList.pm:
        * qmake/mkspecs/features/features.pri:

2013-06-05  Brent Fulgham  <bfulgham@apple.com>

        [Windows] Unreviewed build fix. Add CRLF eol-style for DOS shell scripts; if they accidentally change
        to UNIX-style they will not execute properly.

        * DumpRenderTree/DumpRenderTree.vcxproj/DumpRenderTree/DumpRenderTreePostBuild.cmd: Added property svn:eol-style.
        * DumpRenderTree/DumpRenderTree.vcxproj/DumpRenderTree/DumpRenderTreePreBuild.cmd: Added property svn:eol-style.

2013-06-05  Roger Fong  <roger_fong@apple.com>

        Unreviewed build fix. Don't pass in --use-remote-links argument on Windows now that we use NRWT.

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

2013-06-05  Brent Fulgham  <bfulgham@apple.com>

        [Windows] Switch to NRWT
        https://bugs.webkit.org/show_bug.cgi?id=117200

        Reviewed by Anders Carlsson.

        * Scripts/run-webkit-tests:
        (useNewRunWebKitTests): No longer use old-run-webkit-tests for Windows port.

2013-06-05  Dominik Röttsches  <dominik.rottsches@intel.com>

        Unreviewed name fix after r150662

        My firstname got duplicated when fixing bug 116737.

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

2013-06-05  Raphael Kubo da Costa  <raphael.kubo.da.costa@intel.com>

        Use WEBKITOUTPUTDIR if WEBKIT_OUTPUTDIR is not present.
        https://bugs.webkit.org/show_bug.cgi?id=117244

        Reviewed by Daniel Bates.

        Fixed a regression introduced by r151196: not only does webkit.org
        still mention WEBKITOUTPUTDIR instead of WEBKIT_OUTPUTDIR, but the
        infrastructure used by ports such as GTK+ and EFL also use on it for
        things such as jhbuild.

        While everything is not fully transitioned to WEBKIT_OUTPUTDIR, read
        both environment variables.

        * Scripts/webkitdirs.pm:
        (determineBaseProductDir):

2013-06-05  Wojciech Bielawski  <w.bielawski@samsung.com>

        [GTK] Forwarding headers not generated for incremental build
        https://bugs.webkit.org/show_bug.cgi?id=117198

        Reviewed by Carlos Garcia Campos.

        * WebKitTestRunner/GNUmakefile.am: libTestRunnerInjectedBundle added to dependencies.

2013-06-05  Andras Becsi  <andras.becsi@digia.com>

        [Qt][WK2] Fix layout testing with Qt 5.1
        https://bugs.webkit.org/show_bug.cgi?id=117203

        Reviewed by Jocelyn Turcotte.

        With Qt 5.1 synchronous requests via QNetworkAccessManager do not
        go into loading state but directly call handler functions for
        finished state instead of relying on a connection.
        Our wrapper QQuickView uses a data URI scheme to create the root
        item for testing which results in a synchronous request when loading
        the QML data, therefore the state of the QQuickWindow immediately
        becomes Ready.
        Since the final initialization of the root item depended on the
        emission of QQuickView::statusChanged(QQuickView::Ready) we ended
        up with a partially initialized wrapper window, thus most of our
        layout tests were failing.
        For compatibility with pre-5.1 Qt versions keep the old behaviour
        in case the WrapperWindow is not ready in the constructor yet.

        * WebKitTestRunner/qt/PlatformWebViewQt.cpp:
        (WTR::WrapperWindow::WrapperWindow):
        * TestWebKitAPI/qt/PlatformWebViewQt.cpp:
        (TestWebKitAPI::WrapperWindow::WrapperWindow):

2013-06-05  Dariusz Frankiewicz  <d.frankiewic@samsung.com>

        Bad value in tests counter at new-run-webkit-tests
        in --debug-rwt-logging mode
        https://bugs.webkit.org/show_bug.cgi?id=116858

        Reviewed by Dirk Pranke.

        Fix by moving counter incrementation, from after printing line,
        to before printing. Also changed variable name.

        * Scripts/webkitpy/layout_tests/controllers/layout_test_runner.py:
        (LayoutTestRunner.run_tests):
        * Scripts/webkitpy/layout_tests/controllers/layout_test_runner_unittest.py:
        (FakePrinter):
        * Scripts/webkitpy/layout_tests/views/printing.py:
        (Printer.__init__):
        (Printer._test_status_line):
        (Printer.print_started_test):
        (Printer.print_finished_test):
        * Scripts/webkitpy/test/printer.py:
        (Printer.__init__):
        (Printer.print_finished_test):
        (Printer._test_line):
        (Printer.print_result):

2013-06-05  Zan Dobersek  <zdobersek@igalia.com>

        Move MemoryInfo under window.internals
        https://bugs.webkit.org/show_bug.cgi?id=117197

        Reviewed by Ryosuke Niwa.

        * GNUmakefile.am: Add the testing/MemoryInfo.(h|idl) files and the generated targets to
        the Automake build
        * Scripts/webkitperl/filter-build-webkit_unittest/shouldIgnoreLine_unittests.pl: List the
        testing/MemoryInfo.idl file instead of page/MemoryInfo.idl.

2013-06-03  Roger Fong  <roger_fong@apple.com>

        Remove uses of VS2005 scripts, executables and associated environment variables from scripts.
        <rdar://problem/14042021>.

        Reviewed by Brent Fulgham.

        * Scripts/build-api-tests:
        * Scripts/build-dumprendertree:
        * Scripts/build-webkit:
        * Scripts/update-webkit-dependency:
        * Scripts/update-webkit-support-libs:
        * Scripts/webkitdirs.pm:
        (determineBaseProductDir):
        (setupAppleWinEnv):
        (setupCygwinEnv):

2013-06-04  Brent Fulgham  <bfulgham@apple.com>

        [Windows] NRWT is not putting crash logs in proper place (corrections)
        https://bugs.webkit.org/show_bug.cgi?id=117212

        Reviewed by Dirk Pranke.

        * Scripts/webkitpy/common/system/crashlogs.py:
        (CrashLogs.__init__): Accept a result directory argument in constructor.
        (CrashLogs.find_newest_log): Don't require 'port' argument anymore.
        (CrashLogs._find_newest_log_win): No longer use 'port' argument.
        * Scripts/webkitpy/common/system/crashlogs_unittest.py:
        (CrashLogsTest.test_find_log_win): Simplify test.
        * Scripts/webkitpy/common/system/executive.py:
        (Executive.running_pids): Handle "win32" case separately from "cygwin" case.
        * Scripts/webkitpy/port/win.py:
        (WinPort._get_crash_log): No longer require 'port' argument.

2013-06-04  Ryosuke Niwa  <rniwa@webkit.org>

        Build fix after r150592. We need to disable \2 shouldn't be treated as an escape character.

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

2013-06-04  Greg Hughes  <ghughes@apple.com>

        Add "VisibleOnly" key to search predicate
        https://bugs.webkit.org/show_bug.cgi?id=115491

        Reviewed by Chris Fleizach.

        Added support for accessibility clients to use the search predicate to find only visible elements

        * DumpRenderTree/AccessibilityUIElement.cpp:
        (uiElementForSearchPredicateCallback):
        * DumpRenderTree/AccessibilityUIElement.h:
        (AccessibilityUIElement):
        * DumpRenderTree/ios/AccessibilityUIElementIOS.mm:
        (AccessibilityUIElement::uiElementForSearchPredicate):
        * DumpRenderTree/mac/AccessibilityUIElementMac.mm:
        (AccessibilityUIElement::uiElementForSearchPredicate):
        * WebKitTestRunner/InjectedBundle/AccessibilityUIElement.cpp:
        (WTR::AccessibilityUIElement::uiElementForSearchPredicate):
        * WebKitTestRunner/InjectedBundle/AccessibilityUIElement.h:
        (AccessibilityUIElement):
        * WebKitTestRunner/InjectedBundle/Bindings/AccessibilityUIElement.idl:
        * WebKitTestRunner/InjectedBundle/mac/AccessibilityUIElementMac.mm:
        (WTR::AccessibilityUIElement::uiElementForSearchPredicate):

2013-06-04  Brent Fulgham  <bfulgham@apple.com>

        [Windows] Unreviewed build fix.  The last check-in lost CR/LF endings on the batch file,
        causing build failure.

        * DumpRenderTree/DumpRenderTree.vcxproj/DumpRenderTree/DumpRenderTreePostBuild.cmd: Revert to
        DOS-style CR/LF endings.

2013-06-04  Brent Fulgham  <bfulgham@apple.com>

        [Windows] Unreviewed test correction.

        * DumpRenderTree/DumpRenderTree.vcxproj/DumpRenderTree/DumpRenderTreePostBuild.cmd: Also copy the
        QuartzCore dll's, which are needed by TestWebKitAPI.
        * TestWebKitAPI/win/main.cpp: Declare proper manfifest dependencies to ensure TestWebKitAPI built
        with VS2010 will run when linked against VS2005 support libraries.

2013-06-04  Christophe Dumez  <ch.dumez@sisa.samsung.com>

        Automatically generate WorkerContext constructor attributes
        https://bugs.webkit.org/show_bug.cgi?id=117183

        Reviewed by Kentaro Hara.

        Pass new --workerContextConstructorsFile to preprocess-idl.pl for bindings
        tests.

        * Scripts/webkitpy/bindings/main.py:
        (BindingsTests.generate_supplemental_dependency):
        (BindingsTests.main):

2013-06-04  Ryuan Choi  <ryuan.choi@samsung.com>

        [EFL] File dialog of MiniBrowser have broken background.
        https://bugs.webkit.org/show_bug.cgi?id=117189

        Reviewed by Christophe Dumez.

        * MiniBrowser/efl/main.c:
        (on_file_chooser_request): Added elm_bg for elm_win of file chooser.

2013-06-04  Christophe Dumez  <ch.dumez@sisa.samsung.com>

        [WKTR][WTK] Undefined symbols in libTestRunnerInjectedBundle.so after r151124
        https://bugs.webkit.org/show_bug.cgi?id=117184

        Reviewed by Gyuyoung Kim.

        Add ATK stubs for mathPostscriptsDescription() and mathPrescriptsDescription() so
        that we don't have undefined symbols in libTestRunnerInjectedBundle.so.

        * WebKitTestRunner/InjectedBundle/atk/AccessibilityUIElementAtk.cpp:
        (WTR::AccessibilityUIElement::mathPostscriptsDescription):
        (WTR::AccessibilityUIElement::mathPrescriptsDescription):

2013-06-03  Simon Pena  <simon.pena@samsung.com>

        validate-committer-lists script is now outdated and does not work
        https://bugs.webkit.org/show_bug.cgi?id=115860

        Reviewed by Brent Fulgham.

        The script validate-committer-lists was outdated, still using the deprecated log
        system and having the old addresses for the mailing lists, as well as still referring
        to committers.py, after this was renamed to contributors.json. This patch fixes that
        so it can be used again.

        * Scripts/validate-committer-lists: Replace calls to log and error with the
        new logging mechanism, fix the URLs for the mailing lists, and fix the mentions
        to committers.py, which should be contributors.json.
        (CommitterListFromMailingList):
        (CommitterListFromMailingList.check_for_emails_missing_from_list):
        (CommitterListFromGit._fetch_authors_and_last_commit_time_from_git_log):
        (CommitterListFromGit._fill_in_emails_for_old_logins):
        (CommitterListFromGit.print_committers_missing_from_committer_list):

2013-06-03  Dirk Pranke  <dpranke@chromium.org>

        add a script to dump the tests run most recently by a given worker
        https://bugs.webkit.org/show_bug.cgi?id=116571

        Reviewed by Brent Fulgham.

        The tests_run*.txt results files in layout-test-results/ were removed
        in r137356, in favor of collecting more data about how the tests were
        run and compressing it and storing it in stats.json. However, it was
        nice to just be able to look at a flat text file.

        This script will extract the tests run by a given worker from a
        given stats.json file, and should help to address that.

        * Scripts/dump-webkit-tests-run: Added.
        (main):
        (convert_trie_to_flat_paths):

2013-06-03  Brent Fulgham  <bfulgham@apple.com>

        [Windows] NRWT is not putting crash logs in proper place
        https://bugs.webkit.org/show_bug.cgi?id=117098

        Reviewed by Ryosuke Niwa.

        Provide windows-specific overloads for various Port features needed to create and capture
        crash logs.  This change makes it possible to view crash logs (when created) as part of the
        summary report at the end of the NRWT run.

        * Scripts/webkitpy/common/system/crashlogs.py:
        (CrashLogs.find_newest_log): Add support for win32 crash logs
        (CrashLogs._find_newest_log_win): Added
        * Scripts/webkitpy/common/system/crashlogs_unittest.py:
        (make_mock_crash_report_win): Added
        (CrashLogsTest.test_find_log_win): Added.
        * Scripts/webkitpy/common/system/executive.py:
        (Executive.running_pids): Add support for Cygwin win32 crash logs
        * Scripts/webkitpy/common/system/executive_mock.py:
        (MockExecutive.__init__):
        * Scripts/webkitpy/common/system/filesystem_unittest.py:
        (RealFileSystemTest.test_read_and_write_file): Add tests for
        malformed ascii/utf8 handling (i.e., Windows log files)
        * Scripts/webkitpy/port/base.py:
        (Port.find_system_pid): Added
        * Scripts/webkitpy/port/server_process.py:
        (ServerProcess._start): Gather windows PIDs to match up with Cygwin PIDs
        * Scripts/webkitpy/port/win.py:
        (WinPort.setup_crash_log_saving): Don't open windows shell (which might get stuck waiting
        for user to hit enter.
        (WinPort._get_crash_log): Added
        (WinPort.look_for_new_crash_logs): Added
        (WinPort.find_system_pid): Added
        * Scripts/webkitpy/port/win_unittest.py:
        (WinPortTest.test_get_crash_log): Added test

2013-06-03  Eduardo Lima Mitev  <elima@igalia.com>

        [EFL] Add ATK version 2.8.0 to efl jhbuild moduleset
        https://bugs.webkit.org/show_bug.cgi?id=116726

        Reviewed by Gyuyoung Kim.

        Current version of ATK in efl-ews environment is 2.4.0 and is taken from
        the platform (it is not listed in jhbuild moduleset). That version is
        old-ish and contain deprecated symbols and missing API, that are blocking
        patches in other ports (gtk). This patch adds ATK version 2.8.0 to efl
        moduleset, which is the same version the gtk port uses.

        See bug https://bugs.webkit.org/show_bug.cgi?id=115647 for more details on
        why this is needed.

        * efl/jhbuild.modules: Adds ATK module as dependency

2013-06-03  Erik van Pienbroek  <epienbro@fedoraproject.org>

        [GTK] Respect PKG_CONFIG env variable when generating gtk-doc
        https://bugs.webkit.org/show_bug.cgi?id=117168

        Reviewed by Martin Robinson.

        The tool generate-gtkdoc internally calls pkg-config.
        When cross-compiling it shouldn't use pkg-config, but
        it should use the pkg-config which was detected by
        the ./configure script (for example this can be
        i686-w64-mingw32-pkg-config when cross-compiling)

        * GNUmakefile.am:
        * gtk/gtkdoc.py:
        (PkgConfigGTKDoc.__init__):

2013-06-03  Brent Fulgham  <bfulgham@apple.com>

        [Windows] Unreviewed build fix.

        * TestWebKitAPI/win/main.cpp: Embed proper manifest information to
        allow VS2010 builds to use VS2005 runtime libraries as needed.

2013-06-03  Roger Fong  <roger_fong@apple.com>

        Nuke VS2005 files from the tree.
        <rdar://problem/14042021>.

        Rubberstamped by Brent Fulgham.

        * DumpRenderTree/TestNetscapePlugIn/win/TestNetscapePlugin.def: Removed.
        * DumpRenderTree/TestNetscapePlugIn/win/TestNetscapePlugin.rc: Removed.
        * DumpRenderTree/TestNetscapePlugIn/win/TestNetscapePlugin.vcproj: Removed.
        * DumpRenderTree/TestNetscapePlugIn/win/TestNetscapePluginCommon.vsprops: Removed.
        * DumpRenderTree/TestNetscapePlugIn/win/TestNetscapePluginDebug.vsprops: Removed.
        * DumpRenderTree/TestNetscapePlugIn/win/TestNetscapePluginDebugAll.vsprops: Removed.
        * DumpRenderTree/TestNetscapePlugIn/win/TestNetscapePluginDebugCairoCFLite.vsprops: Removed.
        * DumpRenderTree/TestNetscapePlugIn/win/TestNetscapePluginPostBuild.cmd: Removed.
        * DumpRenderTree/TestNetscapePlugIn/win/TestNetscapePluginPreBuild.cmd: Removed.
        * DumpRenderTree/TestNetscapePlugIn/win/TestNetscapePluginProduction.vsprops: Removed.
        * DumpRenderTree/TestNetscapePlugIn/win/TestNetscapePluginRelease.vsprops: Removed.
        * DumpRenderTree/TestNetscapePlugIn/win/TestNetscapePluginReleaseCairoCFLite.vsprops: Removed.
        * DumpRenderTree/TestNetscapePlugIn/win/resource.h: Removed.
        * DumpRenderTree/win/DumpRenderTree.vcproj: Removed.
        * DumpRenderTree/win/DumpRenderTreeApple.vsprops: Removed.
        * DumpRenderTree/win/DumpRenderTreeCFLite.vsprops: Removed.
        * DumpRenderTree/win/DumpRenderTreeCairo.vsprops: Removed.
        * DumpRenderTree/win/DumpRenderTreeCommon.vsprops: Removed.
        * DumpRenderTree/win/DumpRenderTreeDebug.vsprops: Removed.
        * DumpRenderTree/win/DumpRenderTreeDebugAll.vsprops: Removed.
        * DumpRenderTree/win/DumpRenderTreeDebugCairoCFLite.vsprops: Removed.
        * DumpRenderTree/win/DumpRenderTreeLauncher.vcproj: Removed.
        * DumpRenderTree/win/DumpRenderTreeLauncherCommon.vsprops: Removed.
        * DumpRenderTree/win/DumpRenderTreeLauncherDebug.vsprops: Removed.
        * DumpRenderTree/win/DumpRenderTreeLauncherDebugAll.vsprops: Removed.
        * DumpRenderTree/win/DumpRenderTreeLauncherDebugCairoCFLite.vsprops: Removed.
        * DumpRenderTree/win/DumpRenderTreeLauncherProduction.vsprops: Removed.
        * DumpRenderTree/win/DumpRenderTreeLauncherRelease.vsprops: Removed.
        * DumpRenderTree/win/DumpRenderTreeLauncherReleaseCairoCFLite.vsprops: Removed.
        * DumpRenderTree/win/DumpRenderTreePostBuild.cmd: Removed.
        * DumpRenderTree/win/DumpRenderTreePreBuild.cmd: Removed.
        * DumpRenderTree/win/DumpRenderTreeProduction.vsprops: Removed.
        * DumpRenderTree/win/DumpRenderTreeRelease.vsprops: Removed.
        * DumpRenderTree/win/DumpRenderTreeReleaseCairoCFLite.vsprops: Removed.
        * DumpRenderTree/win/ImageDiff.vcproj: Removed.
        * DumpRenderTree/win/ImageDiffCommon.vsprops: Removed.
        * DumpRenderTree/win/ImageDiffDebug.vsprops: Removed.
        * DumpRenderTree/win/ImageDiffDebugAll.vsprops: Removed.
        * DumpRenderTree/win/ImageDiffDebugCairoCFLite.vsprops: Removed.
        * DumpRenderTree/win/ImageDiffLauncher.vcproj: Removed.
        * DumpRenderTree/win/ImageDiffLauncherCommon.vsprops: Removed.
        * DumpRenderTree/win/ImageDiffLauncherDebug.vsprops: Removed.
        * DumpRenderTree/win/ImageDiffLauncherDebugAll.vsprops: Removed.
        * DumpRenderTree/win/ImageDiffLauncherDebugCairoCFLite.vsprops: Removed.
        * DumpRenderTree/win/ImageDiffLauncherProduction.vsprops: Removed.
        * DumpRenderTree/win/ImageDiffLauncherRelease.vsprops: Removed.
        * DumpRenderTree/win/ImageDiffLauncherReleaseCairoCFLite.vsprops: Removed.
        * DumpRenderTree/win/ImageDiffPostBuild.cmd: Removed.
        * DumpRenderTree/win/ImageDiffPreBuild.cmd: Removed.
        * DumpRenderTree/win/ImageDiffProduction.vsprops: Removed.
        * DumpRenderTree/win/ImageDiffRelease.vsprops: Removed.
        * DumpRenderTree/win/ImageDiffReleaseCairoCFLite.vsprops: Removed.
        * DumpRenderTree/win/ImageDiffWinCairoCommon.vsprops: Removed.
        * Scripts/pdevenv: Removed.
        * TestWebKitAPI/win/TestWebKitAPI.vcproj: Removed.
        * TestWebKitAPI/win/TestWebKitAPIPostBuild.cmd: Removed.
        * TestWebKitAPI/win/TestWebKitAPIPreBuild.cmd: Removed.
        * WebKitLauncherWin: Removed.
        * WebKitLauncherWin/Resource.h: Removed.
        * WebKitLauncherWin/WebKitLauncherWin.cpp: Removed.
        * WebKitLauncherWin/WebKitLauncherWin.rc: Removed.
        * WebKitLauncherWin/WebKitLauncherWin.vcproj: Removed.
        * WebKitLauncherWin/WebKitLauncherWinCommon.vsprops: Removed.
        * WebKitLauncherWin/WebKitLauncherWinDebug.vsprops: Removed.
        * WebKitLauncherWin/WebKitLauncherWinDebugAll.vsprops: Removed.
        * WebKitLauncherWin/WebKitLauncherWinDebugCairoCFLite.vsprops: Removed.
        * WebKitLauncherWin/WebKitLauncherWinProduction.vsprops: Removed.
        * WebKitLauncherWin/WebKitLauncherWinRelease.vsprops: Removed.
        * WebKitLauncherWin/WebKitLauncherWinReleaseCairoCFLite.vsprops: Removed.
        * WebKitLauncherWin/webkit.ico: Removed.
        * WinLauncher/WinLauncher.ico: Removed.
        * WinLauncher/WinLauncher.rc: Removed.
        * WinLauncher/WinLauncher.vcproj: Removed.
        * WinLauncher/WinLauncherCommon.vsprops: Removed.
        * WinLauncher/WinLauncherDebug.vsprops: Removed.
        * WinLauncher/WinLauncherDebugAll.vsprops: Removed.
        * WinLauncher/WinLauncherDebugCairoCFLite.vsprops: Removed.
        * WinLauncher/WinLauncherLauncher.rc: Removed.
        * WinLauncher/WinLauncherLauncher.vcproj: Removed.
        * WinLauncher/WinLauncherLauncherCommon.vsprops: Removed.
        * WinLauncher/WinLauncherLauncherDebug.vsprops: Removed.
        * WinLauncher/WinLauncherLauncherDebugAll.vsprops: Removed.
        * WinLauncher/WinLauncherLauncherDebugCairoCFLite.vsprops: Removed.
        * WinLauncher/WinLauncherLauncherProduction.vsprops: Removed.
        * WinLauncher/WinLauncherLauncherRelease.vsprops: Removed.
        * WinLauncher/WinLauncherLauncherReleaseCairoCFLite.vsprops: Removed.
        * WinLauncher/WinLauncherLauncherResource.h: Removed.
        * WinLauncher/WinLauncherPostBuild.cmd: Removed.
        * WinLauncher/WinLauncherPreBuild.cmd: Removed.
        * WinLauncher/WinLauncherProduction.vsprops: Removed.
        * WinLauncher/WinLauncherRelease.vsprops: Removed.
        * WinLauncher/WinLauncherReleaseCairoCFLite.vsprops: Removed.
        * WinLauncher/small.ico: Removed.
        * record-memory-win: Removed.
        * record-memory-win/main.cpp: Removed.
        * record-memory-win/record-memory-win-common.vsprops: Removed.
        * record-memory-win/record-memory-win.vcproj: Removed.
        * record-memory-win/record-memory-winDebug.vsprops: Removed.
        * record-memory-win/record-memory-winDebugAll.vsprops: Removed.
        * record-memory-win/record-memory-winDebugCairoCFLite.vsprops: Removed.
        * record-memory-win/record-memory-winProduction.vsprops: Removed.
        * record-memory-win/record-memory-winRelease.vsprops: Removed.
        * record-memory-win/record-memory-winReleaseCairoCFLite.vsprops: Removed.

2013-06-03  Chris Fleizach  <cfleizach@apple.com>

        AX: MathML multiscripts not exposed in Accessibility
        https://bugs.webkit.org/show_bug.cgi?id=115069

        Reviewed by Tim Horton.

        Add methods to help output components of math multiscripts for accessibility.

        * DumpRenderTree/AccessibilityUIElement.cpp:
        (mathPostscriptsDescriptionCallback):
        (mathPrescriptsDescriptionCallback):
        (AccessibilityUIElement::getJSClass):
        * DumpRenderTree/AccessibilityUIElement.h:
        (AccessibilityUIElement):
        * DumpRenderTree/mac/AccessibilityUIElementMac.mm:
        (convertMathMultiscriptPairsToString):
        (AccessibilityUIElement::mathPostscriptsDescription):
        (AccessibilityUIElement::mathPrescriptsDescription):
        * WebKitTestRunner/InjectedBundle/AccessibilityUIElement.cpp:
        (WTR::AccessibilityUIElement::mathPostscriptsDescription):
        (WTR::AccessibilityUIElement::mathPrescriptsDescription):
        * WebKitTestRunner/InjectedBundle/AccessibilityUIElement.h:
        (AccessibilityUIElement):
        * WebKitTestRunner/InjectedBundle/Bindings/AccessibilityUIElement.idl:
        * WebKitTestRunner/InjectedBundle/mac/AccessibilityUIElementMac.mm:
        (WTR::_convertMathMultiscriptPairsToString):
        (WTR::AccessibilityUIElement::mathPostscriptsDescription):
        (WTR::AccessibilityUIElement::mathPrescriptsDescription):

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

        Unreviewed, rolling out r151109.
        http://trac.webkit.org/changeset/151109
        https://bugs.webkit.org/show_bug.cgi?id=117145

        "Plugins in WK2 aren't implemented yet." (Requested by
        jturcotte on #webkit).

        * DumpRenderTree/qt/TestNetscapePlugin/TestNetscapePlugin.pro:
        * qmake/mkspecs/features/features.prf:
        * qmake/mkspecs/features/unix/default_pre.prf:

2013-05-22  Jocelyn Turcotte  <jocelyn.turcotte@digia.com>

        [Qt] Re-enable plugins on Mac.
        https://bugs.webkit.org/show_bug.cgi?id=116622

        Reviewed by Tor Arne Vestbø.

        Plugins on Mac were only enabled if !embedded but the later was set if
        QPA is enabled, which is the default since Qt 5.0.

        Remove references to 'embedded' and fix various build issues,
        PluginViewMac.mm and PluginPackageMac.cpp haven't been compiled since a few
        months.

        * DumpRenderTree/qt/TestNetscapePlugin/TestNetscapePlugin.pro:
        * qmake/mkspecs/features/features.prf:
        * qmake/mkspecs/features/unix/default_pre.prf:

2013-06-03  Krzysztof Czech  <k.czech@samsung.com>

        [GTK][WK2] accessibility/placeholder.html is failing
        https://bugs.webkit.org/show_bug.cgi?id=106344

        Reviewed by Gyuyoung Kim.

        Adds support for retrieving attribute value.

        * WebKitTestRunner/InjectedBundle/atk/AccessibilityUIElementAtk.cpp:
        (WTR::coreAttributeToAtkAttribute):
        (WTR::AccessibilityUIElement::stringAttributeValue):

2013-06-01  Tim Horton  <timothy_horton@apple.com>

        Add a preferred email address and "expertise" for me.

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

2013-05-31  Roger Fong  <roger_fong@apple.com>

        Unreviewed. Make windows test bots search in the correct directory for build output.

        * BuildSlaveSupport/build.webkit.org-config/master.cfg:
        (RunWebKitTests.start):
        * Scripts/webkitdirs.pm:
        (determineConfigurationProductDir):

2013-05-31  Roger Fong  <roger_fong@apple.com>

        Unreviewed. Windows build fix...

        * BuildSlaveSupport/built-product-archive:
        (createZip):

2013-05-31  Roger Fong  <roger_fong@apple.com>

        Unreviewed. Windows build fix. One more time!

        * BuildSlaveSupport/built-product-archive:
        (archiveBuiltProduct):
        (extractBuiltProduct):

2013-05-31  Roger Fong  <roger_fong@apple.com>

        Unreviewed. Windows build fix.

        * Scripts/build-webkit:

2013-05-31  Roger Fong  <roger_fong@apple.com>

        Unreviewed. Windows build fix.

        * Scripts/build-webkit:

2013-05-31  Roger Fong  <roger_fong@apple.com>

        Make build-webkit output VCExpress 2010 build logs properly.
        https://bugs.webkit.org/show_bug.cgi?id=117096

        Reviewed by Brent Fulgham.

        Make it so that output from VCExpress is always printed to console.
        Get build log results from AssembleBuildLogs project output.
        We don't need those old VCExpress scripts anymore either. 

        * Scripts/build-webkit:
        * Scripts/print-msvc-project-dependencies: Removed.
        * Scripts/print-vse-failure-logs: Removed.

2013-05-31  Brent Fulgham  <bfulgham@apple.com>

        [Windows] Use WinLauncher to display LayoutTest results
        https://bugs.webkit.org/show_bug.cgi?id=117085

        Reviewed by Oliver Hunt.

        * Scripts/webkitdirs.pm:
        (runSafari): Use WinLauncher to display content
        * WinLauncher/WinLauncher.cpp:
        (dllLauncherEntryPoint): Check for URL argument.

2013-05-31  Roger Fong  <roger_fong@apple.com>

        Unreviewed. Modify AssembleBuildLogs project to WebKit solution in preparation for moving buildbots to VCExpress 2010.

        * win/AssembleBuildLogs/AssembleLogs.cmd:

2013-05-31  Commit Queue  <commit-queue@webkit.org>

        Unreviewed, rolling out r151022.
        http://trac.webkit.org/changeset/151022
        https://bugs.webkit.org/show_bug.cgi?id=117084

        Also breaks build by introducing duplicate symbols (Requested
        by bfulgham on #webkit).

        * TestWebKitAPI/Configurations/TestWebKitAPICommon.vsprops:

2013-05-31  Brent Fulgham  <bfulgham@apple.com>

        [Windows] Unreviewed build fix to NRWT

        * Scripts/webkitpy/port/win.py:
        (WinPort.create_debugger_command_file): Use proper argument for _filesystem.write_text_file.

2013-05-31  Brent Fulgham  <bfulgham@apple.com>

        [Windows] Unreviewed build fix after r151012

        * TestWebKitAPI/Configurations/TestWebKitAPICommon.vsprops: Add dependency on
        WTF library to support SHA tests

2013-05-31  Brent Fulgham  <bfulgham@apple.com>

        [Windows] Unreviewed build fix after r151012

        * TestWebKitAPI/Tests/WTF/MD5.cpp: Include <wtf/StringExtras.h> to provide
        snprintf definition for Windows.

2013-05-31  Zan Dobersek  <zdobersek@igalia.com>

        Move MD5, SHA1 unit tests from WTF to TestWebKitAPI
        https://bugs.webkit.org/show_bug.cgi?id=116445

        Reviewed by Benjamin Poulain.

        Add the MD5 and SHA1 unit tests that were previously located inside WTF.

        * TestWebKitAPI/CMakeLists.txt:
        * TestWebKitAPI/GNUmakefile.am:
        * TestWebKitAPI/TestWebKitAPI.vcxproj/TestWebKitAPI.vcxproj:
        * TestWebKitAPI/TestWebKitAPI.vcxproj/TestWebKitAPI.vcxproj.filters:
        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WTF/MD5.cpp: Added.
        (TestWebKitAPI):
        (TestWebKitAPI::expectMD5):
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/WTF/SHA1.cpp: Added.
        (TestWebKitAPI):
        (TestWebKitAPI::expectSHA1):
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/WTF/WTF.pro:
        * TestWebKitAPI/win/TestWebKitAPI.vcproj:

2013-05-30  Brent Fulgham  <bfulgham@apple.com>

        [Windows] Unreviewed build correction.

        * Scripts/webkitpy/port/win.py:
        (WinPort.create_debugger_command_file): The directory needs to be
        a string, not a temporary directory object.

2013-05-30  Brent Fulgham  <bfulgham@apple.com>

        [Windows] NRWT doesn't save crash logs on Apple's Windows port.
        https://bugs.webkit.org/show_bug.cgi?id=76935

        Reviewed by Ryosuke Niwa.

        Extend the WinPort class with commands to set and clean up various registry
        values needed to invoke the correct debugger to get crash files.

        * Scripts/webkitpy/port/win.py:
        (WinPort): Added global caches for registry keys and settings
        (WinPort._ntsd_location): Added
        (WinPort.create_debugger_command_file): Added
        (WinPort.read_registry_string): Added
        (WinPort.write_registry_string): Added
        (WinPort.setup_crash_log_saving): Added
        (WinPort.restore_crash_log_saving): Added
        (WinPort.setup_test_run): Added overload to add registry settings.
        (WinPort.clean_up_test_run): Added overload to clean up registry settings.

2013-05-30  Roger Fong  <roger_fong@apple.com>

        Get rid of JavaScript exports file on AppleWin port.
        https://bugs.webkit.org/show_bug.cgi?id=117050.

        Reviewed by Darin Adler.

        Start linking in WTF.lib now that it's a shared library.

        * DumpRenderTree/DumpRenderTree.vcxproj/DumpRenderTree/DumpRenderTreeCommon.props:
        * DumpRenderTree/DumpRenderTree.vcxproj/ImageDiff/ImageDiffCommon.props:
        * TestWebKitAPI/TestWebKitAPI.vcxproj/TestWebKitAPICommon.props:

2013-05-30  Ryosuke Niwa  <rniwa@webkit.org>

        Web Inspector: tests in PerformanceTests/inspector/ are timing out
        https://bugs.webkit.org/show_bug.cgi?id=77024

        Reviewed by Andreas Kling.

        Remove inspector performance tests since they have been disabled for ages,
        and they don't use the standard parser-style performance output.

        It's adding a lot of code complexity to our infrastructure.

        * Scripts/webkitpy/performance_tests/perftest.py:
        (SingleProcessPerfTest.__init__):
        (PerfTestFactory):
        * Scripts/webkitpy/performance_tests/perftest_unittest.py:
        (TestPerfTestFactory.test_regular_test):
        * Scripts/webkitpy/performance_tests/perftestsrunner_integrationtest.py:
        (TestDriver.run_test):
        (MainTest.run_test):
        (MainTest._tests_for_runner):
        (MainTest.test_run_test_set_kills_drt_per_run):
        (MainTest._test_run_with_json_output):
        (MainTest):
        (MainTest.test_run_with_upload_json_should_generate_perf_webkit_json):

2013-05-30  Ryosuke Niwa  <rniwa@webkit.org>

        Remove requires_http_server as Chromium Android was the only port that needed this
        https://bugs.webkit.org/show_bug.cgi?id=117018

        Reviewed by Benjamin Poulain.

        Removed the unused code that existed for Chromium Android port.

        * Scripts/webkitpy/layout_tests/controllers/layout_test_runner.py:
        (LayoutTestRunner.run_tests):
        (LayoutTestRunner._handle_finished_test_list):
        * Scripts/webkitpy/layout_tests/controllers/manager.py:
        (Manager._run_tests):
        * Scripts/webkitpy/performance_tests/perftestsrunner.py:
        (PerfTestsRunner._collect_tests):
        (PerfTestsRunner.run):
        * Scripts/webkitpy/port/base.py:
        (Port.to.start_helper):
        * Scripts/webkitpy/port/base_unittest.py:
        (PortTest.test_build_path):

2013-05-29  Ruth Fong  <ruth_fong@apple.com>

        prepare-Changelog should not be generating namespace-only or class-name-only lines like "(WebCore):"
        https://bugs.webkit.org/show_bug.cgi?id=113221

        Reviewed by Ryosuke Niwa.

        Teach prepare-Changelog to not list the names of modified namespaces, 
        classes, or structs in C++ files. Thus, if a change is made 
        within a namespace/class/struct yet outside a function, it will 
        not be reflected in the ChangeLog entry. 
        See https://bugs.webkit.org/show_bug.cgi?id=113221#c8 
        for more details on how ChangeLog entries are affected.

        * Scripts/prepare-ChangeLog:
        (get_function_line_ranges_for_cpp): 
        (delete_namespaces_from_ranges_for_cpp): Added.
        (is_function_in_namespace): Added.
        * Scripts/webkitperl/prepare-ChangeLog_unittest/resources/cpp_unittests-expected.txt: Updated
        to reflect revised definition of a function (i.e. excludes namespaces, classes, structs)

2013-05-29  Praveen R Jadhav  <praveen.j@samsung.com>

        Cleanup AudioSourceNode.idl from WebKit build.
        https://bugs.webkit.org/show_bug.cgi?id=116905.

        Reviewed by Darin Adler.

        AudioSourceNode.idl is not part of WebAudio Specifications anymore.
        AudioNode is inherited directly in all the audio source nodes.

        * Scripts/webkitperl/filter-build-webkit_unittest/shouldIgnoreLine_unittests.pl:

2013-05-29  Andrew Lo  <anlo@rim.com>

        Add Andrew Lo to contributors.json
        https://bugs.webkit.org/show_bug.cgi?id=116981

        Reviewed by Rob Buis.

        Adding Andrew Lo to contributors.json.

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

2013-05-29  Adenilson Cavalcanti  <cavalcantii@gmail.com>

        Unreviewed. Adding myself as a committer.

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

2013-05-29  Marcelo Lira  <marcelo.lira@openbossa.org>

        [WK2][CoordinatedGraphics][EFL] WKViewUserViewportToContents() function doesn't do what it says
        https://bugs.webkit.org/show_bug.cgi?id=116683

        Reviewed by Noam Rosenthal.

        A coordinates conversion test for WKViewUserViewportToContents was
        added to WebKit2 API tests.

        * TestWebKitAPI/PlatformEfl.cmake:
        * TestWebKitAPI/Tests/WebKit2/CoordinatedGraphics/WKViewUserViewportToContents.cpp: Added.
        (TestWebKitAPI):
        (TestWebKitAPI::TEST):

2013-05-29  Yong Li  <yong.li.webkit@outlook.com>

        Unreviewed. Update my info.

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

2013-05-29  Dongseong Hwang  <dongseong.hwang@intel.com>

        Unreviewed. Add myself as committer in contributors.json.

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

2013-05-29  Carlos Garcia Campos  <cgarcia@igalia.com>

        Unreviewed. Fix make distcheck.

        * TestWebKitAPI/GNUmakefile.am: Add WebCoreLayer.a to
        DISTCLEANFILES.

2013-05-29  Mary Wu  <mawu@blackberry.com>

        Unreviewed: update my email address in contributors.json.

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

2013-05-29  Kalyan Kondapally  <kalyan.kondapally@intel.com>

        Unreviewed: Adding myself to committers list.

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

2013-05-28  Arpita Bahuguna  <a.bah@samsung.com>

        Unreviewed: Adding myself to committers list.

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

2013-05-28  Brent Fulgham  <bfulgham@webkit.org>

        [Windows] Many CSS2.1 tests fail under NRWT.
        https://bugs.webkit.org/show_bug.cgi?id=75707

        Reviewed by Darin Adler.

        * DumpRenderTree/win/DumpRenderTree.cpp:
        (findFontFallback): Added
        (addFontFallbackIfPresent): Added
        (removeFontFallbackIfPresent): Added
        (runTest): Set up/remove font fallbacks when needed.

2013-05-28  Brent Fulgham  <bfulgham@apple.com>

        [Windows] NRWT reports failure for 'mac' test cases.
        https://bugs.webkit.org/show_bug.cgi?id=116698

        Reviewed by Ryosuke Niwa.

        The Windows port falls back to the Mac port for many test results,
        and so adds the mac and mac-wk2 to its set of fallbacks.
        Unfortunately, NRWT thinks that this means that tests in these
        folders should be executed, resulting in many failures on
        Windows.

        This change overloads the '_tests_for_other_platforms' method
        to return a subset of the result fallback list so that we do
        not attempt to execute Mac tests on Windows.

        * Scripts/webkitpy/port/base.py:
        (Port.test_search_path): Added. Defaults to just calling the
        baseline_search_path method, which is how most ports behave.
        (Port._test_for_other_platforms): Modified to call the new
        test_search_path method.

        * Scripts/webkitpy/port/win.py:
        (WinPort.test_search_path): Added custom overload. Strips
        out mac-specific test paths.

2013-05-28  Martin Robinson  <mrobinson@igalia.com>

        Fix GTK+ CMake build

        * MiniBrowser/gtk/CMakeLists.txt: After r150336, the name of the WebKit2
        library target is simply "WebKit2."

2013-05-28  Zan Dobersek  <zdobersek@igalia.com>

        [webkitpy] Explicitly specify the reference file extensions
        https://bugs.webkit.org/show_bug.cgi?id=116333

        Reviewed by Benjamin Poulain.

        Explicitly specify the extensions that are valid for the reference files. This helps to differentiate
        between valid reference files required by reftests and text baselines that have the same extension as
        potential test files (specifically the current MHTML tests in the .mht files and the future .mht baselines
        that were until this change recognized as reference files).

        Covered by existing tests and the new test_is_reference_html_file test in webkitpy.port.base_unittest.

        * Scripts/webkitpy/port/base.py:
        (Port.reference_files): Iterate through the _supported_reference_extensions set.
        (Port): Rename the _supported_file_extensions set to _supported_test_extensions. Add the
        _supported_reference_extensions set, containing the extensions allowed for reference files.
        (Port.is_reference_html_file): Return False if the file's extension is not a supported reference file extension.
        (Port._has_supported_extension): Use _supported_test_extensions.
        * Scripts/webkitpy/port/base_unittest.py:
        (PortTest.test_is_reference_html_file): Add the unit test, testing various test cases around the
        Port.is_reference_html_file method.

2013-05-26  Ryosuke Niwa  <rniwa@webkit.org>

        Yet another WKR build fix. Sorry for the mess. It seems like I can't win today :(

        * Scripts/webkitpy/tool/commands/newcommitbot.py:
        (NewCommitBot.next_work_item):

2013-05-26  Ryosuke Niwa  <rniwa@webkit.org>

        WKR and webkitbot build fixes.

        * Scripts/webkitpy/tool/bot/irc_command.py:
        (RollChromiumDEPS.execute):
        * Scripts/webkitpy/tool/commands/newcommitbot.py:
        (NewCommitBot.next_work_item):

2013-05-26  Ryosuke Niwa  <rniwa@webkit.org>

        roll-chromium-deps doesn't repeat the full name.

        Rubber-stamped by Andreas Kling.

        * Scripts/webkitpy/tool/bot/irc_command.py:
        (RollChromiumDEPS.execute):

2013-05-25  Ryosuke Niwa  <rniwa@webkit.org>

        Revert another erroneous change.

        * Scripts/webkitpy/tool/commands/newcommitbot.py:
        (NewCommitBot.next_work_item):

2013-05-25  Ryosuke Niwa  <rniwa@webkit.org>

        Revert an erroneous change.

        * Scripts/webkitpy/tool/commands/sheriffbot.py:
        (SheriffBot):

2013-05-25  Ryosuke Niwa  <rniwa@webkit.org>

        Some build fixes for WKR and webkitbot.

        * Scripts/webkitpy/tool/bot/ircbot_unittest.py:
        (IRCBotTest.test_help):
        * Scripts/webkitpy/tool/commands/newcommitbot.py:
        (Agent):
        (Agent.__init__):
        (Agent.name):
        (NewCommitBot):
        (NewCommitBot.begin_work_queue):
        (NewCommitBot.next_work_item):
        * Scripts/webkitpy/tool/commands/sheriffbot.py:
        (SheriffBot):

2013-05-25  Ryosuke Niwa  <rniwa@webkit.org>

        Teach webkitbot and WKR how to respond to yt?
        https://bugs.webkit.org/show_bug.cgi?id=116775

        Reviewed by Andreas Kling.

        * Scripts/webkitpy/tool/bot/irc_command.py:
        (Hi): Fixed the usage string.
        (Hi.execute): Made it more generic so that it works in WKR.
        (YouThere): Added.
        (YouThere.execute): Added.
        * Scripts/webkitpy/tool/commands/newcommitbot.py:

2013-05-25  Simon Fraser  <simon.fraser@apple.com>

        Try to fix the EFL build.
        
        * DumpRenderTree/efl/TestRunnerEfl.cpp:
        (TestRunner::setPageVisibility):

2013-05-25  Simon Fraser  <simon.fraser@apple.com>

        Unprefix Page Visibility API
        https://bugs.webkit.org/show_bug.cgi?id=102340

        Reviewed by Tim Horton.
        
        Rename "preview" state to "unloaded" state, and adjust the tests
        to test for it.

        * DumpRenderTree/mac/TestRunnerMac.mm:
        (TestRunner::setPageVisibility):
        * TestWebKitAPI/Tests/WebKit2/PageVisibilityState.cpp:
        (TestWebKitAPI::setPageVisibilityStateWithEvalContinuation):
        (TestWebKitAPI::didRunStep2StateChangeHiddenToPrerender):
        (TestWebKitAPI::didRunStep3StateChangePrerenderToUnloaded):
        (TestWebKitAPI::didRunStep4InStateUnloaded):
        * TestWebKitAPI/Tests/mac/PageVisibilityStateWithWindowChanges.html:
        * TestWebKitAPI/Tests/mac/PageVisibilityStateWithWindowChanges.mm:
        (TestWebKitAPI::PageVisibilityStateWithWindowChanges::runTest):
        * WebKitTestRunner/InjectedBundle/TestRunner.cpp:
        (WTR::TestRunner::setPageVisibility):

2013-05-24  Brent Fulgham  <bfulgham@apple.com>

        Unreviewed build fix. Don't use new NRWT logic needed
        by Windows yet. Activate (and fix test) when we cut over.

        * Scripts/webkitpy/port/driver.py:
        (Driver._setup_environ_for_driver):
        (Driver._start):

2013-05-24  Brent Fulgham  <bfulgham@apple.com>

        [Windows] Expose database storage and cache locations via preferences.
        https://bugs.webkit.org/show_bug.cgi?id=116729

        Reviewed by Tim Horton.

        Update DumpRenderTree to use CFPreferences to control where WebKit
        stores its local databases, URL caches, etc.

        * DumpRenderTree/win/DumpRenderTree.cpp:
        (libraryPathForDumpRenderTree): Added.
        (dllLauncherEntryPoint): Set up DRT-specific cache locations.
        * Scripts/webkitpy/port/base.py:
        (Port._driver_tempdir): Added (to allow port-specific overload).
        (Port._driver_tempdir_for_environment): Ditto
        * Scripts/webkitpy/port/driver.py:
        (Driver._setup_environ_for_driver): Use new overload to set
        environment variable.
        (Driver._start): Use new overload for temp directory location.
        * Scripts/webkitpy/port/win.py:
        (WinPort._driver_tempdir_for_environment): New overload to supply
        Windows path to DumpRenderTree environment (while still using
        cygwin paths for internal operations.

2013-05-24  Christophe Dumez  <ch.dumez@sisa.samsung.com>

        Remove custom code for webkitAudioContext global constructor getter
        https://bugs.webkit.org/show_bug.cgi?id=116530

        Reviewed by Geoffrey Garen.

        Update EFL's DumpRenderTree to use DumpRenderTreeSupport to toggle
        WebAudio feature instead of public ewk_view API since that API was
        removed.

        * DumpRenderTree/efl/DumpRenderTreeChrome.cpp:
        (DumpRenderTreeChrome::resetDefaultsToConsistentValues):
        * DumpRenderTree/efl/TestRunnerEfl.cpp:
        (TestRunner::overridePreference):

2013-05-24  Bem Jones-Bey  <bjonesbe@adobe.com>

        Make team.html have each contributor's area of expertise
        https://bugs.webkit.org/show_bug.cgi?id=116737

        Reviewed by Benjamin Poulain.

        * Scripts/webkitpy/common/config/contributors.json:
        Add expertise to each contributor, taken from http://trac.webkit.org/wiki/WebKit%20Team
        
        Changed formatting of the file because the lines are getting way to
        long, and I generated this, so it's easier if the formatting of the
        file is regular.

2013-05-24  Simon Pena  <simon.pena@samsung.com>

        Update WTF::Vector pretty printers
        https://bugs.webkit.org/show_bug.cgi?id=116719

        Reviewed by Anders Carlsson.

        After r148891, WTF::Vector pretty printers were left outdated, as
        the WTF::Vector was made to extend a VectorBuffer, instead of keeping
        one as a member. This patch updates the pretty printers so they work
        again. 

        * gdb/webkit.py:
        (WTFVectorPrinter.children):
        (WTFVectorPrinter.to_string):

2013-05-24  Steve Falkenburg  <sfalken@apple.com>

        Update prepareConsistentTestingEnvironment to use a non-deprecated API.
        https://bugs.webkit.org/show_bug.cgi?id=116710

        Reviewed by Mark Rowe.

        * DumpRenderTree/mac/DumpRenderTree.mm:
        (prepareConsistentTestingEnvironment): Use beginActivityWithOptions instead of beginSuspensionOfSystemBehaviors.

2013-05-23  Lauro Neto  <lauro.neto@openbossa.org>

        Add missing dependencies to deps script.

        [GTK] Missing packages in install-dependencies script.
        https://bugs.webkit.org/show_bug.cgi?id=116632

        Reviewed by Martin Robinson.

        * gtk/install-dependencies:

2013-05-23  Brent Fulgham  <bfulgham@apple.com>

        [Windows] Unreviewed change for NRWT support.

        * Scripts/webkitpy/port/win.py:
        (WinPort.default_child_processes): Added a default implementation
        that limits NRWT to a single instance.

2013-05-23  Brent Fulgham  <bfulgham@apple.com>

        Remove meaningless "test_uses_apache" from Python test cases.
        https://bugs.webkit.org/show_bug.cgi?id=38756

        Reviewed by Ryosuke Niwa.

        * Scripts/webkitpy/port/port_testcase.py:
        (PortTestCase.test_driver_cmd_line): Remove the meaningless
        "test_uses_apache" test case from the Python test infrastructure.
        It was hard-coded to true, even though not all ports use
        Apache.

2013-05-23  Brent Fulgham  <bfulgham@webkit.org>

        [Windows] Update new-run-webkit-tests for Windows port.
        https://bugs.webkit.org/show_bug.cgi?id=38756

        Reviewed by Ryosuke Niwa.

        * Scripts/new-run-webkit-httpd:
        (run): Switch from 'chromium' to 'win'
        * Scripts/webkitpy/port/win.py:
        (WinPort): Add support methods for lighttpd server.
        (WinPort._uses_apache):
        (WinPort._path_to_lighttpd):
        (WinPort._path_to_lighttpd_modules):
        (WinPort._path_to_lighttpd_php):

2013-05-23  Patrick Gansterer  <paroga@webkit.org>

        Make default bug links in buildbot clickable
        https://bugs.webkit.org/show_bug.cgi?id=116673

        Reviewed by Ryosuke Niwa.

        Use changecommentlink of html.WebStatus to make the links clickable.

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

2013-05-22  Ryosuke Niwa  <rniwa@webkit.org>

        REGRESSION(r150491): WebKit2.DOMWindowExtensionNoCache fails
        https://bugs.webkit.org/show_bug.cgi?id=116595

        Temporarily skip this test.

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

2013-05-22  Alex Christensen  <achristensen@apple.com>

        Unreviewed.  Added myself to contributors.json.

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

2013-05-22  Michał Pakuła vel Rutka  <m.pakula@samsung.com>

        [EFL][WK2] Add sub menus to MiniBrowser
        https://bugs.webkit.org/show_bug.cgi?id=114728

        Reviewed by Christophe Dumez.

        Elementary Ctxpopup widget API does not provide support for submenu item.
        To implement ewk submenus in Minibrowser, Ctxpopup has to be replaced with
        Elementary Menu widget.

        * MiniBrowser/efl/main.c:
        (_Browser_Window):
        (on_window_resize):
        (window_free):
        (context_menu_item_selected_cb):
        (context_menu_populate):
        (on_context_menu_show):
        (on_context_menu_hide):
        (window_create):

2013-05-22  Andrzej Badowski  <a.badowski@samsung.com>

        [EFL] Add command line option to MiniBrowser to set cookies policy.
        https://bugs.webkit.org/show_bug.cgi?id=115028

        Reviewed by Christophe Dumez.

        Add command line option to MiniBrowser EFL to set cookies policy:
        -p parameter with value from (always, never, no-third-party) respectively (EWK_COOKIE_ACCEPT_POLICY_ALWAYS,
        EWK_COOKIE_ACCEPT_POLICY_NEVER, EWK_COOKIE_ACCEPT_POLICY_NO_THIRD_PARTY).

        * MiniBrowser/efl/main.c:
        (elm_main):

2013-05-21  Ryosuke Niwa  <rniwa@webkit.org>

        REGRESSION(r150369): WebKit2WillLoadTest tests are failing
        https://bugs.webkit.org/show_bug.cgi?id=116585

        Reviewed by Alexey Proskuryakov.

        willLoadURLRequest and willLoadDataRequest require the API version 6.

        * TestWebKitAPI/Tests/WebKit2/WillLoad_Bundle.cpp:

2013-05-21  Ryosuke Niwa  <rniwa@webkit.org>

        REGRESSION(r150393): editing/inserting/typing-at-end-of-line.html fails
        https://bugs.webkit.org/show_bug.cgi?id=116516

        Reviewed by Alexey Proskuryakov.

        Reset states in DumpRenderTree. The fix for WebKitTestRunner should be implemented in the bug 116577.

        * DumpRenderTree/mac/DumpRenderTree.mm:
        (createWebViewAndOffscreenWindow): Match the ordering.
        (resetWebViewToConsistentStateBeforeTesting): Reset text replacement states.

2013-05-21  Alexey Proskuryakov  <ap@apple.com>

        <rdar://problem/13929704> [WK2] WebKitTestRunner always crashes on exit
        https://bugs.webkit.org/show_bug.cgi?id=116568

        Reviewed by Anders Carlsson.

        * WebKitTestRunner/WebNotificationProvider.cpp:
        (WTR::WebNotificationProvider::~WebNotificationProvider):
        * WebKitTestRunner/WebNotificationProvider.h:
        When the provider is destroyed, it should no longer be registered with the manager.

        * WebKitTestRunner/GeolocationProviderMock.cpp:
        (WTR::GeolocationProviderMock::~GeolocationProviderMock):
        * WebKitTestRunner/GeolocationProviderMock.h:
        I wasn't seeing a crash here, but this code has the same issue as notification
        provider, so applying the same fix.

        * WebKitTestRunner/TestController.cpp: (WTR::TestController::~TestController):
        Close icon database. I started seeing ASSERT(!isOpen()) in WebCore IconDatabase
        destructor having fixed the above.

2013-05-21  Commit Queue  <commit-queue@webkit.org>

        Unreviewed, rolling out r150386 and r150397.
        http://trac.webkit.org/changeset/150386
        http://trac.webkit.org/changeset/150397
        https://bugs.webkit.org/show_bug.cgi?id=116572

        Broke a test; Alex is going to try again later. (Requested by
        thorton on #webkit).

        * WebKitTestRunner/InjectedBundle/InjectedBundlePage.cpp:
        (WTR::pathSuitableForTestResult):
        (WTR::dumpRequestDescriptionSuitableForTestResult):
        (WTR::dumpResponseDescriptionSuitableForTestResult):
        (WTR::InjectedBundlePage::willPerformClientRedirectForFrame):
        (WTR::InjectedBundlePage::didInitiateLoadForResource):
        (WTR::InjectedBundlePage::willSendRequestForFrame):
        (WTR::InjectedBundlePage::didReceiveResponseForResource):
        * WebKitTestRunner/InjectedBundle/InjectedBundlePage.h:
        (InjectedBundlePage):

2013-05-21  Ryosuke Niwa  <rniwa@webkit.org>

        Fix a python unittest after r149419. We need to support Python 2.6 on Windows.

        * Scripts/webkitpy/tool/commands/suggestnominations.py:
        (AbstractCommitLogCommand._recent_commit_messages):

2013-05-21  Martin Robinson  <mrobinson@igalia.com>

        [GTK] [CMake] Add support for building WebKit2
        https://bugs.webkit.org/show_bug.cgi?id=116372

        Reviewed by Gustavo Noronha Silva.

        * CMakeLists.txt: Do not build WebKitTestRunner yet for WebKitGTK+.
        * MiniBrowser/gtk/CMakeLists.txt: Added.

2013-05-21  Jessie Berlin  <jberlin@apple.com>

        Revert r149635, it was too optimistic.

        Rubber-stamped by Andreas Kling.

        We are not at the point where we can always use more descriptive macros instead of PLATFORM()
        #ifdefs in WebCore code outside of WebCore/platform.

        * Scripts/webkitpy/style/checkers/cpp.py:
        (check_invalid_increment):
        (process_line):
        (CppChecker):
        * Scripts/webkitpy/style/checkers/cpp_unittest.py:
        (CppStyleTest.test_plain_integral_bitfields):

2013-05-21  Jer Noble  <jer.noble@apple.com>

        Unreviewed; fix lldb synthetic representation of WTF::Vector after r148891.

        * lldb/lldb_webkit.py:
        (WTFVectorProvider.num_children):
        (WTFVectorProvider.get_child_index):
        (WTFVectorProvider.get_child_at_index):
        (WTFVectorProvider.update):

2013-05-21  Jessie Berlin  <jberlin@apple.com>

        Expose a way to know when forms are added to a page or when form controls are added to a form
        in the injected bundle
        https://bugs.webkit.org/show_bug.cgi?id=116334

        Reviewed by Alexey Proskuryakov.

        Add tests for the new callbacks.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        Add DidAssociateFormControls/_Bundle.cpp and associate-form-controls.html

        * TestWebKitAPI/Tests/WebKit2/DidAssociateFormControls.cpp: Added.
        (TestWebKitAPI::nullJavaScriptCallback):
        A "null" callback to handle the fact that WKPageRunJavaScriptInMainFrame cannot handle null
        being passed in for the callback.
        (TestWebKitAPI::didReceiveMessageFromInjectedBundle):
        After receiving the message that didAssociateFormControls callback was invoked from adding
        the form in the onload handler, tell the page to add a password field to the form, which
        should also invoke didAssociateFormControls callback.
        (TestWebKitAPI::setInjectedBundleClient):
        Register to receive messages.
        (TestWebKitAPI::TEST):
        Load associate-form-controls.html and wait until the didAssociateFormControls callback has
        been invoked for both adding the form and for adding a password field to the form.

        * TestWebKitAPI/Tests/WebKit2/DidAssociateFormControls_Bundle.cpp: Added.
        (TestWebKitAPI::shouldNotifyOnFormChanges):
        Return true so the didAssociateFormControls callback is invoked.
        (TestWebKitAPI::didAssociateFormControls):
        Tell the UI process.
        (TestWebKitAPI::DidAssociateFormControlsTest::DidAssociateFormControlsTest):
        (TestWebKitAPI::DidAssociateFormControlsTest::didCreatePage):
        Register for the shouldNotifyOnFormChanges and didAssociateFormControls callbacks.

        * TestWebKitAPI/Tests/WebKit2/associate-form-controls.html: Added.
        Add a form in response to the onload event. Add a button that will add the password field
        for manual testing.

2013-05-21  Krzysztof Czech  <k.czech@samsung.com>

        [GTK][WK2] accessibility/label-for-control-hittest.html is failing
        https://bugs.webkit.org/show_bug.cgi?id=106341

        Reviewed by Martin Robinson.

        Adds support for retrieving accessibility element at exact point.

        * WebKitTestRunner/InjectedBundle/atk/AccessibilityUIElementAtk.cpp:
        (WTR::AccessibilityUIElement::elementAtPoint):

2013-05-21  Krzysztof Czech  <k.czech@samsung.com>

        [ATK] [WebKit2] AccessibilityUIElement often leaks its AtkObject
        https://bugs.webkit.org/show_bug.cgi?id=112913

        Reviewed by Martin Robinson.

        AccessibilityUIElement is often created by passing new reference to AtkObject (transfer full).
        AccessibilityUIElement::~AccessibilityUIElement does not decrement the reference of the element,
        so the leak appears.

        * WebKitTestRunner/InjectedBundle/AccessibilityController.cpp:
        (WTR):
        * WebKitTestRunner/InjectedBundle/AccessibilityUIElement.h:
        * WebKitTestRunner/InjectedBundle/atk/AccessibilityControllerAtk.cpp:
        (WTR::AccessibilityController::rootElement):
        (WTR):
        (WTR::AccessibilityController::focusedElement):
        * WebKitTestRunner/InjectedBundle/atk/AccessibilityUIElementAtk.cpp:
        (WTR::checkElementState):
        (WTR::indexRangeInTable):
        (WTR::alterCurrentValue):
        (WTR::AccessibilityUIElement::getChildren):
        (WTR::AccessibilityUIElement::getChildrenWithRange):
        (WTR::AccessibilityUIElement::childrenCount):
        (WTR::AccessibilityUIElement::indexOfChild):
        (WTR::AccessibilityUIElement::titleUIElement):
        (WTR::AccessibilityUIElement::parentElement):
        (WTR::AccessibilityUIElement::allAttributes):
        (WTR::AccessibilityUIElement::role):
        (WTR::AccessibilityUIElement::title):
        (WTR::AccessibilityUIElement::description):
        (WTR::AccessibilityUIElement::orientation):
        (WTR::AccessibilityUIElement::stringValue):
        (WTR::AccessibilityUIElement::language):
        (WTR::AccessibilityUIElement::x):
        (WTR::AccessibilityUIElement::y):
        (WTR::AccessibilityUIElement::width):
        (WTR::AccessibilityUIElement::height):
        (WTR::AccessibilityUIElement::intValue):
        (WTR::AccessibilityUIElement::minValue):
        (WTR::AccessibilityUIElement::maxValue):
        (WTR::AccessibilityUIElement::isEnabled):
        (WTR::AccessibilityUIElement::isFocused):
        (WTR::AccessibilityUIElement::isSelected):
        (WTR::AccessibilityUIElement::isExpanded):
        (WTR::AccessibilityUIElement::isChecked):
        (WTR::AccessibilityUIElement::rowCount):
        (WTR::AccessibilityUIElement::columnCount):
        (WTR::AccessibilityUIElement::rowIndexRange):
        (WTR::AccessibilityUIElement::columnIndexRange):
        (WTR::AccessibilityUIElement::cellForColumnAndRow):
        (WTR::AccessibilityUIElement::increment):
        (WTR::AccessibilityUIElement::decrement):
        (WTR::AccessibilityUIElement::press):
        (WTR::AccessibilityUIElement::documentEncoding):
        (WTR::AccessibilityUIElement::documentURI):
        (WTR::AccessibilityUIElement::isFocusable):
        (WTR::AccessibilityUIElement::isSelectable):
        (WTR::AccessibilityUIElement::isMultiSelectable):
        (WTR::AccessibilityUIElement::isVisible):

2013-05-20  Lucas Forschler  <lforschler@apple.com>

    Rollout 150398.
    
2013-05-20  Zan Dobersek  <zdobersek@igalia.com>

        [GTK] Fix concatenations of string literals that are not C++11-compliant
        https://bugs.webkit.org/show_bug.cgi?id=116449

        Reviewed by Martin Robinson.

        Fix the problematic concatenations of string literals so they are compilable under the C++11 standard. This
        is simply a matter of separating the string and the string literal that are being concatenated with a space.

        * ImageDiff/gtk/ImageDiff.cpp:
        (printImage):

2013-05-20  Zan Dobersek  <zdobersek@igalia.com>

        [GTK] Pass GTEST_HAS_RTTI=0 cppflag to TestWebKitAPI programs at compilation-time
        https://bugs.webkit.org/show_bug.cgi?id=116450

        Reviewed by Martin Robinson.

        The -fno-rtti flag is used when compiling C++ source code throughout the project. The TestWebKitAPI
        programs fail to compile because of this when using the C++11 standard as the GTest headers assume by
        default that the RTTI support is available. This can be turned off by passing GTEST_HAS_RTTI=0 to the
        TestWebKitAPI programs when compiling them.

        * TestWebKitAPI/GNUmakefile.am:

2013-05-20  Ryosuke Niwa  <rniwa@webkit.org>

        Remove DriverProxy._running_drivers from webkitpy.layout_tests.port
        https://bugs.webkit.org/show_bug.cgi?id=116492

        Reviewed by Dirk Pranke.

        Merge https://chromium.googlesource.com/chromium/blink/+/1af2f0be5a1746784ff114952f29f7b8fa9895f3.

        The DriverProxy class had the concept of keeping a pool of started DRTs around (indexed by command line)
        so that we didn't necessarily need to restart DRT when the command line for a test changed (e.g., when
        starting to run tests in a virtual suite). However, the pool was per-worker (so not shared across the machine)
        and we didn't cap the number of processes started, so we would end up with a whole bunch of DRTs (3x-4x
        the number of workers started). If anything, this seemed to make the tests slightly slower and probably added
        to memory pressure on the machine.

        This change removes the pool code; now we'll simply restart DRT when the command line changes. With this change,
        we can actually fold the restarting code into Driver itself (and get rid of DriverProxy), but I'll leave that
        for a subsequent patch just to make things easier to follow.

        * Scripts/webkitpy/port/driver.py:
        (DriverProxy.__init__):
        (DriverProxy.run_test):
        (DriverProxy.has_crashed):
        (DriverProxy.stop):

2013-05-20  Gyuyoung Kim  <gyuyoung.kim@samsung.com>

        Change EFL Linux 64-bit Release with EFL Linux 64-bit Release WK1
        https://bugs.webkit.org/show_bug.cgi?id=116423

        Reviewed by Ryosuke Niwa.

        EFL Linux 64-bit Release starts to support WK1's build and layout test from now on.

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

2013-05-20  Seokju Kwon  <seokju.kwon@gmail.com>

        Remove remaining link-prerender code
        https://bugs.webkit.org/show_bug.cgi?id=116429

        Reviewed by Darin Adler.

        Link prerendering code was removed in r150356.

        * Scripts/webkitperl/FeatureList.pm:
        * qmake/mkspecs/features/features.pri:

2013-05-20  Ryosuke Niwa  <rniwa@webkit.org>

        commit-queue should check for oops in changelog entries
        https://bugs.webkit.org/show_bug.cgi?id=116395

        Reviewed by Martin Robinson.

        Make changelog validation fail when it contains oops!.

        * Scripts/webkitpy/tool/bot/commitqueuetask.py:
        (CommitQueueTask._validate_changelog):
        * Scripts/webkitpy/tool/bot/commitqueuetask_unittest.py:
        (CommitQueueTaskTest._run_through_task):
        * Scripts/webkitpy/tool/commands/queues_unittest.py:
        * Scripts/webkitpy/tool/steps/validatechangelogs.py:
        (ValidateChangeLogs.options):
        (ValidateChangeLogs._check_changelog_diff):
        (ValidateChangeLogs._changelog_contains_oops):
        (ValidateChangeLogs.run):
        * Scripts/webkitpy/tool/steps/validatechangelogs_unittest.py:
        (ValidateChangeLogsTest._assert_start_line_produces_output):
        (ValidateChangeLogsTest.test_check_changelog_diff):
        (ValidateChangeLogsTest):
        (ValidateChangeLogsTest.test_changelog_contains_oops):

2013-05-20  Jessie Berlin  <jberlin@apple.com>

        Expose a way to know when forms are added to a page or when form controls are added to a form
        in the injected bundle
        https://bugs.webkit.org/show_bug.cgi?id=116334

        Reviewed by Alexey Proskuryakov.

        Add tests for the new callbacks.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        Add DidAssociateFormControls/_Bundle.cpp and associate-form-controls.html

        * TestWebKitAPI/Tests/WebKit2/DidAssociateFormControls.cpp: Added.
        (TestWebKitAPI::nullJavaScriptCallback):
        A "null" callback to handle the fact that WKPageRunJavaScriptInMainFrame cannot handle null
        being passed in for the callback.
        (TestWebKitAPI::didReceiveMessageFromInjectedBundle):
        After receiving the message that didAssociateFormControls callback was invoked from adding
        the form in the onload handler, tell the page to add a password field to the form, which
        should also invoke didAssociateFormControls callback.
        (TestWebKitAPI::setInjectedBundleClient):
        Register to receive messages.
        (TestWebKitAPI::TEST):
        Load associate-form-controls.html and wait until the didAssociateFormControls callback has
        been invoked for both adding the form and for adding a password field to the form.

        * TestWebKitAPI/Tests/WebKit2/DidAssociateFormControls_Bundle.cpp: Added.
        (TestWebKitAPI::shouldNotifyOnFormChanges):
        Return true so the didAssociateFormControls callback is invoked.
        (TestWebKitAPI::didAssociateFormControls):
        Tell the UI process.
        (TestWebKitAPI::DidAssociateFormControlsTest::DidAssociateFormControlsTest):
        (TestWebKitAPI::DidAssociateFormControlsTest::didCreatePage):
        Register for the shouldNotifyOnFormChanges and didAssociateFormControls callbacks.

        * TestWebKitAPI/Tests/WebKit2/associate-form-controls.html: Added.
        Add a form in response to the onload event. Add a button that will add the password field
        for manual testing.

2013-05-20  Christophe Dumez  <ch.dumez@sisa.samsung.com>

        [EFL][JHBUILD] Make sure eet is built before evas
        https://bugs.webkit.org/show_bug.cgi?id=116440

        Reviewed by Gyuyoung Kim.

        Mark eet as a dependency of evas since evas requires eet to enable some of its
        functionality.

        * efl/jhbuild.modules:

2013-05-20  Alex Christensen  <achristensen@apple.com>

        WTR::pathSuitableForTestResult should behave the same as _drt_descriptionSuitableForTestResult so we can unskip tests.
        https://bugs.webkit.org/show_bug.cgi?id=116125

        Reviewed by Tim Horton.

        * WebKitTestRunner/InjectedBundle/InjectedBundlePage.cpp:
        (WTR::pathSuitableForTestResult):
        Changed string operations to match _drt_descriptionSuitableForTestResult.
        (WTR::dumpRequestDescriptionSuitableForTestResult):
        (WTR::dumpResponseDescriptionSuitableForTestResult):
        (WTR::InjectedBundlePage::willPerformClientRedirectForFrame):
        (WTR::InjectedBundlePage::didInitiateLoadForResource):
        (WTR::InjectedBundlePage::willSendRequestForFrame):
        (WTR::InjectedBundlePage::didReceiveResponseForResource):
        Pass the main frame's URL to pathSuitableForTestResult.
        * WebKitTestRunner/InjectedBundle/InjectedBundlePage.h:
        Added WKBundlePageRef to willPerformClientRedirectForFrame.

2013-05-20  Dirk Pranke  <dpranke@chromium.org>

        fix w3c test importer unit tests after r150324
        https://bugs.webkit.org/show_bug.cgi?id=116459

        Reviewed by Ryosuke Niwa.

        This patch fixes the unit tests to not actually call out to
        'hg' (by using a mock executive) and also changes the real
        directory we crawl from Source/WebCore/css to
        Tools/Scripts/webkitpy/w3c to run much more quickly. We should
        still change this to a mock filesystem, but that's a separate change.

        * Scripts/webkitpy/w3c/test_importer.py:
        (main):
        (TestImporter.__init__):
        (TestImporter.load_changeset):
        * Scripts/webkitpy/w3c/test_importer_unittest.py:
        (TestImporterTest.test_import_dir_with_no_tests_and_no_hg):
        (TestImporterTest.test_import_dir_with_no_tests):

2013-05-20  Christophe Dumez  <ch.dumez@sisa.samsung.com>

        Unreviewed EFL build fix.

        Fix linking errors due to undefined symbols on Ubuntu 13.04.

        * DumpRenderTree/efl/CMakeLists.txt:
        * EWebLauncher/CMakeLists.txt:
        * MiniBrowser/efl/CMakeLists.txt:

2013-05-20  Christophe Dumez  <ch.dumez@sisa.samsung.com>

        [EFL] Reenabled INDEXED_DATABASE after r150344
        https://bugs.webkit.org/show_bug.cgi?id=116430

        Reviewed by Gyuyoung Kim.

        Reenable INDEXED_DATABASE flag for EFL port now that WebKit2
        build was fixed in r150344.

        * Scripts/webkitperl/FeatureList.pm:

2013-05-19  Ryuan Choi  <ryuan.choi@samsung.com>

        [EFL] init/shutdown should be paired in EWebLauncher
        https://bugs.webkit.org/show_bug.cgi?id=116427

        Reviewed by Christophe Dumez.

        Added ecore_file_shutdown() for cleanup of ecore_file.
        Removed edje_init and ecore_evas_init because it was in ewk_init().

        * EWebLauncher/main.c:
        (main):

2013-05-19  Jinwoo Song  <jinwoo7.song@samsung.com>

        [EFL] Add command line option to MiniBrowser to set user agent
        https://bugs.webkit.org/show_bug.cgi?id=116387

        Reviewed by Christophe Dumez.

        We need this option to compare the rendering differences according to different user agents.

        * MiniBrowser/efl/main.c:
        (window_create):
        (elm_main):

2013-05-19  Zan Dobersek  <zdobersek@igalia.com>

        Unreviewed, addressing test-webkitpy failures after r150317.

        * Scripts/webkitpy/w3c/test_converter.py:
        (W3CTestConverter.read_webkit_prefixed_css_property_list): CssPropertyNames.in doesn't exist, but CSSPropertyNames.in does.

2013-05-18  Patrick Gansterer  <paroga@webkit.org>

        [CMake] Replace *_LIBRARY_NAME with *_OUTPUT_NAME
        https://bugs.webkit.org/show_bug.cgi?id=114554

        Reviewed by Gyuyoung Kim.

        Using variables as target names is very uncommon in CMake.
        The usual way to specify the name of the resulting binary
        is to set the OUTPUT_NAME target property.

        * DumpRenderTree/efl/CMakeLists.txt:
        * EWebLauncher/CMakeLists.txt:
        * ImageDiff/CMakeLists.txt:
        * MiniBrowser/efl/CMakeLists.txt:
        * TestWebKitAPI/CMakeLists.txt:
        * WebKitTestRunner/CMakeLists.txt:
        * WebKitTestRunner/PlatformEfl.cmake:
        * WinCELauncher/CMakeLists.txt:

2013-05-18  Christophe Dumez  <ch.dumez@sisa.samsung.com>

        Unreviewed EFL build fix.

        Temporarily disabled INDEXED_DATABASE at compile-time as it breaks
        WK2 build after r150305.

        * Scripts/webkitperl/FeatureList.pm:

2013-05-18  Alberto Garcia  <agarcia@igalia.com>

        [GTK] Parallel build fails if gtk-doc is enabled
        https://bugs.webkit.org/show_bug.cgi?id=116227

        Reviewed by Martin Robinson.

        * GNUmakefile.am:
        Don't use the 'all' target to generate the documentation.
        The prerequisites of this target must be files that need to be
        built _before_ the actual compilation of WebKit starts. Since the
        documentation depends on WebKit being built first, this means in
        practice that the code will be built in parallel with the
        generation of its dependencies, potentially making the build fail.

2013-05-17  Ryosuke Niwa  <rniwa@webkit.org>

        Don't run hg.

        * Scripts/webkitpy/w3c/test_importer_unittest.py:
        (TestImporterTest):

2013-05-17  Dirk Pranke  <dpranke@chromium.org>

        Create a script to import W3C tests
        https://bugs.webkit.org/show_bug.cgi?id=111513

        Reviewed by Ryosuke Niwa.

        This patch attempts to re-land the 'import-w3c-tests'
        script and accompanying modules.  The tests and code have
        been cleaned up so that we do not log anything to stdout/stderr
        while running the tests (thanks to outputcapture) and do not
        write into the source tree while running the tests, and much
        but not all of the code has been converted over to using the webkitpy

        * Scripts/import-w3c-tests: Added.
        * Scripts/webkitpy/w3c/__init__.py: Added.
        * Scripts/webkitpy/w3c/test_converter.py: Added.
        (W3CTestConverter):
        (W3CTestConverter.__init__):
        (W3CTestConverter.path_from_webkit_root):
        (W3CTestConverter.read_webkit_prefixed_css_property_list):
        (W3CTestConverter.convert_for_webkit):
        (W3CTestConverter.convert_css):
        (W3CTestConverter.convert_html):
        (W3CTestConverter.convert_testharness_paths):
        (W3CTestConverter.convert_prefixed_properties):
        (W3CTestConverter.add_webkit_prefix_to_unprefixed_properties):
        (W3CTestConverter.replace_tag):
        * Scripts/webkitpy/w3c/test_converter_unittest.py: Added.
        (W3CTestConverterTest):
        (W3CTestConverterTest.fake_dir_path):
        (W3CTestConverterTest.test_read_prefixed_property_list):
        (W3CTestConverterTest.test_convert_for_webkit_nothing_to_convert):
        (test_convert_for_webkit_harness_only):
        (test_convert_for_webkit_properties_only):
        (test_convert_for_webkit_harness_and_properties):
        (test_convert_test_harness_paths):
        (test_convert_prefixed_properties):
        (verify_conversion_happened):
        (verify_no_conversion_happened):
        (verify_test_harness_paths):
        (verify_prefixed_properties):
        (generate_test_content):
        * Scripts/webkitpy/w3c/test_importer.py: Added.
        (main):
        (parse_args):
        (validate_import_directory):
        (TestImporter):
        (TestImporter.__init__):
        (TestImporter.path_from_webkit_root):
        (TestImporter.do_import):
        (TestImporter.load_changeset):
        (TestImporter.find_importable_tests):
        (TestImporter.import_tests):
        (TestImporter.setup_destination_directory):
        (TestImporter.update_test_status):
        (TestImporter.remove_deleted_files):
        (TestImporter.write_import_log):
        * Scripts/webkitpy/w3c/test_importer_unittest.py: Added.
        (TestImporterTest):
        (TestImporterTest.test_import_dir_with_no_tests):
        * Scripts/webkitpy/w3c/test_parser.py: Added.
        (TestParser):
        (TestParser.__init__):
        (TestParser.load_file):
        (TestParser.analyze_test):
        (TestParser.reference_links_of_type):
        (TestParser.is_jstest):
        (TestParser.support_files):
        * Scripts/webkitpy/w3c/test_parser_unittest.py: Added.
        (TestParserTest):
        (TestParserTest.test_analyze_test_reftest_one_match):
        (test_analyze_test_reftest_multiple_matches):
        (test_analyze_test_reftest_match_and_mismatch):
        (test_analyze_test_reftest_with_ref_support_Files):
        (test_analyze_jstest):
        (test_analyze_pixel_test_all_true):
        (test_analyze_pixel_test_all_false):
        (test_analyze_non_html_file):

2013-05-17  Ryosuke Niwa  <rniwa@webkit.org>

        Leaks builders exit early frequently
        https://bugs.webkit.org/show_bug.cgi?id=116355

        Reviewed by Stephanie Lewis.

        Throttle the number of processes to use, and also bump up the number of crashes/timeouts
        we tolerate from 20 to 50.

        * BuildSlaveSupport/build.webkit.org-config/master.cfg:
        (RunWebKitTests.start):
        * Scripts/webkitpy/port/mac.py:
        (MacPort.default_child_processes):

2013-05-17  Peter Gal  <galpeter@inf.u-szeged.hu>

        Remove chrome-channels command from the webkit-patch
        https://bugs.webkit.org/show_bug.cgi?id=116303

        Reviewed by Ryosuke Niwa.

        * Scripts/webkitpy/common/config/urls.py: Removed omahaproxy url.
        * Scripts/webkitpy/common/net/omahaproxy.py: Removed.
        * Scripts/webkitpy/common/net/omahaproxy_unittest.py: Removed.
        * Scripts/webkitpy/tool/commands/__init__.py: Removed chromechannels import.
        * Scripts/webkitpy/tool/commands/chromechannels.py: Removed.
        * Scripts/webkitpy/tool/commands/chromechannels_unittest.py: Removed.

2013-05-17  David Kilzer  <ddkilzer@apple.com>

        filter-build-webkit: Don't filter out the location of the missing symbol when linking fails
        Part 3 of 3: <http://webkit.org/b/116247>

        Reviewed by Benjamin Poulain.

        * Scripts/filter-build-webkit: Change while() loop to for() loop
        to track $previousLine, then pass $previousLine into
        shouldIgnoreLine().
        (shouldIgnoreLine): Add $previousLine argument. Do not skip a
        line that begins with four spaces if the previous line is a
        linker error message.
        * Scripts/webkitperl/filter-build-webkit_unittest/shouldIgnoreLine_unittests.pl:
        - Add "Ignored: " to test descriptions to document expected
          behavior.
        - Add comment blocks for various groups of tests.
        - Expand "Build settings" tests since we're changing the code in
          shouldIgnoreLine() that ignores those lines.
        - Add tests for undefined symbols error message.
        (description): Add.  Extract from global code.

2013-05-17  David Kilzer  <ddkilzer@apple.com>

        Add tests for shouldIgnoreLine() in filter-build-webkit
        Part 2 of 3: <http://webkit.org/b/116247>

        Reviewed by Benjamin Poulain.

        * Scripts/filter-build-webkit:
        (shouldIgnoreLine): Add.  Extract code from global scope into
        subroutine to make it testable.
        * Scripts/webkitperl/filter-build-webkit_unittest/shouldIgnoreLine_unittests.pl: Add.
        Tests shouldIgnoreLine() using output from a real build
        transcript.

2013-05-17  Ryosuke Niwa  <rniwa@webkit.org>

        Rename "WebKit Queues" to explicitly call out for EWS and CQ on build.webkit.org
        https://bugs.webkit.org/show_bug.cgi?id=116341

        Reviewed by Brady Eidson.

        * BuildSlaveSupport/build.webkit.org-config/templates/root.html:

2013-05-17  Brent Fulgham  <bfulgham@apple.com>

        [Windows] Don't use pdevenv when building with VS2010.
        https://bugs.webkit.org/show_bug.cgi?id=116338.

        Reviewed by Adam Roben.

        * Scripts/webkitdirs.pm:
        (setupCygwinEnv): Check if we are using VS2005, and only use
        the 'pdevenv' hack if we are. Otherwise, just build with
        our standard project since it uses VS2010+'s native
        parallel building features.

2013-05-17  Gustavo Noronha Silva  <gustavo.noronha@collabora.com>

        Unreviewed. Disable accelerated compositing until we figure out why it does not work
        properly in the 64 bits release bot.

        * DumpRenderTree/gtk/DumpRenderTree.cpp:
        (resetDefaultsToConsistentValues):

2013-05-17  David Kilzer  <ddkilzer@apple.com>

        Make filter-build-webkit testable using LoadAsModule
        Part 1 of 3: <http://webkit.org/b/116247>

        Reviewed by Benjamin Poulain.

        * Scripts/filter-build-webkit: Change global variables that are
        used in subroutines from 'my' to 'our' to make it possible to
        evaluate the script in a package context in LoadAsModule.pm.

2013-05-14  Sam Weinig  <sam@webkit.org>

        Add variants of the loading APIs that take user data and a way for the injected bundle to find out about them
        https://bugs.webkit.org/show_bug.cgi?id=116132

        Reviewed by Anders Carlsson.

        Adds "WithUserData" versions of all the load APIs and two new WKBundlePageLoaderClient functions,
        willLoadURLRequest and willLoadDataRequest to let the bundle access them.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WebKit2/WillLoad.cpp: Added.
        * TestWebKitAPI/Tests/WebKit2/WillLoad_Bundle.cpp: Added.
        * WebKitTestRunner/InjectedBundle/InjectedBundlePage.cpp:

2013-05-16  Seokju Kwon  <seokju.kwon@gmail.com>

        [EFL] inspector-protocol/page/javascriptDialogEvents.html is failing
        https://bugs.webkit.org/show_bug.cgi?id=114781

        Reviewed by Christophe Dumez.

        Add run_before_unload_confirm and
        Print the log message with "CONFIRM NAVIGATION: " in console.

        * DumpRenderTree/efl/DumpRenderTreeView.cpp:
        (onBeforeUnloadConfirm):
        (drtViewAdd):

2013-05-16  Peter Gal  <galpeter@inf.u-szeged.hu>

        Fix Analyze ChangeLog's entry processing
        https://bugs.webkit.org/show_bug.cgi?id=116219

        Reviewed by Ryosuke Niwa.

        * Scripts/webkitpy/tool/commands/analyzechangelog.py:
        (ChangeLogAnalyzer._analyze_entries): Fix the counter initialization.

2013-05-16  Hyungchan Kim  <hyungchan2.kim@lge.com>

        [Qt] UrlLoader::loadNext is broken in MiniBrowser
        https://bugs.webkit.org/show_bug.cgi?id=116099

        Reviewed by Jocelyn Turcotte.

        QQuickWebView's 3 signals(loadStarted, loadSucceeded, loadFailed)
        are not available any more. So, UrlLoader::loadNext was broken
        because it failed to connect to those signals.

        * MiniBrowser/qt/UrlLoader.cpp:
        (UrlLoader::UrlLoader):
        (UrlLoader::loadingChanged):
        * MiniBrowser/qt/UrlLoader.h:
        (UrlLoader):

2013-05-16  Lamarque V. Souza  <Lamarque.Souza@basyskom.com>

        [WebSocket] Update pywebsocket to r760
        https://bugs.webkit.org/show_bug.cgi?id=115863

        Reviewed by Alexey Proskuryakov.

        Version r760 supports a newer draft of message compression.
        We need this update to finish the permessage compression patch in
        bug 98840. This patch also fixes failing unit tests after the update.

        * Scripts/webkitpy/thirdparty/mod_pywebsocket/_stream_base.py:
        (StreamBase._read):
        (StreamBase._read.of):
        (StreamBase._write):
        (StreamBase.receive_bytes):
        (StreamBase._read_until):
        * Scripts/webkitpy/thirdparty/mod_pywebsocket/_stream_hybi.py:
        (parse_frame):
        (StreamOptions.__init__):
        (Stream.__init__):
        (Stream._receive_frame_as_frame_object):
        (Stream._get_message_from_frame):
        (Stream._process_close_message):
        (Stream.close_connection):
        (Stream.get_last_received_opcode):
        * Scripts/webkitpy/thirdparty/mod_pywebsocket/common.py:
        * Scripts/webkitpy/thirdparty/mod_pywebsocket/dispatch.py:
        (Dispatcher.do_extra_handshake):
        (Dispatcher.transfer_data):
        * Scripts/webkitpy/thirdparty/mod_pywebsocket/extensions.py:
        (ExtensionProcessorInterface.__init__):
        (ExtensionProcessorInterface.request):
        (ExtensionProcessorInterface):
        (ExtensionProcessorInterface.name):
        (ExtensionProcessorInterface.check_consistency_with_other_processors):
        (ExtensionProcessorInterface.set_active):
        (ExtensionProcessorInterface.is_active):
        (ExtensionProcessorInterface._get_extension_response_internal):
        (ExtensionProcessorInterface.get_extension_response):
        (ExtensionProcessorInterface._setup_stream_options_internal):
        (ExtensionProcessorInterface.setup_stream_options):
        (_log_outgoing_compression_ratio):
        (_log_incoming_compression_ratio):
        (_parse_window_bits):
        (_AverageRatioCalculator):
        (_AverageRatioCalculator.__init__):
        (_AverageRatioCalculator.add_original_bytes):
        (_AverageRatioCalculator.add_result_bytes):
        (_AverageRatioCalculator.get_average_ratio):
        (DeflateFrameExtensionProcessor):
        (DeflateFrameExtensionProcessor.__init__):
        (DeflateFrameExtensionProcessor._get_extension_response_internal):
        (DeflateFrameExtensionProcessor._setup_stream_options_internal):
        (DeflateFrameExtensionProcessor._outgoing_filter):
        (DeflateFrameExtensionProcessor._incoming_filter):
        (CompressionExtensionProcessorBase.for):
        (CompressionExtensionProcessorBase.__init__):
        (CompressionExtensionProcessorBase._get_extension_response_internal):
        (CompressionExtensionProcessorBase._setup_stream_options_internal):
        (PerFrameCompressExtensionProcessor):
        (PerMessageDeflateExtensionProcessor):
        (PerMessageDeflateExtensionProcessor.__init__):
        (PerMessageDeflateExtensionProcessor._get_extension_response_internal):
        (PerMessageDeflateExtensionProcessor._setup_stream_options_internal):
        (PerMessageDeflateExtensionProcessor.set_c2s_max_window_bits):
        (PerMessageDeflateExtensionProcessor.set_c2s_max_window_bits.adds):
        (PerMessageDeflateExtensionProcessor.set_c2s_no_context_takeover):
        (PerMessageDeflateExtensionProcessor.set_c2s_no_context_takeover.adds):
        (PerMessageDeflateExtensionProcessor.set_bfinal):
        (PerMessageDeflateExtensionProcessor.enable_outgoing_compression):
        (PerMessageDeflateExtensionProcessor.disable_outgoing_compression):
        (_PerMessageDeflateFramer):
        (_PerMessageDeflateFramer.__init__):
        (_PerMessageDeflateFramer.set_compress_outgoing_enabled):
        (_PerMessageDeflateFramer._process_incoming_message):
        (_PerMessageDeflateFramer._process_outgoing_message):
        (_PerMessageDeflateFramer.setup_stream_options):
        (_PerMessageDeflateFramer.setup_stream_options._OutgoingMessageFilter):
        (_PerMessageDeflateFramer.setup_stream_options._OutgoingMessageFilter.__init__):
        (_PerMessageDeflateFramer.setup_stream_options._OutgoingMessageFilter.filter):
        (_PerMessageDeflateFramer.setup_stream_options._IncomingMessageFilter):
        (_PerMessageDeflateFramer.setup_stream_options._IncomingMessageFilter.__init__):
        (_PerMessageDeflateFramer.setup_stream_options._IncomingMessageFilter.decompress_next_message):
        (_PerMessageDeflateFramer.setup_stream_options._IncomingMessageFilter.filter):
        (_PerMessageDeflateFramer.setup_stream_options._OutgoingFrameFilter):
        (_PerMessageDeflateFramer.setup_stream_options._OutgoingFrameFilter.__init__):
        (_PerMessageDeflateFramer.setup_stream_options._OutgoingFrameFilter.set_compression_bit):
        (_PerMessageDeflateFramer.setup_stream_options._OutgoingFrameFilter.filter):
        (_PerMessageDeflateFramer.setup_stream_options._IncomingFrameFilter):
        (_PerMessageDeflateFramer.setup_stream_options._IncomingFrameFilter.__init__):
        (_PerMessageDeflateFramer.setup_stream_options._IncomingFrameFilter.filter):
        (PerMessageCompressExtensionProcessor):
        (PerMessageCompressExtensionProcessor._lookup_compression_processor):
        (MuxExtensionProcessor.__init__):
        (MuxExtensionProcessor.check_consistency_with_other_processors):
        (MuxExtensionProcessor):
        (MuxExtensionProcessor._get_extension_response_internal):
        (MuxExtensionProcessor._setup_stream_options_internal):
        (MuxExtensionProcessor.set_quota):
        (MuxExtensionProcessor.quota):
        (MuxExtensionProcessor.set_extensions):
        (MuxExtensionProcessor.extensions):
        (is_compression_extension):
        * Scripts/webkitpy/thirdparty/mod_pywebsocket/handshake/_base.py:
        (validate_subprotocol):
        (parse_host_header):
        (format_header):
        (check_request_line):
        * Scripts/webkitpy/thirdparty/mod_pywebsocket/handshake/hybi.py:
        (Handshaker.do_handshake):
        (Handshaker._create_handshake_response):
        * Scripts/webkitpy/thirdparty/mod_pywebsocket/handshake/hybi00.py:
        (_validate_subprotocol):
        (_check_header_lines):
        (_build_location):
        (Handshaker.do_handshake):
        (Handshaker._set_subprotocol):
        (Handshaker._set_location):
        * Scripts/webkitpy/thirdparty/mod_pywebsocket/headerparserhandler.py:
        (_create_dispatcher):
        (headerparserhandler):
        * Scripts/webkitpy/thirdparty/mod_pywebsocket/mux.py:
        (_create_add_channel_response):
        (_create_drop_channel):
        (_create_flow_control):
        (_create_new_channel_slot):
        (_create_fallback_new_channel_slot):
        (_MuxFramePayloadParser._read_number):
        (_MuxFramePayloadParser._read_size_and_contents):
        (_MuxFramePayloadParser._read_flow_control):
        (_MuxFramePayloadParser._read_new_channel_slot):
        (_LogicalConnection.__init__):
        (_LogicalConnection.write):
        (_LogicalConnection.on_write_data_done):
        (_LogicalConnection):
        (_LogicalConnection.on_writer_done):
        (_InnerMessage):
        (_InnerMessage.__init__):
        (_InnerMessageBuilder):
        (_InnerMessageBuilder.that):
        (_InnerMessageBuilder.__init__):
        (_InnerMessageBuilder._handle_first):
        (_InnerMessageBuilder._process_first_fragmented_control):
        (_InnerMessageBuilder._process_first_fragmented_message):
        (_InnerMessageBuilder._handle_fragmented_control):
        (_InnerMessageBuilder._reassemble_fragmented_control):
        (_InnerMessageBuilder._handle_fragmented_message):
        (_InnerMessageBuilder._reassemble_fragmented_message):
        (_InnerMessageBuilder.build):
        (_LogicalStream.__init__):
        (_LogicalStream._create_inner_frame):
        (_LogicalStream._write_inner_frame):
        (_LogicalStream.replenish_send_quota):
        (_LogicalStream.send_message):
        (_LogicalStream._receive_frame):
        (_LogicalStream._get_message_from_frame):
        (_LogicalStream.stop_sending):
        (_PhysicalConnectionWriter.__init__):
        (_PhysicalConnectionWriter._write_data):
        (_PhysicalConnectionWriter.run):
        (_PhysicalConnectionWriter.stop):
        (_Worker.run):
        (_MuxHandshaker.__init__):
        (_MuxHandshaker._create_stream):
        (_MuxHandshaker._create_handshake_response):
        (_HandshakeDeltaBase.create_headers):
        (_MuxHandler.start):
        (_MuxHandler.wait_until_done):
        (_MuxHandler.notify_write_data_done):
        (_MuxHandler._process_drop_channel):
        (_MuxHandler._process_logical_frame):
        (_MuxHandler.notify_reader_done):
        (_MuxHandler):
        (_MuxHandler.notify_writer_done):
        (_MuxHandler.fail_physical_connection):
        (_MuxHandler.fail_logical_channel):
        (use_mux):
        * Scripts/webkitpy/thirdparty/mod_pywebsocket/standalone.py:
        (_StandaloneRequest.get_uri):
        (_StandaloneRequest.get_unparsed_uri):
        (_StandaloneRequest):
        (_StandaloneRequest.is_https):
        (_import_ssl):
        (_import_pyopenssl):
        (_StandaloneSSLConnection.for):
        (_StandaloneSSLConnection):
        (_StandaloneSSLConnection.__getattribute__):
        (_StandaloneSSLConnection.__setattr__):
        (_StandaloneSSLConnection.makefile):
        (_StandaloneSSLConnection.shutdown):
        (_StandaloneSSLConnection.recv):
        (WebSocketServer.__init__):
        (WebSocketServer._create_sockets):
        (WebSocketServer.handle_error):
        (WebSocketServer.get_request):
        (WebSocketServer.get_request.default_callback):
        (WebSocketRequestHandler.parse_request):
        (_build_option_parser):
        (_main):
        (_main.if):
        * Scripts/webkitpy/thirdparty/mod_pywebsocket/util.py:
        (RepeatedXorMasker.__init__):
        (RepeatedXorMasker._mask_using_swig):
        (RepeatedXorMasker):
        (RepeatedXorMasker._mask_using_array):
        (_Deflater.compress_and_finish):
        (_RFC1979Deflater.filter):
        (DeflateSocket.send):

2013-05-16  Jonathan Liu  <net147@gmail.com>

        Fix testing if program exists in PATH
        https://bugs.webkit.org/show_bug.cgi?id=116216

        Reviewed by Jocelyn Turcotte.

        functions.prf incorrectly uses win_cmd_shell to test whether to
        add .exe to the executable name when checking if it exists in
        the PATH environment variable. This works correctly when
        building using Windows Command Prompt but not under MSYS shell.

        To resolve this, check the win32 platform scope instead of
        win_cmd_shell so that it correctly adds .exe to the executable
        name on Windows regardless of the shell used when testing if
        it exists in PATH.

        * qmake/mkspecs/features/functions.prf:

2013-05-16  Ryosuke Niwa  <rniwa@webkit.org>

        Fix the hard-coded names of EWS bots that run tests.

        * Scripts/webkitpy/tool/commands/queues.py:
        (CommitQueue.did_pass_testing_ews):

2013-05-16  Gustavo Noronha Silva  <gustavo.noronha@collabora.com>

        [GTK] Build Xvfb with jhbuild
        https://bugs.webkit.org/show_bug.cgi?id=115907

        Reviewed by Martin Robinson.

        Build our own Xvfb so that we can avoid problems with the system Xvfb
        relying on symbols not present in our jhbuilt libraries such as pixman,
        and also to ensure we have the fix for a GLX module crasher.

        * DumpRenderTree/gtk/DumpRenderTree.cpp:
        (resetDefaultsToConsistentValues): enable accelerated compositing.
        * gtk/install-dependencies: list packages required for building Xvfb.
        * gtk/jhbuild.modules: add xserver as a jhbuild module.
        * gtk/patches/xserver-remove-bogus-dependencies.patch: Added.
        * gtk/patches/xserver-fix-glx-init.patch: Added. Fixes a crash while
        initializing the GLX module for Xvfb.

2013-05-16  Gustavo Noronha Silva  <gustavo.noronha@collabora.com>

        [jhbuild] Should remove the sources directory as well when cleaning
        https://bugs.webkit.org/show_bug.cgi?id=116229

        Reviewed by Martin Robinson.

        * Scripts/update-webkit-libs-jhbuild:
        (cleanJhbuild): remove the Source directory as well when cleaning.

2013-05-15  Dominik Röttsches  <dominik.rottsches@intel.com>

        [EFL] Remove Intel Wk2 Buildbots from Master
        https://bugs.webkit.org/show_bug.cgi?id=116149

        Removing Intel maintained EFL Wk2 bots except the handle for efl-linux-slave-2
        since Gyuyoung Kim from Samsung plans to take over and maintain it.

        Reviewed by Benjamin Poulain.

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

2013-05-15  Brent Fulgham  <bfulgham@apple.com>

        [Windows] Update various build tools to understand VS2010 environment.
        https://bugs.webkit.org/show_bug.cgi?id=116169.

        Reviewed by Anders Carlsson.

        * Scripts/build-api-tests: Identify VS2010 environment.
        * Scripts/build-dumprendertree: Ditto.
        * Scripts/build-webkit: Ditto.
        * Scripts/webkitdirs.pm:
        (dieIfWindowsPlatformSDKNotInstalled): Update to recognize a wider
        range of acceptable SDK's.

2013-05-15  Peter Gal  <galpeter@inf.u-szeged.hu>

        Allow http tests on Arch Linux
        https://bugs.webkit.org/show_bug.cgi?id=116155

        Reviewed by Ryosuke Niwa.

        * Scripts/webkitpy/port/base.py:
        (Port._is_arch_based): Added check for /etc/arch-release file.
        (Port._apache_config_file_name_for_platform): Call the check.
        * Scripts/webkitpy/port/port_testcase.py:
        (test_linux_distro_detection): Testcase added.

2013-05-15  Peter Gal  <galpeter@inf.u-szeged.hu>

        Remove a leftover v8 file from the watchlist
        https://bugs.webkit.org/show_bug.cgi?id=116158

        Reviewed by Csaba Osztrogonác.

        * Scripts/webkitpy/common/config/watchlist: Removed a v8 entry from the watchlist.

2013-05-15  Alberto Garcia  <agarcia@igalia.com>

        [GTK] Fails to build while generating gtkdoc
        https://bugs.webkit.org/show_bug.cgi?id=115612

        Reviewed by Philippe Normand.

        Fix typo in the prerequisites of docs-build.stamp.

        * GNUmakefile.am:

2013-05-15  Zan Dobersek  <zdobersek@igalia.com>

        Unreviewed, fixing the current test-webkitpy failure.

        * Scripts/webkitpy/port/mac_unittest.py:
        (test_setup_environ_for_server): Adjusting the expected DYLD_INSERT_LIBRARIES environment variable value
        in webkitpy.port.mac_unittest.test_setup_environ_for_server after r150089.

2013-05-14  Jaehun Lim  <ljaehun.lim@samsung.com>

        Fix build after r150090.
        https://bugs.webkit.org/show_bug.cgi?id=116129

        Unreviewed build fix after r150090.

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

2013-05-14  Brent Fulgham  <bfulgham@apple.com>

        [Windows, others] Unreviewed build fix after r150090.

        * DumpRenderTree/TestRunner.cpp:
        (getSecureEventInputIsEnabledCallback): IsSecureEventInputEnabled
        doesn't exist on other platforms.

2013-05-14  Brent Fulgham  <bfulgham@webkit.org>

        [Windows] Expunge pthreads2VC.dll from DumpRenderTree Project
        https://bugs.webkit.org/show_bug.cgi?id=115889

        Reviewed by Benjamin Poulain.

        * DumpRenderTree/DumpRenderTree.vcxproj/DumpRenderTree/DumpRenderTreeCommon.props:
        * DumpRenderTree/win/DumpRenderTreeCommon.vsprops:

2013-05-14  Brent Fulgham  <bfulgham@apple.com>

        [Windows] Identify proper run environment for scripts.
        https://bugs.webkit.org/show_bug.cgi?id=116114

        Reviewed by David Kilzer.

        Determine (based on Visual Studio version) which path to use for
        executables (bin versus bin32).

        * Scripts/webkitdirs.pm:
        (determineVisualStudioInstallDir): Added.
        (determineVisualStudioVersion): Added.
        (determineConfigurationProductDir): Modified to choose proper bin
        or bin32 directory.
        (visualStudioVersion): Added
        (setupCygwinEnv): Modified to use new determineVisualStudioInstallDir

2013-05-14  Alexey Proskuryakov  <ap@apple.com>

        [Mac] Add tests for secure event input
        https://bugs.webkit.org/show_bug.cgi?id=116121

        Reviewed by Mark Rowe.

        * DumpRenderTree/TestRunner.cpp:
        (getSecureEventInputIsEnabledCallback):
        (TestRunner::staticValues):
        Expose an accessor for current secure event input state.

        * WebKitTestRunner/InjectedBundle/Bindings/TestRunner.idl:
        * WebKitTestRunner/InjectedBundle/TestRunner.cpp:
        (WTR::TestRunner::secureEventInputIsEnabled):
        * WebKitTestRunner/InjectedBundle/TestRunner.h:
        * WebKitTestRunner/TestInvocation.cpp:
        (WTR::TestInvocation::didReceiveSynchronousMessageFromInjectedBundle):
        Expose an accessor for current secure event input state. This has to be done in
        UI process, as this is where it's changed by WebKit.

2013-05-14  Alexey Proskuryakov  <ap@apple.com>

        [Mac] Add a testing shim for secure event input functions
        https://bugs.webkit.org/show_bug.cgi?id=116122

        Reviewed by Mark Rowe.

        * Scripts/webkitpy/port/mac.py: (MacPort.setup_environ_for_server):
        Inject WebCore testing shim library to override system framework functions.

2013-05-14  Brent Fulgham  <bfulgham@apple.com>

        [Windows] Switch to embedded manifest commands for launcher executables.
        https://bugs.webkit.org/show_bug.cgi?id=116109

        Reviewed by Darin Adler.

        * WinLauncher/WinLauncher.vcxproj/WinLauncher.vcxproj: Remove the
        now-unused WinLauncher.exe.manifest file.
        * WinLauncher/WinLauncher.vcxproj/WinLauncher.vcxproj.filters: Ditto.
        * win/DLLLauncher/DLLLauncherMain.cpp: Add embedded manifest command
        when building with VS2010 or newer.

2013-05-14  Brent Fulgham  <bfulgham@apple.com>

        [Windows] Update ORWT to know about the Windows 8 SDK and Debug Tools.
        https://bugs.webkit.org/show_bug.cgi?id=116079

        Reviewed by David Kilzer.

        * Scripts/old-run-webkit-tests:
        (setUpWindowsCrashLogSaving): Locate ntsd.exe and use it.

2013-05-14  Zan Dobersek  <zdobersek@igalia.com>

        [GTK] Move generated ColorData.cpp, WebKitFontFamilyNames.(cpp|h) build targets into libPlatform
        https://bugs.webkit.org/show_bug.cgi?id=115921

        Reviewed by Gustavo Noronha Silva.

        * GNUmakefile.am: Add platform_cppflags to the list of CPPFLAGS for libWebCoreInternals and DumpRenderTree.
        * TestWebKitAPI/GNUmakefile.am: Add platform_cppflags to the list of TestGtk CPPFLAGS.

2013-05-13  Alex Christensen  <achristensen@apple.com>

        Added testRunner.setPrinting.
        https://bugs.webkit.org/show_bug.cgi?id=42693
        rdar://problem/8213845

        Reviewed by Darin Adler.

        * WebKitTestRunner/InjectedBundle/Bindings/TestRunner.idl:
        Added setPrinting JavaScript function.
        * WebKitTestRunner/InjectedBundle/InjectedBundlePage.cpp:
        (WTR::InjectedBundlePage::dump):
        Dump the external representation for printing if setPrinting has been called.
        * WebKitTestRunner/InjectedBundle/TestRunner.h:
        (WTR::TestRunner::isPrinting): Added.
        (WTR::TestRunner::setPrinting): Added.
        Added and initialized m_isPrinting member boolean.

2013-05-13  Csaba Osztrogonác  <ossy@webkit.org>

        [webkitpy] Make FileInfo.repository_name support SVN version > 1.6
        https://bugs.webkit.org/show_bug.cgi?id=116016

        Reviewed by Dirk Pranke.

        Same fix as in the upstream style checker, but without hg support.
        ( http://google-styleguide.googlecode.com/svn/trunk/cpplint/cpplint.py )

        * Scripts/webkitpy/style/checkers/cpp.py:
        (FileInfo.repository_name):

2013-05-13  Zan Dobersek  <zdobersek@igalia.com>

        [GTK] Use WebCore layer archives for TestWebCore, WebKitPluginProcess
        https://bugs.webkit.org/show_bug.cgi?id=115918

        Reviewed by Gustavo Noronha Silva.

        Due to layer violations and circular dependencies the TestWebCores requires for the libraries containing
        the built code of the intertwining Platform and WebCore layers to be specified multiple times when linking.
        This can be avoided by packing the two layers' archives into one big archive, named after the WebCore layer
        due to no clear boundary between it and the Platform layer. The big archive can then be specified only once
        when linking, simplifying the code and suppressing all the layering violations so they do not cause build
        problems.

        First the libtool libraries that the WebCore layer (as required by the TestWebCore) depends on are specified.
        These are then used as dependencies for the archive creation rule as well as the list from which the archive
        file paths are constructed and then used to dump the member files from these archives. The member files are
        then added to the big archive. The latter is added to the list of libraries the TestWebCore requires to
        successfully link.

        * TestWebKitAPI/GNUmakefile.am:

2013-05-13  Anders Carlsson  <andersca@apple.com>

        Remove UnusedParam.h
        https://bugs.webkit.org/show_bug.cgi?id=116029

        Reviewed by Andreas Kling.

        Stop including UnusedParam.h.

        * DumpRenderTree/blackberry/TestRunnerBlackBerry.cpp:
        * WebKitTestRunner/qt/TestInvocationQt.cpp:

2013-05-12  Commit Queue  <commit-queue@webkit.org>

        Unreviewed, rolling out r149955.
        http://trac.webkit.org/changeset/149955
        https://bugs.webkit.org/show_bug.cgi?id=115990

        Broke lots of tests (Requested by smfr on #webkit).

        * Scripts/webkitpy/port/mac.py:

2013-05-12  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] Remove unnecessary GTK_CHECK_VERSION #ifdefs
        https://bugs.webkit.org/show_bug.cgi?id=115914

        Reviewed by Martin Robinson.

        * GtkLauncher/main.c:
        (createToolbar):
        * MiniBrowser/gtk/BrowserWindow.c:
        (_BrowserWindow):
        (browserWindowSetStatusText):
        (fullScreenMessageTimeoutCallback):
        (webViewEnterFullScreen):
        (webViewLeaveFullScreen):
        (browserWindowFinalize):
        (browserWindowConstructed):
        * WebKitTestRunner/gtk/EventSenderProxyGtk.cpp:
        (WTR::EventSenderProxy::mouseScrollBy):
        (WTR::EventSenderProxy::continuousMouseScrollBy):

2013-05-11  Anders Carlsson  <andersca@apple.com>

        Crash when terminating a process that has not been fully launched
        https://bugs.webkit.org/show_bug.cgi?id=115962
        <rdar://problem/13660916>

        Reviewed by Andreas Kling.

        Add TerminateTwice, a test that terminates a page, then reloads it and terminates it again
        before the process has had a chance to be fully launched.

        * TestWebKitAPI/GNUmakefile.am:
        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WebKit2/TerminateTwice.cpp: Added.
        (TestWebKitAPI):
        (TestWebKitAPI::didFinishLoadForFrame):
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/WebKit2/WebKit2.pro:

2013-05-10  Laszlo Gombos  <l.gombos@samsung.com>

        Remove Mac OS X Leopard (10.5) support
        https://bugs.webkit.org/show_bug.cgi?id=107964

        Reviewed by Ryosuke Niwa.

        Removed the code for 10.5 and removed if-def for 10.6.

        * DumpRenderTree/cf/WebArchiveDumpSupport.cpp:
        (convertMIMEType):
        (createXMLStringFromWebArchiveData):
        * DumpRenderTree/mac/TestRunnerMac.mm:
        (TestRunner::authenticateSession):
        (TestRunner::setTextDirection):
        * WebKitTestRunner/cf/WebArchiveDumpSupport.cpp:
        (convertMIMEType):
        (createXMLStringFromWebArchiveData):

2013-05-10  Brent Fulgham  <bfulgham@apple.com>

        [Windows] Allow VS2010 Build to use VS2005 Support Libraries
        https://bugs.webkit.org/show_bug.cgi?id=115935

        Reviewed by Jer Noble.

        * WinLauncher/WinLauncher.vcxproj/WinLauncher.exe.manifest: Added.
        * WinLauncher/WinLauncher.vcxproj/WinLauncher.vcxproj: Add reference
        to the new manifest file.
        * WinLauncher/WinLauncher.vcxproj/WinLauncher.vcxproj.filters: Ditto.

2013-05-10  Jacky Jiang  <zhajiang@blackberry.com>

        Fix some compiler warnings (miscellaneous)
        https://bugs.webkit.org/show_bug.cgi?id=80790

        Reviewed by Rob Buis.

        Fix the following warnings for BlackBerry:
        DumpRenderTree.cpp:357:42: warning: suggest parentheses around assignment
        used as truth value [-Wparentheses].

        * DumpRenderTree/blackberry/DumpRenderTree.cpp:
        (BlackBerry::WebKit::DumpRenderTree::resetToConsistentStateBeforeTesting):

2013-05-10  Jesus Sanchez-Palencia  <jesus.palencia@openbossa.org>

        [WK2][CoordinatedGraphics] WKViewSetThemePath is EFL specific
        https://bugs.webkit.org/show_bug.cgi?id=115928

        Reviewed by Kenneth Rohde Christiansen.

        WKViewSetThemePath was moved to WKViewEfl.h.

        * TestWebKitAPI/efl/PlatformWebView.cpp:

2013-05-10  Andreas Kling  <akling@apple.com>

        I accidentally the Java testing.

        * Scripts/webkitpy/port/mac.py:

2013-05-10  Brian Holt  <brian.holt@samsung.com>

        [GTK] Module Cairo fails to build under jhbuild
        https://bugs.webkit.org/show_bug.cgi?id=115854

        Reviewed by Martin Robinson.

        Make cairo depend on glib in jhbuild.modules.

        * gtk/jhbuild.modules:

2013-05-10  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] Remove unnecessary GLIB_CHECK_VERSION #ifdefs
        https://bugs.webkit.org/show_bug.cgi?id=115904

        Reviewed by Martin Robinson.

        * ImageDiff/gtk/ImageDiff.cpp:
        (main):

2013-05-10  Balazs Kelemen  <kbalazs@webkit.org>

        Add my new address to contributors.json. (Unreviewed)

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

2013-05-10  Christophe Dumez  <ch.dumez@sisa.samsung.com>

        Unreviewed. Move myself to the reviewers list.

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

2013-05-10  Christophe Dumez  <ch.dumez@sisa.samsung.com>

        Unreviewed. Add my email to a few watchlists.

        * Scripts/webkitpy/common/config/watchlist:

2013-05-10  Simon Pena  <simon.pena@samsung.com>

        Unicode support missing from string representation of Contributors in committers.py
        https://bugs.webkit.org/show_bug.cgi?id=115859

        Reviewed by Darin Adler.

        Contributors, in committers.py, provided a string representation in __str__ which
        didn't support unicode characters, so printing a contributor would fail in that case.
        This patch implements __unicode__ and makes __str__ use it to represent a contributor.
        The unit tests are updated accordingly, so they ensure that a unicode name can be shown.

        * Scripts/webkitpy/common/config/committers.py: Move the existing string representation
        to the newly implemented method __unicode__, and make __str__ display its utf-8 encoded
        representation.
        (Contributor.__str__):
        (Contributor):
        (Contributor.__unicode__):
        * Scripts/webkitpy/common/config/committers_unittest.py: Add a new test that checks that
        a contributor with unicode characters can be represented as a string.
        (CommittersTest):
        (CommittersTest.test_contributor_encoding):

2013-05-09  Patrick Gansterer  <paroga@webkit.org>

        [WIN][DRT] Remove duplicated (start|stop)JavaScriptThreads()
        https://bugs.webkit.org/show_bug.cgi?id=92371

        Reviewed by Brent Fulgham.

        Use JavaScriptThreading.cpp where the same functionality is
        implemented too. This reduces the dependency on the pthread
        library. Also replace assert() with WebKit ASSERT().

        * DumpRenderTree/DumpRenderTree.vcxproj/DumpRenderTree/DumpRenderTree.vcxproj:
        * DumpRenderTree/win/DumpRenderTree.cpp:
        (dumpHistoryItem):
        (dumpBackForwardList):
        * DumpRenderTree/win/DumpRenderTree.vcproj:

2013-05-09  Patrick Gansterer  <paroga@webkit.org>

        [DRT] Replace JavaScriptThreadingPthreads.cpp with JavaScriptThreading.cpp
        https://bugs.webkit.org/show_bug.cgi?id=92505

        Reviewed by Brent Fulgham.

        * DumpRenderTree/DumpRenderTree.xcodeproj/project.pbxproj:
        * DumpRenderTree/JavaScriptThreading.cpp: Copied from DumpRenderTree/pthreads/JavaScriptThreadingPthreads.cpp.
        (javaScriptThreadsMutex):
        (javaScriptThreads):
        (runJavaScriptThread):
        (startJavaScriptThreads):
        (stopJavaScriptThreads):
        * DumpRenderTree/pthreads: Removed.
        * DumpRenderTree/pthreads/JavaScriptThreadingPthreads.cpp: Removed.

2013-05-09  Mario Sanchez Prada  <mario.prada@samsung.com>

        Unreviewed. Update Simon Pena email on his behalf.

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

2013-05-09  Christophe Dumez  <ch.dumez@sisa.samsung.com>

        Add support for [NoInterfaceObject] Web IDL extended attribute
        https://bugs.webkit.org/show_bug.cgi?id=115714

        Reviewed by Kentaro Hara.

        Update BindingsTests.generate_supplemental_dependency() to pass an
        additional windowConstructorsFile argument to preprocess-idls.pl.

        * Scripts/webkitpy/bindings/main.py:
        (BindingsTests.generate_supplemental_dependency):
        (BindingsTests.main):

2013-05-09  ChangSeok Oh  <changseok.oh@collabora.com>

        [GTK][AC] Buildfix after r149694
        https://bugs.webkit.org/show_bug.cgi?id=115797

        Reviewed by Gustavo Noronha Silva.

        Add CLUTTER_LIBS for linking TestWebCore.

        * TestWebKitAPI/GNUmakefile.am:

2013-05-08  Gyuyoung Kim  <gyuyoung.kim@samsung.com>

        [EFL] Remove unnecessary pkgs in EFL jhbuild
        https://bugs.webkit.org/show_bug.cgi?id=114908

        Reviewed by Laszlo Gombos.

        p11-kit, libgpg-error and libgcrypt don't influence on layout test. So, we don't need to
        handle them using jhbuild. We can reduce build time when using --update-efl.

        * efl/jhbuild.modules:

2013-05-08  Seokju Kwon  <seokju.kwon@gmail.com>

        [EFL] Disable SHADOW DOM feature in FeatureList.pm
        https://bugs.webkit.org/show_bug.cgi?id=115834

        Reviewed by Gyuyoung Kim.

        * Scripts/webkitperl/FeatureList.pm:

2013-05-08  Lucas Forschler  <lforschler@apple.com>

        Add Scheduler for Mac MtnLion 32bit Release builder.
        
        Unreviewed.
        
        * BuildSlaveSupport/build.webkit.org-config/config.json:

2013-05-08  Denis Nomiyama  <d.nomiyama@samsung.com>

        Update JSCIdentifier pretty printer in Tools/gdb/webkit.py
        https://bugs.webkit.org/show_bug.cgi?id=115808

        Reviewed by Darin Adler.

        The pretty printer for the JSCIdentifier in Tools/gdb/webkit.py
        was left outdated after r127191, when the m_string member was changed
        from UString to String. This patch calls the right pretty printer for it.

        * gdb/webkit.py:
        (JSCIdentifierPrinter.to_string): Use WTFPrettyPrinter instead of
        WTFImplPrettyPrinter.

2013-05-08  Andy Estes  <aestes@apple.com>

        [WebKit2] REGRESSION (Custom Protocols): Reproducible crash when navigating to URL with an invalid scheme
        https://bugs.webkit.org/show_bug.cgi?id=115790

        Reviewed by Alexey Proskuryakov.

        Added two API tests:

        1) Verify that +[WKBrowsingContextController (un)registerSchemeForCustomProtocol:] can be called with a nil NSString without crashing.
        2) Verify that +[WKCustomProtocol canInitWithRequest:] does not crash when passed an NSURLRequest with an invalid scheme.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WebKit2ObjC/CustomProtocolsInvalidScheme.mm: Added.
        (TestWebKitAPI):
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/WebKit2ObjC/CustomProtocolsInvalidScheme_Bundle.cpp: Added.
        (TestWebKitAPI):
        (TestWebKitAPI::decidePolicyForNavigationAction):
        (CustomProtocolInvalidSchemeTest):
        (TestWebKitAPI::CustomProtocolInvalidSchemeTest::CustomProtocolInvalidSchemeTest):

2013-05-08  Lucas Forschler  <lforschler@apple.com>

        Teach buildbot how to compile 32-bit on Mac.

        Reviewed by Ryosuke Niwa.

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

2013-05-08  Eli Fidler  <efidler@blackberry.com>

        [BlackBerry] Fix usage of BlackBerry::Platform::String
        https://bugs.webkit.org/show_bug.cgi?id=115781

        Reviewed by Rob Buis.

        BlackBerry PRs 304193 and 327181
        Internally Reviewed by Mike Lattanzio, Arvid Nilsson, Joe Mason, Jeff Rogers, and George Staikos

        We currently have a problem where we're passing UTF-8 encoded data into
        the char* constructors of BlackBerry::Platform::String. This means the string
        thinks its data is not UTF-8.

        * DumpRenderTree/blackberry/DumpRenderTree.cpp:
        (BlackBerry::WebKit::DumpRenderTree::resetToConsistentStateBeforeTesting):
        (BlackBerry::WebKit::dumpHistoryItem):
        * DumpRenderTree/blackberry/TestRunnerBlackBerry.cpp:
        (TestRunner::setUserStyleSheetLocation):
        * DumpRenderTree/blackberry/WorkQueueItemBlackBerry.cpp:
        (LoadHTMLStringItem::invoke):

2013-05-08  Alberto Garcia  <agarcia@igalia.com>

        Tools: add new BlackBerry include dirs.
        https://bugs.webkit.org/show_bug.cgi?id=115514

        Reviewed by Rob Buis.

        iType include dirs are missing, and HarfBuzz needs to be fixed.

        * Scripts/webkitdirs.pm:
        (blackberryCMakeArguments):

2013-05-08  José Dapena Paz  <jdapena@igalia.com> and Zan Dobersek  <zdobersek@igalia.com>

        [GTK] Plumb the Automake build system for the Battery Status API feature
        https://bugs.webkit.org/show_bug.cgi?id=115718

        Reviewed by Martin Robinson.

        * Scripts/webkitdirs.pm:
        (buildAutotoolsProject): List battery-status as a configurable feature, meaning its value will be adjusted
        through the --(enable|disable)-battery-status flag passed to configure.

2013-05-08  Ryosuke Niwa  <rniwa@webkit.org>

        new-run-webkit-websocketserver doesn't work after Chromium removal
        https://bugs.webkit.org/show_bug.cgi?id=115816

        Reviewed by Joseph Pecoraro.

        Fix the bug by instantiating the correct port object.

        * Scripts/new-run-webkit-websocketserver:
        (main):

2013-05-07  Lucas Forschler  <lforschler@apple.com>

        Configure buildbot for 32bit builder.
        https://bugs.webkit.org/show_bug.cgi?id=115769
        
        Reviewed by Ryosuke Niwa.

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

2013-05-08  Brent Fulgham  <bfulgham@webkit.org>

        Unreviewed. Update to show my apple.com address.

        * Scripts/webkitpy/common/config/contributors.json: Added
        my apple.com e-mail address.

2013-05-08  David Kilzer  <ddkilzer@apple.com>

        BUILD FIX (r149579): Use Vector::appendVector() instead of Vector::append()

        * DumpRenderTree/ios/AccessibilityUIElementIOS.mm:
        (concatenateAttributeAndValue): Switch to appendVector().

2013-05-08  Andras Becsi  <andras.becsi@digia.com>

        [Qt][WTR] Fix the build on Mac after r149692

        Unreviewed build fix.

        * WebKitTestRunner/InjectedBundle/InjectedBundlePage.cpp:
        (WTR::InjectedBundlePage::dumpDOMAsWebArchive):

2013-05-08  Mario Sanchez Prada  <mario.prada@samsung.com>

        Unreviewed. Added Anton Obzhirov to the list of contributors and myself
        to the watchlist for Accessibility.

        * Scripts/webkitpy/common/config/contributors.json: Added Anton Obzhirov.
        * Scripts/webkitpy/common/config/watchlist: Added myself.

2013-05-08  Andras Becsi  <andras.becsi@digia.com>

        [Qt] Build fails with clang
        https://bugs.webkit.org/show_bug.cgi?id=115741

        Reviewed by Benjamin Poulain.

        Since r149112 std::move is used in AtomicString for compilers that
        support rvalue references and this requires a standard library
        implementing c++11 move semantics.
        We only explicitely require c++11 for WebKit2, but since clang supports
        rvalue references the build of subtargets using AtomicString fails because
        of missing std::move.
        It is safe to add CONFIG += c++11 for the whole project when using clang
        since we explicitely disable c++11 for ANGLE that had probems with libc++.

        * qmake/mkspecs/features/unix/default_pre.prf:

2013-05-08  Darin Adler  <darin@apple.com>

        Fix one more place that needed to use adoptCF/NS
        https://bugs.webkit.org/show_bug.cgi?id=115778

        Reviewed by Benjamin Poulain.

        Not sure why I missed this code last time, but found a bit more code that needs
        to switch to the newer style adoptCF/NS.

        * WebKitTestRunner/cf/WebArchiveDumpSupport.cpp:
        (convertWebResourceDataToString): Use adoptCF.
        (convertWebResourceResponseToDictionary): Ditto.
        (createXMLStringFromWebArchiveData): Ditto.
        * WebKitTestRunner/mac/WebArchiveDumpSupportMac.mm:
        (createCFURLResponseFromResponseData): Use adoptNS and adoptCF.

2013-05-08  Commit Queue  <commit-queue@webkit.org>

        Unreviewed, rolling out r149271.
        http://trac.webkit.org/changeset/149271
        https://bugs.webkit.org/show_bug.cgi?id=115780

        The mangled symbols are now enforced through LDFLAGS
        (Requested by zdobersek on #webkit).

        * BuildSlaveSupport/gtk/daemontools-buildbot.conf:

2013-05-08  Zan Dobersek  <zdobersek@igalia.com>

        [Flakiness Dashboard] Remove the Chromium fallback platforms listing from the legend popup
        https://bugs.webkit.org/show_bug.cgi?id=115636

        Reviewed by Ryosuke Niwa.

        * TestResultServer/static-dashboards/flakiness_dashboard.js:
        (showLegend): Remove the listing of the Chromium fallback platforms from the legend popup. The code iterated
        through the platforms in the g_fallbacksMap dictionary to construct this part of the legend, but the dictionary,
        while Chromium-specific, can't be removed just yet as there's more code that uses it.

2013-05-06  Darin Adler  <darin@apple.com>

        Use adoptCF and adoptNS in more places, test code and code not compiled on Mac
        https://bugs.webkit.org/show_bug.cgi?id=115657

        Reviewed by Sam Weinig.

        This is similar to my last set of changes, but covers code that I missed with
        global replace using the Safari Xcode workspace.

        * DumpRenderTree/cf/WebArchiveDumpSupport.cpp:
        (convertWebResourceDataToString):
        (convertWebResourceResponseToDictionary):
        (createXMLStringFromWebArchiveData):
        * DumpRenderTree/cg/ImageDiffCG.cpp:
        (createImageFromStdin):
        (createDifferenceImage):
        (main):
        * DumpRenderTree/cg/PixelDumpSupportCG.cpp:
        (printPNG):
        (dumpBitmap):
        * DumpRenderTree/cg/PixelDumpSupportCG.h:
        (BitmapContext::BitmapContext):
        * DumpRenderTree/mac/MockWebNotificationProvider.mm:
        (-[MockWebNotificationProvider init]):
        * DumpRenderTree/mac/PixelDumpSupportMac.mm:
        (createBitmapContext):
        * DumpRenderTree/mac/TestRunnerMac.mm:
        (TestRunner::addDisallowedURL):
        (TestRunner::applicationCacheDiskUsageForOrigin):
        (TestRunner::localStorageDiskUsageForOrigin):
        (TestRunner::clearApplicationCacheForOrigin):
        (TestRunner::deleteLocalStorageForOrigin):
        (TestRunner::copyDecodedHostName):
        (TestRunner::copyEncodedHostName):
        (TestRunner::queueLoad):
        (TestRunner::setDomainRelaxationForbiddenForURLScheme):
        (TestRunner::setMockGeolocationPositionUnavailableError):
        (TestRunner::setUserStyleSheetLocation):
        (TestRunner::setValueForUser):
        (TestRunner::overridePreference):
        (TestRunner::setPersistentUserStyleSheetLocation):
        (TestRunner::execCommand):
        (TestRunner::findString):
        (TestRunner::isCommandEnabled):
        (TestRunner::addOriginAccessWhitelistEntry):
        (TestRunner::removeOriginAccessWhitelistEntry):
        (TestRunner::addUserScript):
        (TestRunner::addUserStyleSheet):
        (TestRunner::evaluateInWebInspector):
        (TestRunner::evaluateScriptInIsolatedWorld):
        (TestRunner::apiTestNewWindowDataLoadBaseURL):
        (-[SynchronousLoader connection:didReceiveAuthenticationChallenge:]):
        (TestRunner::authenticateSession):
        (TestRunner::grantWebNotificationPermission):
        (TestRunner::denyWebNotificationPermission):
        * DumpRenderTree/mac/WebArchiveDumpSupportMac.mm:
        (createCFURLResponseFromResponseData):
        * DumpRenderTree/mac/WorkQueueItemMac.mm:
        (LoadItem::invoke):
        (LoadHTMLStringItem::invoke):
        (ScriptItem::invoke):
        * DumpRenderTree/win/DumpRenderTree.cpp:
        (substringFromIndex):
        (urlSuitableForTestResult):
        (lastPathComponent):
        (sharedCFURLCache):
        * DumpRenderTree/win/ImageDiffCairo.cpp:
        (createImageFromStdin):
        (main):
        * DumpRenderTree/win/PixelDumpSupportWin.cpp:
        (createBitmapContextFromWebView):
        * DumpRenderTree/win/TestRunnerWin.cpp:
        (TestRunner::setUserStyleSheetLocation):
        (TestRunner::setPersistentUserStyleSheetLocation):
        * TestWebKitAPI/Tests/CustomProtocolsSyncXHRTest.mm:
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/TestWebKitAPI/mac/InstanceMethodSwizzler.mm:
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/WTF/cf/RetainPtrHashing.cpp:
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/WebKit2/FindMatches.mm:
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/WebKit2/WebArchive.cpp:
        (TestWebKitAPI::didReceiveMessageFromInjectedBundle):
        * TestWebKitAPI/Tests/WebKit2/mac/GetBackingScaleFactor.mm:
        (TestWebKitAPI::createWindow):
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/WebKit2/win/DoNotCopyANullCFURLResponse.cpp:
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/mac/AcceptsFirstMouse.mm:
        (TestWebKitAPI::AcceptsFirstMouse::runTest):
        * TestWebKitAPI/Tests/mac/AttributedString.mm:
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/mac/BackForwardList.mm:
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/mac/CancelLoadFromResourceLoadDelegate.mm:
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/mac/ContextMenuCanCopyURL.mm:
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/mac/DOMHTMLTableCellCellAbove.mm:
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/mac/DOMRangeOfString.mm:
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/mac/DeviceScaleFactorInDashboardRegions.mm:
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/mac/DeviceScaleFactorOnBack.mm:
        (TestWebKitAPI::DeviceScaleFactorOnBack::createWindow):
        * TestWebKitAPI/Tests/mac/DynamicDeviceScaleFactor.mm:
        (TestWebKitAPI::DynamicDeviceScaleFactor::createWindow):
        * TestWebKitAPI/Tests/mac/HTMLCollectionNamedItem.mm:
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/mac/HTMLFormCollectionNamedItem.mm:
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/mac/InspectorBar.mm:
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/mac/MemoryCacheDisableWithinResourceLoadDelegate.mm:
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/mac/MemoryCachePruneWithinResourceLoadDelegate.mm:
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/mac/PageVisibilityStateWithWindowChanges.mm:
        (TestWebKitAPI::PageVisibilityStateWithWindowChanges::runTest):
        * TestWebKitAPI/Tests/mac/RenderedImageFromDOMRange.mm:
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/mac/SetAndUpdateCacheModel.mm:
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/mac/SetDocumentURI.mm:
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/mac/SimplifyMarkup.mm:
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/mac/StringByEvaluatingJavaScriptFromString.mm:
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/mac/WillSendSubmitEvent.mm:
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/mac/WindowlessWebViewWithMedia.mm:
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/mac/PlatformUtilitiesMac.mm:
        (TestWebKitAPI::Util::MIMETypeForWKURLResponse):
        * TestWebKitAPI/mac/WebKitAgnosticTest.mm:
        (TestWebKitAPI::WebKitAgnosticTest::runWebKit1Test):
        (TestWebKitAPI::WebKitAgnosticTest::runWebKit2Test):
        * WebKitTestRunner/InjectedBundle/mac/InjectedBundlePageMac.mm:
        (WTR::testPathFromURL):
        * WebKitTestRunner/InjectedBundle/mac/TestRunnerMac.mm:
        (WTR::TestRunner::initializeWaitToDumpWatchdogTimerIfNeeded):
        * WebKitTestRunner/cg/TestInvocationCG.cpp:
        (WTR::createCGContextFromImage):
        (WTR::dumpBitmap):
        (WTR::TestInvocation::dumpPixelsAndCompareWithExpected):
        * WebKitTestRunner/mac/EventSenderProxy.mm:
        (WTR::EventSenderProxy::mouseScrollBy):
        * WebKitTestRunner/mac/PlatformWebViewMac.mm:
        (WTR::PlatformWebView::windowSnapshotImage):
        * WebKitTestRunner/win/TestControllerWin.cpp:
        (WTR::TestController::initializeTestPluginDirectory):
        Use adoptCF and adoptNS.

2013-05-07  Alex Christensen  <achristensen@apple.com>

        Fix a memory leak introduced in r149692
        https://bugs.webkit.org/show_bug.cgi?id=115766

        Reviewed by Mark Rowe.

        In r149692, the fix for <http://webkit.org/b/42324>, a call to WKBundleFrameCopyWebArchive was added without any 
        matching call to WKRelease. An earlier attempted fix in r149697 introduced a RetainPtr but failed to adopt the object.

        * WebKitTestRunner/InjectedBundle/InjectedBundlePage.cpp:
        (WTR::InjectedBundlePage::dumpDOMAsWebArchive):
        Fix the memory leak by switching to WKRetainPtr and adopting the returned object.

2013-05-07  Darin Adler  <darin@apple.com>

        [Win] Fix storage leak in Windows DumpRenderTree
        https://bugs.webkit.org/show_bug.cgi?id=115651

        Reviewed by Sam Weinig.

        * DumpRenderTree/win/DumpRenderTree.cpp:
        (lastPathComponent): Added a missing call to adoptCF.

2013-05-07  Alex Christensen  <achristensen@apple.com>

        fixed a memory leak introduced by bug 42324 by using a RetainPtr
        https://bugs.webkit.org/show_bug.cgi?id=115760

        Reviewed by Tim Horton.

        * WebKitTestRunner/InjectedBundle/InjectedBundlePage.cpp:
        (WTR::InjectedBundlePage::dumpDOMAsWebArchive):
        fixed memory leak, added UNUSED_PARAM macros

2013-05-07  Alex Christensen  <achristensen@apple.com>

        WebKitTestRunner needs testRunner.dumpDOMAsWebArchive
        https://bugs.webkit.org/show_bug.cgi?id=42324
        <rdar://problem/8193633>

        Reviewed by Tim Horton.

        * Tools/WebKitTestRunner/InjectedBundle/Bindings/TestRunner.idl:
        Added dumpDOMAsWebArchive JavaScript function to be called by test cases.
        * Tools/WebKitTestRunner/InjectedBundle/InjectedBundlePage.cpp:
        (WTR::InjectedBundlePage::dumpDOMAsWebArchive):
        Added dumpDOMAsWebArchive code that is called when dumping.        
        (WTR::InjectedBundlePage::dump):
        Made DOMAsWebArchive case when dumping call dumpDOMAsWebArchive.
        * Tools/WebKitTestRunner/InjectedBundle/InjectedBundlePage.h:
        (InjectedBundlePage):
        Added dumpDOMAsWebArchive declaration.
        * Tools/WebKitTestRunner/InjectedBundle/TestRunner.h:
        (WTR::TestRunner::dumpDOMAsWebArchive):
        Added dumpDOMAsWebArchive JS callback function that sets m_whatToDump to DOMAsWebArchive.
        * Tools/WebKitTestRunner/WebKitTestRunner.xcodeproj/project.pbxproj:
        Added WebArchiveDumpSupport.cpp, WebArchiveDumpSupport.h, WebArchiveDumpSupportMac.mm to project.
        * Tools/WebKitTestRunner/cf: Added.
        * Tools/WebKitTestRunner/cf/WebArchiveDumpSupport.cpp: Added.
        Copied from Tools/DumpRenderTree/cf for createXMLStringFromWebArchiveData and other functions it uses.
        (convertMIMEType):
        (convertWebResourceDataToString):
        (normalizeHTTPResponseHeaderFields):
        (normalizeWebResourceURL):
        (convertWebResourceResponseToDictionary):
        (compareResourceURLs):
        (createXMLStringFromWebArchiveData):
        * Tools/WebKitTestRunner/cf/WebArchiveDumpSupport.h: Added.
        Copied from Tools/DumpRenderTree/cf for used symbol declarations.
        * Tools/WebKitTestRunner/mac/WebArchiveDumpSupportMac.mm: Added.
        Copied from Tools/DumpRenderTree/mac for used functions.
        (createCFURLResponseFromResponseData):
        (supportedNonImageMIMETypes):

2013-05-07  Alex Christensen  <achristensen@apple.com>

        Updated style of WebArchiveDumpSupport before putting it into WebKitTestRunner.
        https://bugs.webkit.org/show_bug.cgi?id=115745

        Reviewed by Tim Horton.

        * DumpRenderTree/cf/WebArchiveDumpSupport.cpp:
        (compareResourceURLs):
        Updated style.

2013-05-06  Ryosuke Niwa  <rniwa@webkit.org>

        Add an 'isReadOnly' member to IDL parse tree structure
        https://bugs.webkit.org/show_bug.cgi?id=115704

        Reviewed by Kentaro Hara.

        Use newly added isReadOnly attribute.

        * WebKitTestRunner/InjectedBundle/Bindings/CodeGeneratorTestRunner.pm:
        (_generateHeaderFile):
        (_generateImplementationFile):
        (_staticValuesGetterImplementation):

2013-05-07  Anders Carlsson  <andersca@apple.com>

        Remove AlwaysInline.h from WTF
        https://bugs.webkit.org/show_bug.cgi?id=115727

        Reviewed by Brent Fulgham.

        The macro that used to be in AlwaysInline.h is now in Compiler.h so there's no reason
        to keep AlwaysInline.h around anymore.

        * DumpRenderTree/qt/DumpRenderTreeMain.cpp:
        * WebKitTestRunner/InjectedBundle/qt/InjectedBundleQt.cpp:

2013-05-07  Andras Becsi  <andras.becsi@digia.com>

        [Qt][WTR] QQuickWindowPrivate::setRenderWithoutShowing has been removed from Qt 5
        https://bugs.webkit.org/show_bug.cgi?id=114808

        Reviewed by Jocelyn Turcotte.

        QQuickWindow::grabWindow() has been implemented for isVisible=false for Qt 5.1.
        (https://codereview.qt-project.org/#change,54234)

        * WebKitTestRunner/qt/PlatformWebViewQt.cpp:
        (WTR::WrapperWindow::handleStatusChanged):

2013-05-06  Christophe Dumez  <ch.dumez@sisa.samsung.com>

        Unreviewed. Add my email to EFL and BindingsScripts watchlists.

        * Scripts/webkitpy/common/config/watchlist:

2013-05-06  Kangil Han  <kangil.han@samsung.com>

        [EFL][WK1][PerformanceTests] Adopt --no-timeout option implementation to DumpRenderTree
        https://bugs.webkit.org/show_bug.cgi?id=115645

        Reviewed by Gyuyoung Kim.

        To run performance tests in wk1, we need --no-timeout option implementation.
        So adopt it from gtk+ port.

        * DumpRenderTree/efl/DumpRenderTree.cpp:
        (shouldSetWaitToDumpWatchdog):
        (parseCommandLineOptions):
        * DumpRenderTree/efl/DumpRenderTreeEfl.h:
        * DumpRenderTree/efl/TestRunnerEfl.cpp:
        (TestRunner::setWaitToDump):

2013-05-06  Commit Queue  <commit-queue@webkit.org>

        Unreviewed, rolling out r149547.
        http://trac.webkit.org/changeset/149547
        https://bugs.webkit.org/show_bug.cgi?id=115682

        Added unittests that fail on bots and spits out text into
        stdout (Requested by rniwa on #webkit).

        * Scripts/import-w3c-tests: Removed.
        * Scripts/webkitpy/w3c/__init__.py: Removed.
        * Scripts/webkitpy/w3c/test_converter.py: Removed.
        * Scripts/webkitpy/w3c/test_converter_unittest.py: Removed.
        * Scripts/webkitpy/w3c/test_importer.py: Removed.
        * Scripts/webkitpy/w3c/test_importer_unittest.py: Removed.
        * Scripts/webkitpy/w3c/test_parser.py: Removed.
        * Scripts/webkitpy/w3c/test_parser_unittest.py: Removed.

2013-05-03  Gustavo Noronha Silva  <gns@gnome.org>

        [jhbuild] bump jhbuild version to take advantage of new improvements
        https://bugs.webkit.org/show_bug.cgi?id=115558

        Reviewed by Martin Robinson.

        One of the important improvements is jhbuild no longer fetches git
        repositories if they are already at the expected revision, which should
        make the EWS bots more robust to git servers unavailability.

        * jhbuild/jhbuild-wrapper: bump jhbuild to 496974221c3a8ac4fbbc3b0a577c71cac224130d.

2013-05-06  Manuel Rego Casasnovas  <rego@igalia.com>

        [GTK] Add webkit_uri_scheme_request_finish_error
        https://bugs.webkit.org/show_bug.cgi?id=94316

        Reviewed by Anders Carlsson.

        * MiniBrowser/gtk/main.c:
        (miniBrowserErrorQuark): Add function to create a global quark for
        MiniBrowser.
        (aboutURISchemeRequestCallback): Update MiniBrowser to use the new
        function webkit_uri_scheme_request_finish_error().

2013-05-06  Mike Lattanzio  <mlattanzio@blackberry.com>

        [BlackBerry] Enable and Expose Text Autosizing through BlackBerry::WebKit::WebSettings
        https://bugs.webkit.org/show_bug.cgi?id=113808

        Reviewed by Rob Buis.

        Modify FeatureList.pm and set ENABLE_TEXT_AUTOSIZING to default
        to true for BlackBerry.

        * Scripts/webkitperl/FeatureList.pm:

2013-05-06  Jessie Berlin  <jberlin@apple.com>

        check-webkit-style should complain about a layering violation if platform-specific guards are
        used in WebCore outside of the platform directory
        https://bugs.webkit.org/show_bug.cgi?id=115567

        Reviewed by Benjamin Poulain.

        * Scripts/webkitpy/style/checkers/cpp.py:
        (check_for_webcore_platform_layering_violation):
        If the file is in WebCore but not in platform and contains #if PLATFORM(SOMETHING), emit an error.
        (process_line):
        Add the check_for_webcore_platform_layering_violation.
        (CppChecker):
        List the new check.

        * Scripts/webkitpy/style/checkers/cpp_unittest.py:
        (CppStyleTest.test_webcore_platform_layering_violation):
        Add tests.

2013-05-06  David Kilzer  <ddkilzer@apple.com>

        webkit-patch: fix 'upload' command with Bugzilla 4.2.5
        <http://webkit.org/b/115667>

        Reviewed by Dirk Pranke.

        * Scripts/webkitpy/common/net/bugzilla/bugzilla.py:
        (Bugzilla._check_create_bug_response): Update regex to work with
        Bugzilla 3.2.3 and 4.2.5.
        * Scripts/webkitpy/common/net/bugzilla/bugzilla_unittest.py:
        (test__check_create_bug_response): Add new test that covers both
        old and new <title> variations.

2013-05-06  Zan Dobersek  <zdobersek@igalia.com>

        [Flakiness Dashboard] Stop decoding SnowLeopard builder names into platforms
        https://bugs.webkit.org/show_bug.cgi?id=115661

        Reviewed by Ryosuke Niwa.

        The Apple Mac Snow Leopard builders are no long present so there's no need to try to decode such
        builders into the APPLE_MAC_SNOW_LEOPARD platforms. Instead, check for the Mountain Lion builders
        and decode their names into the APPLE_MAC_MOUNTAIN_LION platforms.

        * TestResultServer/static-dashboards/flakiness_dashboard.js:
        * TestResultServer/static-dashboards/flakiness_dashboard_unittests.js:

2013-05-06  Zan Dobersek  <zdobersek@igalia.com>

        [Flakiness Dashboard] Remove everything Chromium from the builders.json-generating script
        https://bugs.webkit.org/show_bug.cgi?id=114603

        Reviewed by Ryosuke Niwa.

        * TestResultServer/generate_builders_json.py:
        (insert_builder_and_test_data): Only process the 'layout-tests' steps, but force the name that's used
        to represent these to be 'layout-test', for backwards compatibility.
        (main): Remove all the build.chromium.org masters.
        * TestResultServer/generate_builders_json_unittest.py: Clean up the Chromium-related test cases and update other ones.
        (GenerateBuildersJsonTest.test_generate_json_data.dummy_fetch_json):
        (GenerateBuildersJsonTest):
        (GenerateBuildersJsonTest.test_generate_json_data):
        * TestResultServer/static-dashboards/builders.jsonp: Updated after changes to the script, now only lists the
        test-running builders from the webkit.org master.

2013-05-06  Zan Dobersek  <zdobersek@igalia.com>

        [Flakiness Dashboard] Update expected outcome in a couple of unit tests after r148778
        https://bugs.webkit.org/show_bug.cgi?id=114988

        Reviewed by Ryosuke Niwa.

        * TestResultServer/static-dashboards/flakiness_dashboard_unittests.js: Update the expected platforms list, the Chromium
        and Apple Mac Snow Leopard platforms were removed with the Apple Mac Mountain Lion platform being added.
        * TestResultServer/static-dashboards/loader_unittests.js: Update the list of the expected loaded expectations platforms,
        mac-snowleopard isn't loaded anymore due to the support for the platform being removed, while the mac-wk2 is loaded twice,
        once for the Apple Mac Lion and once for the Apple Mac Mountain Lion platform.

2013-05-06  Zan Dobersek  <zdobersek@igalia.com>

        [Flakiness Dashboard] Remove the remaining traces of platform modifier unions
        https://bugs.webkit.org/show_bug.cgi?id=114954

        Reviewed by Ryosuke Niwa.

        * TestResultServer/static-dashboards/flakiness_dashboard.js:
        (processExpectationsForPlatform): Remove the platform tree traversal that checked for presence of the platform
        modifier unions in the list of modifiers.
        (generatePageForExpectationsUpdate): Only filter through the modifiers that do not represent build types or bug references.
        * TestResultServer/static-dashboards/flakiness_dashboard_unittests.js: Adjust the test cases for the realModifiers unit test.

2013-05-06  Zan Dobersek  <zdobersek@igalia.com>

        [Flakiness Dashboard] Simplify builder-name-based platform recognition
        https://bugs.webkit.org/show_bug.cgi?id=114957

        Reviewed by Ryosuke Niwa.

        * TestResultServer/static-dashboards/flakiness_dashboard.js:
        (determineBuilderPlatform): Renamed from nonChromiumPlatform.
        (chromiumPlatform): Removed, unnecessary.
        (platformAndBuildType): With Chromium builders are gone, meaning determineBuilderPlatform can be called by default
        to determine the platform of the builder. No need to check for 'DBG' substring in the builder name to determine whether
        the builder operates with debug builds, no webkit.org builders are named this way.
        * TestResultServer/static-dashboards/flakiness_dashboard_unittests.js:
        (platformAndBuildTypes): Remove Chromium-specific test cases, reducing the number of expected assertions this test will make.

2013-05-06  Andy Estes  <aestes@apple.com>

        Added two files I neglected to commit in r149589.

        * TestWebKitAPI/Tests/mac/CloseNewWindowInNavigationPolicyDelegate.mm: Added.
        * TestWebKitAPI/Tests/mac/OpenNewWindow.html: Added.

2013-05-04  Andy Estes  <aestes@apple.com>

        REGRESSION (r125592): Reproducible crash in DOMWindow::open when a delegate closes the new window in decidePolicyForNavigationAction
        https://bugs.webkit.org/show_bug.cgi?id=115609

        Reviewed by Oliver Hunt.

        Added an API test.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/mac/CloseNewWindowInNavigationPolicyDelegate.mm: Added.
        (+[TestDelegate shared]):
        (-[TestDelegate webView:decidePolicyForNavigationAction:request:frame:decisionListener:]):
        (-[TestDelegate webView:createWebViewWithRequest:]):
        (TestWebKitAPI):
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/mac/OpenNewWindow.html: Added.

2013-05-06  Antoine Quint  <graouts@apple.com>

        Manage the presentation of the snapshotted plug-in using JavaScript
        https://bugs.webkit.org/show_bug.cgi?id=115548

        Reviewed by Dean Jackson.

        Take into account the new plugInExtraScript method added to support
        the injection of a JS file from the chrome client to customize the
        rendering of a snapshotted plug-in's shadow tree.

        * WebKitTestRunner/InjectedBundle/InjectedBundlePage.cpp:
        (WTR::InjectedBundlePage::InjectedBundlePage):

2013-05-05  Anders Carlsson  <andersca@apple.com>

        Remove the Vector::append overload that takes a Vector
        https://bugs.webkit.org/show_bug.cgi?id=115535

        Reviewed by Andreas Kling.

        Use Vector::appendVector instead.

        * DumpRenderTree/mac/AccessibilityUIElementMac.mm:
        (concatenateAttributeAndValue):
        * WebKitTestRunner/InjectedBundle/mac/AccessibilityUIElementMac.mm:
        (WTR::concatenateAttributeAndValue):

2013-05-04  Sam Weinig  <sam@webkit.org>

        REGRESSION(r148312): Crash when calling WKPageClose(page) followed by WKPageTerminate(page)
        <rdar://problem/13702008>
        https://bugs.webkit.org/show_bug.cgi?id=115607

        Reviewed by Benjamin Poulain.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WebKit2/CloseThenTerminate.cpp: Added.
        (TestWebKitAPI::didFinishLoadForFrame):
        (TestWebKitAPI::TEST):
        Add test that calls WKPageClose, follow by WKPageTerminate. If it crashes, its not working.

2013-05-04  Zan Dobersek  <zdobersek@igalia.com>

        Unreviewed.

        * Scripts/webkitpy/common/config/contributors.json: Correcting my igalia.com email address.

2013-05-04  Mihnea Ovidenie  <mihnea@adobe.com>

        Unreviewed. Adding Radu Stavila as an Adobe contributor, working on CSSRegions.

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

2013-05-04  Zan Dobersek  <zdobersek@igalia.com>

        [GTK] Catch select.error exceptions in parse_output_lines
        https://bugs.webkit.org/show_bug.cgi?id=115253

        Reviewed by Gustavo Noronha Silva.

        Catch any select.error exceptions when waiting for the file descriptor to become readable when parsing the
        output lines in common.parse_output_lines. These are currently being thrown when running the GTK unit tests on
        builders, but are not fatal. Because of that they are at the moment only logged (writing out the file descriptor,
        error code and the error message) and the loop is re-entered.

        * gtk/common.py:
        (parse_output_lines):

2013-05-04  Zan Dobersek  <zdobersek@igalia.com>

        [GTK] Set up the TestWebCore in TestWebKitAPI
        https://bugs.webkit.org/show_bug.cgi?id=115237

        Reviewed by Gustavo Noronha Silva.

        Set up the WebCore unit test program, consisting of the unit tests under the TestWebKitAPI/Tests/WebCore directory.
        Again the approach of specifying libtool libraries multiple times in the TestWebCore program's LDFLAGS is used as
        a workaround for the layer violations and circular dependencies between various static libraries. Linking against
        either libwebkitgtk or libwebkit2gtk shared libraries is avoided due to the unit tests covering WebCore, which
        shouldn't rely on neither of the two distributable libraries (hence the dirty workaround).

        * TestWebKitAPI/GNUmakefile.am:

2013-05-03  Rebecca Hauck  <rhauck@adobe.com>

        Create a script to import W3C tests
        https://bugs.webkit.org/show_bug.cgi?id=111513

        Reviewed by Dirk Pranke.

        Script to automate the import of W3C tests into WebKit. 
        For the full description of how it works, see the comments
        at the top of test_importer.py.

        * Scripts/import-w3c-tests: Added.
        * Scripts/webkitpy/w3c/__init__.py: Added.
        * Scripts/webkitpy/w3c/test_converter.py: Added.
        (TestConverter):
        (TestConverter.__init__):
        (TestConverter.load_prefixed_prop_list):
        (TestConverter.load_file):
        (TestConverter.convert_for_webkit):
        (TestConverter.convert_testharness_paths):
        (TestConverter.convert_prefixed_properties):
        (TestConverter.scrub_unprefixed_props):
        (TestConverter.replace_tag):
        * Scripts/webkitpy/w3c/test_converter_unittest.py: Added.
        (TestConverterTest):
        (TestConverterTest.testLoadPrefixedPropList):
        (TestConverterTest.test_convertForWebkitNothingToConvert):
        (test_convertForWebkitHarnessOnly):
        (test_convertForWebkitPropsOnly):
        (test_convertForWebkitHarnessAndProps):
        (test_convertTestHarnessPaths):
        (test_convertPrefixedProperties):
        (verifyTestHarnessPaths):
        (verifyPrefixedProperties):
        (generateTestContent):
        * Scripts/webkitpy/w3c/test_importer.py: Added.
        (main):
        (parse_args):
        (validate_import_directory):
        (TestImporter):
        (TestImporter.__init__):
        (TestImporter.do_import):
        (TestImporter.get_changeset):
        (TestImporter.scan_source_directory):
        (TestImporter.import_tests):
        (TestImporter.setup_destination_directory):
        (TestImporter.get_test_status):
        (TestImporter.remove_deleted_files):
        (TestImporter.write_import_log):
        * Scripts/webkitpy/w3c/test_importer_unittest.py: Added.
        (TestImporterTest):
        (TestImporterTest.test_ImportDirWithNoTests):
        * Scripts/webkitpy/w3c/test_parser.py: Added.
        (TestParser):
        (TestParser.__init__):
        (TestParser.load_file):
        (TestParser.analyze_test):
        (TestParser.get_reftests):
        (TestParser.is_jstest):
        (TestParser.get_support_files):
        * Scripts/webkitpy/w3c/test_parser_unittest.py: Added.
        (TestParserTest):
        (TestParserTest.test_analyzeTestReftestOneMatch):
        (test_analyzeTestReftestMultipleMatches):
        (test_analyzeTestReftestMatchAndMismatch):
        (test_analyzeTestReftestWithRefSupportFiles):
        (test_analyzeJSTest):
        (test_analyzePixelTestAllTrue):
        (test_analyzePixelTestAllFalse):
        (test_analyzeNonHTMLFile):

2013-05-03  Christophe Dumez  <ch.dumez@sisa.samsung.com>

        Unreviewed. Update Viatcheslav Ostapenko's email in contributors.json.

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

2013-05-02  Nico Weber  <thakis@chromium.org>

        Remove a stale script file.
        https://bugs.webkit.org/show_bug.cgi?id=115521

        Reviewed by Anders Carlsson.

        This script was added in
        https://bugs.webkit.org/show_bug.cgi?id=17507, but it relies on the
        Bakefile system that was removed in
        https://bugs.webkit.org/show_bug.cgi?id=49983 . As a result, this
        script just asserts when it's run and is useless.

        * Scripts/update-sources-list.py: Removed.

2013-05-01  Glenn Adams  <glenn@skynav.com>

        [webkitpy] Need abstract base class for commands that analyze commit logs
        https://bugs.webkit.org/show_bug.cgi?id=115391

        Reviewed by Benjamin Poulain.

        Move commit log parsing functions into new abstract base class AbstractCommitLogCommand
        in preparation for adding two new commands that will reuse this functionality along with
        suggest-nominations. See https://bugs.webkit.org/show_bug.cgi?id=115387 and
        https://bugs.webkit.org/show_bug.cgi?id=115388.

        No new tests as this patch does not change existing functionality or behavior.

        * Scripts/webkitpy/tool/commands/suggestnominations.py:
        (AbstractCommitLogCommand): Add abstract base class for commands that analyze commit logs.
        (AbstractCommitLogCommand.__init__):
        (AbstractCommitLogCommand._init_options):
        (AbstractCommitLogCommand._parse_commit_message):
        (SuggestNominations): Move generic commit log parsing into new base class. Use new base class.
        (SuggestNominations.__init__): 
        (SuggestNominations._init_options):

2013-05-01  Seokju Kwon  <seokju.kwon@gmail.com>

        Web Inspector: Fix check-inspector-strings script and fix localized strings
        https://bugs.webkit.org/show_bug.cgi?id=115495

        Reviewed by Joseph Pecoraro.

        * Scripts/check-inspector-strings:

2013-05-01  Zan Dobersek  <zdobersek@igalia.com>

        [TestWebKitAPI] <WebKit2/WebKit2_C.h> being included in GTK WK1-only builds
        https://bugs.webkit.org/show_bug.cgi?id=115470

        Reviewed by Martin Robinson.

        In the TestWebKitAPI's config.h header, only include the <WebKit2/WebKit2_C.h> header when
        not building either of the IOS, Windows or GTK-WK1 platforms.

        Up until now the header was included for everything but the IOS and Windows platforms due to
        an incorrectly stated condition regarding the GTK platform.

        * TestWebKitAPI/config.h:

2013-05-01  Zan Dobersek  <zdobersek@igalia.com>

        [GTK] Split the forwarding headers stamp in the TestWebKitAPI GNUmakefile.am
        https://bugs.webkit.org/show_bug.cgi?id=115469

        Reviewed by Martin Robinson.

        Split the stamp-testwebkitapi-forwarding-headers into two stamps, one covering forwarding headers
        for the WebCore tests (under the Tests/WebCore directory) and the other covering forwarding headers
        for the WebKit2 tests and the injected bundle required by them.

        This makes it possible for the WebCore tests to compile when the WebKit2 build is disabled, i.e. the WebCore
        tests shouldn't depend on the WebKit2 build (though the forwarding headers generation script is stored
        under the WebKit2 code).

        The WebCore forwarding headers are generated by scanning only the files under the Tests/WebCore directory,
        while the WebKit2 forwarding headers generation should keep on scanning the complete root directory of the
        TestWebKitAPI subproject, though the target directory should be narrowed down if at all possible.

        * TestWebKitAPI/GNUmakefile.am:

2013-04-30  Glenn Adams  <glenn@skynav.com>

        Unreviewed. Add myself to watchlist entries.

        * Scripts/webkitpy/common/config/watchlist:

2013-04-30  Glenn Adams  <glenn@skynav.com>

        [webkitpy] suggest-nominations doesn't count all qualified patches
        https://bugs.webkit.org/show_bug.cgi?id=115285

        Reviewed by Benjamin Poulain.

        Fix commit analysis so that patches made by an existing committer are counted towards reviewer
        nomination. Improve commit log parsing.

        * Scripts/webkitpy/tool/commands/suggestnominations.py:
        (CommitLogError):
        (CommitLogError.__init__):
        (CommitLogMissingReviewer):
        (CommitLogMissingReviewer.__init__):
        (SuggestNominations):
        (SuggestNominations.__init__):
        (SuggestNominations._recent_commit_messages):
        (SuggestNominations._author_name_from_email):
        (SuggestNominations._contributor_from_email):
        (SuggestNominations._parse_commit_message):
        (SuggestNominations._count_commit):
        (SuggestNominations._count_recent_patches):
        (SuggestNominations._collect_nominations):
        (SuggestNominations._print_nominations):
        (SuggestNominations.execute):
        * Scripts/webkitpy/tool/commands/suggestnominations_unittest.py:
        (_make_options):
        (test_recent_commit_messages):
        (test_basic):

2013-04-30  Commit Queue  <rniwa@webkit.org>

        Unreviewed, rolling out r149309.
        http://trac.webkit.org/changeset/149309
        https://bugs.webkit.org/show_bug.cgi?id=115430

        The patch does not build on WK1-only builds of the GTK port
        (Requested by zdobersek on #webkit).

        * TestWebKitAPI/GNUmakefile.am:

2013-04-30  Christophe Dumez  <ch.dumez@sisa.samsung.com>

        Stop using "in" keyword in IDL files
        https://bugs.webkit.org/show_bug.cgi?id=115418

        Reviewed by Kentaro Hara.

        Remove "in" keyword from IDL files as this is no longer part of the Web
        IDL specification.

        * WebKitTestRunner/InjectedBundle/Bindings/AccessibilityController.idl:
        * WebKitTestRunner/InjectedBundle/Bindings/AccessibilityTextMarker.idl:
        * WebKitTestRunner/InjectedBundle/Bindings/AccessibilityTextMarkerRange.idl:
        * WebKitTestRunner/InjectedBundle/Bindings/AccessibilityUIElement.idl:
        * WebKitTestRunner/InjectedBundle/Bindings/EventSendingController.idl:
        * WebKitTestRunner/InjectedBundle/Bindings/GCController.idl:
        * WebKitTestRunner/InjectedBundle/Bindings/TestRunner.idl:
        * WebKitTestRunner/InjectedBundle/Bindings/TextInputController.idl:

2013-04-30  Christophe Dumez  <ch.dumez@sisa.samsung.com>

        [EFL] Enable scaled cursors
        https://bugs.webkit.org/show_bug.cgi?id=106242

        Reviewed by Gyuyoung Kim.

        Enable ENABLE_MOUSE_CURSOR_SCALE for EFL port.

        * Scripts/webkitperl/FeatureList.pm:

2013-04-30  Christophe Dumez  <ch.dumez@sisa.samsung.com>

        Replace "Optional" extended attribute by proper Web IDL "optional" keyword
        https://bugs.webkit.org/show_bug.cgi?id=115380

        Reviewed by Kentaro Hara.

        Replace WebKit-specific [Optional] extended attribute by Web IDL "optional"
        keyword.

        * WebKitTestRunner/InjectedBundle/Bindings/EventSendingController.idl:
        * WebKitTestRunner/InjectedBundle/Bindings/TestRunner.idl:

2013-04-30  Jocelyn Turcotte  <jocelyn.turcotte@digia.com>

        Fix the USE(3D_GRAPHICS) build with the standard OpenGL on Windows
        https://bugs.webkit.org/show_bug.cgi?id=114684

        Reviewed by Simon Hausmann.

        Remove the ANGLE requirement for USE(3D_GRAPHICS).
        This enables WebKit2 in the build when using a "-opengl desktop" configured Qt.

        * qmake/mkspecs/features/features.prf:

2013-04-29  Zan Dobersek  <zdobersek@igalia.com>

        [GTK] Disable Shadow DOM feature
        https://bugs.webkit.org/show_bug.cgi?id=115374

        Reviewed by Martin Robinson.

        Disable the Shadow DOM feature on the GTK port, the feature is planned for removal.

        * Scripts/webkitperl/FeatureList.pm:

2013-04-29  Glenn Adams  <glenn@skynav.com>

        [webkitpy] Add missing contributor email addresses
        https://bugs.webkit.org/show_bug.cgi?id=115394

        Reviewed by Ryosuke Niwa.

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

2013-04-29  Alberto Garcia  <agarcia@igalia.com>

        Remove all remaining Skia code
        https://bugs.webkit.org/show_bug.cgi?id=115263

        Reviewed by Benjamin Poulain.

        Remove all remaining references to Skia.

        * Scripts/webkitdirs.pm:
        (blackberryCMakeArguments):
        * Scripts/webkitpy/common/config/contributionareas.py:
        * Scripts/webkitpy/common/config/watchlist:

2013-04-29  Seokju Kwon  <seokju.kwon@gmail.com>

        Get rid of unused options in Tools/Scripts/webkit-build-directory
        https://bugs.webkit.org/show_bug.cgi?id=115383

        Reviewed by Darin Adler.

        * Scripts/webkit-build-directory:

2013-04-29  Alexey Proskuryakov  <ap@apple.com>

        [WK2][Mac] Test with NetworkProcess enabled.

        Fix the build for non-Mac.

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

2013-04-29  Alexey Proskuryakov  <ap@apple.com>

        [WK2][Mac] Test with NetworkProcess enabled.

        Reviewed by Sam Weinig.

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

2013-04-29  Zan Dobersek  <zdobersek@igalia.com>

        [GTK] Set up the TestWebCore in TestWebKitAPI
        https://bugs.webkit.org/show_bug.cgi?id=115237

        Reviewed by Gustavo Noronha Silva.

        Set up the WebCore unit test program, consisting of the unit tests under the TestWebKitAPI/Tests/WebCore directory.
        Again the approach of specifying libtool libraries multiple times in the TestWebCore program's LDFLAGS is used as
        a workaround for the layer violations and circular dependencies between various static libraries. Linking against
        either libwebkitgtk or libwebkit2gtk shared libraries is avoided due to the unit tests covering WebCore, which
        shouldn't rely on neither of the two distributable libraries (hence the dirty workaround).

        * TestWebKitAPI/GNUmakefile.am:

2013-04-29  Zan Dobersek  <zdobersek@igalia.com>

        [GTK] Set up the TestJavaScriptCore in TestWebKitAPI
        https://bugs.webkit.org/show_bug.cgi?id=115236

        Reviewed by Gustavo Noronha Silva.

        Set up the TestJavaScriptCore unit test program, consisting of the unit tests
        under the TestWebKitAPI/Tests/JavaScriptCore directory.

        * TestWebKitAPI/GNUmakefile.am:

2013-04-29  Zan Dobersek  <zdobersek@igalia.com>

        [GTK] Export the COLLECT_NO_DEMANGLE variable on the builders
        https://bugs.webkit.org/show_bug.cgi?id=115323

        Reviewed by Philippe Normand.

        Export the COLLECT_NO_DEMANGLE environment variable on the GTK BuildBot builders.
        Its presence enforces linkers to output mangled symbols when reporting linking failures
        due to unresolved references. People trying to fix the build can then simply copy
        the printed mangled symbol into the symbols.filter file instead of doing a manual build
        or connecting to the builders to discover the mangled version of the missing symbol.

        * BuildSlaveSupport/gtk/daemontools-buildbot.conf:

2013-04-28  Zan Dobersek  <zdobersek@igalia.com>

        Remove Chromium code from Tools/BuildSlaveSupport
        https://bugs.webkit.org/show_bug.cgi?id=115325

        Reviewed by Benjamin Poulain.

        Remove the two Chromium-specific scripts and the Chromium-specific parts from the code
        covering archiving test results and built products.

        * BuildSlaveSupport/built-product-archive:
        (archiveBuiltProduct):
        (extractBuiltProduct):
        * BuildSlaveSupport/chromium/output-android-device-status: Removed.
        * BuildSlaveSupport/chromium/remove-crash-logs: Removed.
        * BuildSlaveSupport/test-result-archive:
        (archiveTestResults):

2013-04-28  Seokju Kwon  <seokju.kwon@gmail.com>

        Remove support for Chromium from webkitdirs.pm
        https://bugs.webkit.org/show_bug.cgi?id=115338

        Reviewed by Darin Adler.

        * Scripts/webkitdirs.pm:
        (determineBaseProductDir):
        (argumentsForConfiguration):
        (builtDylibPathForName):
        (determineIsQt):
        (isAppleWebKit):

2013-04-28  Zan Dobersek  <zdobersek@igalia.com>

        Rename TestRunner's setAudioData to setAudioResult
        https://bugs.webkit.org/show_bug.cgi?id=115326

        Reviewed by Darin Adler.

        Rename the TestRunner's setAudioData method to setAudioResult. The new name better conveys the method's purpose
        than the previous one. The change is a simple rename, there's no change in the method's functionality. The
        affected tests are adjusted accordingly.

        * DumpRenderTree/qt/TestRunnerQt.cpp:
        (TestRunnerQt::setAudioResult):
        * DumpRenderTree/qt/TestRunnerQt.h:
        (TestRunnerQt):
        * WebKitTestRunner/InjectedBundle/Bindings/TestRunner.idl:
        * WebKitTestRunner/InjectedBundle/TestRunner.cpp:
        (WTR::TestRunner::setAudioResult):
        * WebKitTestRunner/InjectedBundle/TestRunner.h:
        (TestRunner):

2013-04-28  Zan Dobersek  <zdobersek@igalia.com>

        [WKTR] Tests dumping audio data shouldn't dump pixels
        https://bugs.webkit.org/show_bug.cgi?id=115270

        Reviewed by Benjamin Poulain.

        Prevent dumping the pixel output when Web Audio tests are dumping output data
        as the testing output. Pixel output in these tests has no real meaning and is
        as such unnecessary.

        * WebKitTestRunner/InjectedBundle/TestRunner.cpp:
        (WTR::TestRunner::setAudioData):

2013-04-27  Raphael Kubo da Costa  <raphael.kubo.da.costa@intel.com>

        [EFL] Unreviewed Intel bots fix after r149231.

        * efl/jhbuild.modules: Disable the libxml Python bindings since the
        bots don't have Python's development files installed. libxml should
        detect this kind of thing better.

2013-04-26  Ryuan Choi  <ryuan.choi@samsung.com>

        [EFL] Build break using jhbuild on ubuntu 13.04
        https://bugs.webkit.org/show_bug.cgi?id=115225

        Reviewed by Gyuyoung Kim.

        libxslt in Ubuntu 13.04 requires libxml 2.9.0 or higher and
        libxml 2.9.0 has a bug to make regression which r138422 mentioned.
        So this patch bumped libxml version to 2.9.1.

        * efl/jhbuild.modules:

2013-04-26  Jeffrey Pfau  <jpfau@apple.com>

        delete-stale-build-files does not clear .d files
        http://bugs.webkit.org/show_bug.cgi?id=115293

        Reviewed by Ryosuke Niwa.

        * BuildSlaveSupport/delete-stale-build-files:
        (main): Add .d to the file type list

2013-04-26  Roger Fong  <roger_fong@apple.com>

        Make Apple Windows VS2010 build results into and get dependencies from __32 suffixed folders.
        Make the DebugSuffix configuration use _debug dependencies.

        * DumpRenderTree/DumpRenderTree.vcxproj/DumpRenderTree/DumpRenderTree.vcxproj:
        * DumpRenderTree/DumpRenderTree.vcxproj/DumpRenderTree/DumpRenderTreeApple.props:
        * DumpRenderTree/DumpRenderTree.vcxproj/DumpRenderTree/DumpRenderTreeCommon.props:
        * DumpRenderTree/DumpRenderTree.vcxproj/DumpRenderTree/DumpRenderTreeDebug.props:
        * DumpRenderTree/DumpRenderTree.vcxproj/DumpRenderTree/DumpRenderTreeDebugWinCairo.props:
        * DumpRenderTree/DumpRenderTree.vcxproj/DumpRenderTree/DumpRenderTreeLauncher.vcxproj:
        * DumpRenderTree/DumpRenderTree.vcxproj/DumpRenderTree/DumpRenderTreeLauncherCommon.props:
        * DumpRenderTree/DumpRenderTree.vcxproj/DumpRenderTree/DumpRenderTreeLauncherDebug.props:
        * DumpRenderTree/DumpRenderTree.vcxproj/DumpRenderTree/DumpRenderTreeLauncherProduction.props:
        * DumpRenderTree/DumpRenderTree.vcxproj/DumpRenderTree/DumpRenderTreeLauncherRelease.props:
        * DumpRenderTree/DumpRenderTree.vcxproj/DumpRenderTree/DumpRenderTreePostBuild.cmd:
        * DumpRenderTree/DumpRenderTree.vcxproj/DumpRenderTree/DumpRenderTreeProduction.props:
        * DumpRenderTree/DumpRenderTree.vcxproj/DumpRenderTree/DumpRenderTreeRelease.props:
        * DumpRenderTree/DumpRenderTree.vcxproj/DumpRenderTree/DumpRenderTreeReleaseWinCairo.props:
        * DumpRenderTree/DumpRenderTree.vcxproj/ImageDiff/ImageDiff.vcxproj:
        * DumpRenderTree/DumpRenderTree.vcxproj/ImageDiff/ImageDiffCommon.props:
        * DumpRenderTree/DumpRenderTree.vcxproj/ImageDiff/ImageDiffDebug.props:
        * DumpRenderTree/DumpRenderTree.vcxproj/ImageDiff/ImageDiffDebugWinCairo.props:
        * DumpRenderTree/DumpRenderTree.vcxproj/ImageDiff/ImageDiffLauncher.vcxproj:
        * DumpRenderTree/DumpRenderTree.vcxproj/ImageDiff/ImageDiffLauncherCommon.props:
        * DumpRenderTree/DumpRenderTree.vcxproj/ImageDiff/ImageDiffLauncherDebug.props:
        * DumpRenderTree/DumpRenderTree.vcxproj/ImageDiff/ImageDiffLauncherProduction.props:
        * DumpRenderTree/DumpRenderTree.vcxproj/ImageDiff/ImageDiffLauncherRelease.props:
        * DumpRenderTree/DumpRenderTree.vcxproj/ImageDiff/ImageDiffProduction.props:
        * DumpRenderTree/DumpRenderTree.vcxproj/ImageDiff/ImageDiffRelease.props:
        * DumpRenderTree/DumpRenderTree.vcxproj/ImageDiff/ImageDiffReleaseWinCairo.props:
        * DumpRenderTree/DumpRenderTree.vcxproj/TestNetscapePlugin/TestNetscapePlugin.def:
        * DumpRenderTree/DumpRenderTree.vcxproj/TestNetscapePlugin/TestNetscapePlugin.vcxproj:
        * DumpRenderTree/DumpRenderTree.vcxproj/TestNetscapePlugin/TestNetscapePlugin.vcxproj.filters:
        * DumpRenderTree/DumpRenderTree.vcxproj/TestNetscapePlugin/TestNetscapePluginCommon.props:
        * DumpRenderTree/DumpRenderTree.vcxproj/TestNetscapePlugin/TestNetscapePluginDebug.props:
        * DumpRenderTree/DumpRenderTree.vcxproj/TestNetscapePlugin/TestNetscapePluginProduction.props:
        * DumpRenderTree/DumpRenderTree.vcxproj/TestNetscapePlugin/TestNetscapePluginRelease.props:
        * DumpRenderTree/TestNetscapePlugIn/win/TestNetscapePlugin_debug.def: Removed.
        * TestWebKitAPI/TestWebKitAPI.vcxproj/TestWebKitAPI.vcxproj:
        * TestWebKitAPI/TestWebKitAPI.vcxproj/TestWebKitAPICommon.props:
        * TestWebKitAPI/TestWebKitAPI.vcxproj/TestWebKitAPICommonWinCairo.props:
        * TestWebKitAPI/TestWebKitAPI.vcxproj/TestWebKitAPIDebug.props:
        * TestWebKitAPI/TestWebKitAPI.vcxproj/TestWebKitAPIDebugWinCairo.props:
        * TestWebKitAPI/TestWebKitAPI.vcxproj/TestWebKitAPIProduction.props:
        * TestWebKitAPI/TestWebKitAPI.vcxproj/TestWebKitAPIRelease.props:
        * TestWebKitAPI/TestWebKitAPI.vcxproj/TestWebKitAPIReleaseWinCairo.props:
        * WinLauncher/WinLauncher.vcxproj/WinLauncher.vcxproj:
        * WinLauncher/WinLauncher.vcxproj/WinLauncherCommon.props:
        * WinLauncher/WinLauncher.vcxproj/WinLauncherDebug.props:
        * WinLauncher/WinLauncher.vcxproj/WinLauncherLib.vcxproj:
        * WinLauncher/WinLauncher.vcxproj/WinLauncherLibCommon.props:
        * WinLauncher/WinLauncher.vcxproj/WinLauncherLibDebug.props:
        * WinLauncher/WinLauncher.vcxproj/WinLauncherLibProduction.props:
        * WinLauncher/WinLauncher.vcxproj/WinLauncherLibRelease.props:
        * WinLauncher/WinLauncher.vcxproj/WinLauncherProduction.props:
        * WinLauncher/WinLauncher.vcxproj/WinLauncherRelease.props:
        * win/AssembleBuildLogs/AssembleBuildLogs.vcxproj:
        * win/AssembleBuildLogs/AssembleLogs.cmd:
        * win/record-memory/record-memory.vcxproj:
        * win/record-memory/record-memoryDebug.props:
        * win/record-memory/record-memoryDebugWinCairo.props:
        * win/record-memory/record-memoryProduction.props:
        * win/record-memory/record-memoryRelease.props:
        * win/record-memory/record-memoryReleaseWinCairo.props:

2013-04-26  Zan Dobersek  <zdobersek@igalia.com>

        [GTK] Clean up the TestWebKitAPI GNUmakefile.am
        https://bugs.webkit.org/show_bug.cgi?id=115233

        Reviewed by Martin Robinson.

        Specify unconditional, non-installable program targets in one declaration. Only conditionally specify
        WebKit2-specific targets, not the complete target setups (i.e. targets' sources, cppflags listings etc.).
        Add missing unit test source files to the TestWTF program, namely HashSet.cpp and MetaAllocator.cpp.
        Specify the TestWTF program's CXXFLAGS to be the same as the global cxxflags as the source files need to
        be compiled with the -fno-rtti flag that's present in the global_cxxflags variable.

        * TestWebKitAPI/GNUmakefile.am:

2013-04-25  Andy Estes  <aestes@apple.com>

        [WebKit2] Loading a resource from a custom protocol in a synchronous XHR times out
        https://bugs.webkit.org/show_bug.cgi?id=115223

        Reviewed by Darin Adler.

        Added an API test.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj: Added new files.
        * TestWebKitAPI/Tests/CustomProtocolsSyncXHRTest.mm: Added.
        (TestWebKitAPI::TEST): Tested that a synchronous XHR does not time out
        when it loads a request with a custom protocol.
        * TestWebKitAPI/Tests/WebKit2/custom-protocol-sync-xhr.html: Added.
        * TestWebKitAPI/Tests/WebKit2ObjC/CustomProtocolsTest.mm: Moved the
        NSURLProtocol subclass to TestProtocol.{h, mm} and did some
        miscellaneous cleanup.
        * TestWebKitAPI/mac/TestProtocol.h: Copied from Source/WebKit2/WebProcess/WebProcessSupplement.h.
        * TestWebKitAPI/mac/TestProtocol.mm: Copied from Tools/TestWebKitAPI/Tests/WebKit2ObjC/CustomProtocolsTest.mm.
        (+[TestProtocol canInitWithRequest:]):
        (+[TestProtocol canonicalRequestForRequest:]):
        (+[TestProtocol requestIsCacheEquivalent:toRequest:]):
        (+[TestProtocol scheme]):
        (-[TestProtocol startLoading]):
        (-[TestProtocol stopLoading]):

2013-04-26  Martin Robinson  <mrobinson@igalia.com>

        Remove the remaining Skia #ifdefs
        https://bugs.webkit.org/show_bug.cgi?id=114886

        Reviewed by Benjamin Poulain.

        * DumpRenderTree/blackberry/PixelDumpSupportBlackBerry.cpp:
        (createBitmapContextFromWebView): Remove Skia #ifdef references.

2013-04-26  Mary Wu  <mary.wu@torchmobile.com.cn>

        [BlackBerry] Clean up load interface in WebPage
        https://bugs.webkit.org/show_bug.cgi?id=113267

        Reviewed by Rob Buis.

        Update DumpRenderTree with change of load() interface in WebPage.
        RIM Bug# 315535, internally reviewed by Joe Mason.

        * DumpRenderTree/blackberry/DumpRenderTree.cpp:
        (BlackBerry::WebKit::DumpRenderTree::runTest):

2013-04-26  Zan Dobersek  <zdobersek@igalia.com>

        Remove the HeapGraphSerializer unit test
        https://bugs.webkit.org/show_bug.cgi?id=115231

        Reviewed by Andreas Kling.

        Remove the HeapGraphSerializer unit test. The code it was testing was removed in r148921,
        specifically the Source/WebCore/inspector/HeapGraphSerializer.(cpp|h) files.

        * TestWebKitAPI/Tests/WebCore/HeapGraphSerializerTest.cpp: Removed.

2013-04-25  Seokju Kwon  <seokju.kwon@gmail.com>

        Remove support for Chromium from build/update scripts
        https://bugs.webkit.org/show_bug.cgi?id=115218

        Reviewed by Darin Adler.

        * Scripts/build-webkit:
        (writeCongrats):
        * Scripts/update-webkit:

2013-04-25  Seokju Kwon  <seokju.kwon@gmail.com>

        Remove support for Chromium from api-test
        https://bugs.webkit.org/show_bug.cgi?id=115211

        Reviewed by Dirk Pranke.

        * Scripts/build-api-tests:
        * Scripts/run-api-tests:
        (isSupportedPlatform):

2013-04-25  Seokju Kwon  <seokju.kwon@gmail.com>

        Get rid of Chromium in build-dumprendertree
        https://bugs.webkit.org/show_bug.cgi?id=115212

        Reviewed by Dirk Pranke.

        * Scripts/build-dumprendertree:

2013-04-25  Alexey Proskuryakov  <ap@apple.com>

        Pass relatedPage when creating a page in WebKitTestRunner
        https://bugs.webkit.org/show_bug.cgi?id=115206

        Reviewed by Geoffrey Garen.

        To make sure that window.open() opens in the same process even when using multiple processes.

        * WebKitTestRunner/PlatformWebView.h:
        * WebKitTestRunner/TestController.cpp:
        (WTR::TestController::createOtherPage):
        (WTR::TestController::createWebViewWithOptions):
        * WebKitTestRunner/efl/PlatformWebViewEfl.cpp:
        (WTR::PlatformWebView::PlatformWebView):
        * WebKitTestRunner/gtk/PlatformWebViewGtk.cpp:
        (WTR::PlatformWebView::PlatformWebView):
        * WebKitTestRunner/mac/PlatformWebViewMac.mm:
        (-[TestRunnerWKView initWithFrame:contextRef:pageGroupRef:relatedToPage:useTiledDrawing:]):
        (WTR::PlatformWebView::PlatformWebView):
        * WebKitTestRunner/qt/PlatformWebViewQt.cpp:
        (WTR::PlatformWebView::PlatformWebView):
        * WebKitTestRunner/win/PlatformWebViewWin.cpp:
        (WTR::PlatformWebView::PlatformWebView):

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

        Fix autocompletion for Benjamin. The Bugzilla email address must come first.

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

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

        Build fix. Forgot to merge args.

        * Scripts/webkitpy/tool/bot/irc_command.py:
        (Hi.execute):

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

        webkitbot should recognize its own nickname in greetings.
        https://bugs.webkit.org/show_bug.cgi?id=115196

        Reviewed by Andreas Kling.

        Make webkitbot recognize other forms of its nick. Also be tolerant of spaces between the nick and !.

        * Scripts/webkitpy/tool/bot/irc_command.py:
        (Hi.execute):

2013-04-25  Xavier Castano  <xcastanho@igalia.com>

        [GTK] Tools/gtk/install-dependencies added ragel dependency
        https://bugs.webkit.org/show_bug.cgi?id=115163

        Reviewed by Xan Lopez.

        The install-dependencies script was missing a dependency on ragel
        which is expected when building HarfBuzz.

        * gtk/install-dependencies: Added a dependency on ragel for both
        apt and yum.

2013-04-25  Eduardo Lima Mitev  <elima@igalia.com>

        [GTK] Remove pango from optional jhbuild dependencies
        https://bugs.webkit.org/show_bug.cgi?id=115162

        Reviewed by Martin Robinson.

        Pango is not needed since revision r148293 that lowers the pango
        dependency to 1.30, which is available in most distributions.

        * gtk/jhbuild-optional.modules: Removes description of pango module.

2013-04-25  Seokju Kwon  <seokju.kwon@gmail.com>

        Remove Chromium-specific cases from FeatureList.pm
        https://bugs.webkit.org/show_bug.cgi?id=115169

        Reviewed by Andreas Kling.

        * Scripts/webkitperl/FeatureList.pm:

2013-04-24  Seokju Kwon  <seokju.kwon@gmail.com>

        Remove checking chromium from run-webkit-tests
        https://bugs.webkit.org/show_bug.cgi?id=115139

        Reviewed by Benjamin Poulain.

        * Scripts/run-webkit-tests:
        (useNewRunWebKitTests):

2013-04-24  Simon Fraser  <simon.fraser@apple.com>

        Pixel tests in SVG are all broken in WK2
        https://bugs.webkit.org/show_bug.cgi?id=114218

        Reviewed by Darin Adler.
        
        Window snapshots in WebKitTestRunner on Mac are window-sized
        (800x600), which is wrong for the W3C SVG tests that require a
        480x360 snapshot.
        
        Fix by resizing the window, as well as the web view in
        PlatformWebView::resizeTo() so that window snapshots are correctly
        sized.
        
        Also do some drive-by cleanup of the window size constants in both
        DRT and WTR to remove magic numbers, and make the code more similar.
        
        * DumpRenderTree/TestRunner.cpp:
        (TestRunner::setShouldPaintBrokenImage):
        * DumpRenderTree/TestRunner.h:
        * DumpRenderTree/efl/DumpRenderTree.cpp:
        * DumpRenderTree/gtk/DumpRenderTree.cpp:
        (webInspectorShowWindow):
        * DumpRenderTree/mac/DumpRenderTree.mm:
        (createWebViewAndOffscreenWindow):
        (sizeWebViewForCurrentTest):
        * DumpRenderTree/mac/DumpRenderTreeMac.h:
        * DumpRenderTree/mac/PixelDumpSupportMac.mm:
        (createPagedBitmapContext):
        * DumpRenderTree/qt/DumpRenderTreeQt.cpp:
        (DumpRenderTree::DumpRenderTree):
        (DumpRenderTree::open):
        * DumpRenderTree/qt/TestRunnerQt.cpp:
        * DumpRenderTree/qt/TestRunnerQt.h:
        * DumpRenderTree/win/DumpRenderTree.cpp:
        (sizeWebViewForCurrentTest):
        * DumpRenderTree/wx/DumpRenderTreeWx.cpp:
        * WebKitTestRunner/TestController.cpp:
        (WTR::TestController::resetStateToConsistentValues):
        * WebKitTestRunner/TestController.h:
        * WebKitTestRunner/TestInvocation.cpp:
        (WTR::sizeWebViewForCurrentTest):
        * WebKitTestRunner/mac/PlatformWebViewMac.mm:
        (WTR::PlatformWebView::PlatformWebView):
        (WTR::PlatformWebView::resizeTo):

2013-04-24  Byungwoo Lee  <bw80.lee@samsung.com>

        [EFL] Fix build error after r148963.
        https://bugs.webkit.org/show_bug.cgi?id=115126

        Reviewed by Laszlo Gombos.

        Generate forwarding headers for 'CoordinatedGraphics' to generate WKView.h

        * TestWebKitAPI/PlatformEfl.cmake:

2013-04-24  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] Use stamp files for generate-forwarding-headers makefile rules
        https://bugs.webkit.org/show_bug.cgi?id=115118

        Reviewed by Martin Robinson.

        Use a stamp file for the TestWebKitAPI and WebKitTestRunner
        forwarding generator rules and don't call it for soup since there
        aren't soup directories in TestWebKitAPI and WebKitTestRunner.

        * TestWebKitAPI/GNUmakefile.am:
        * WebKitTestRunner/GNUmakefile.am:

2013-04-24  Simon Pena  <simon.pena@samsung.com>

        [GTK] Update build dependencies
        https://bugs.webkit.org/show_bug.cgi?id=115111

        Reviewed by Martin Robinson.

        The install-dependencies script was missing a dependency on EGL,
        which is expected when building Cairo.

        * gtk/install-dependencies: Added a dependency on libegl1-mesa
        for both apt and yum.

2013-04-24  Seokju Kwon  <seokju.kwon@gmail.com>

        Remove the Chromium-specific helper from run_webkit_tests.py
        https://bugs.webkit.org/show_bug.cgi?id=114996

        Reviewed by Dirk Pranke.

        * Scripts/webkitpy/layout_tests/run_webkit_tests.py:
        (parse_args):

2013-04-24  Sergio Correia  <sergio.correia@openbossa.org>

        [EFL][WK2]: Fix WKViewClientWebProcessCallbacks WK2 API test
        https://bugs.webkit.org/show_bug.cgi?id=114850

        Reviewed by Andreas Kling.

        Revision r148312 fixed WebPageProxy cleanup and also changed the process
        termination semantics when requested by the user so that a client is not
        notified of a crash anymore, since there was no crash anyway.

        That change broke WKViewClientWebProcessCallbacks WK2 API test, since it
        relied on being notified of a crash after calling WKPageTerminate(). As
        a result of not being notified of such non-existent crash, the test would
        timeout right after making the terminate call.

        This patch adds an InjectedBundle to be used for simulating a crash, by
        calling abort() upon receiving a "Crash" message, and thus we are able to
        keep testing the crash callback.

        This patch also re-enables the WKViewClientWebProcessCallbacks test, which
        had been disabled in revisions r148858 and r148855, since it was failing.

        * TestWebKitAPI/PlatformEfl.cmake:
        * TestWebKitAPI/Tests/WebKit2/efl/WKViewClientWebProcessCallbacks.cpp:
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/WebKit2/efl/WKViewClientWebProcessCallbacks_Bundle.cpp: Added.
        (TestWebKitAPI):
        (WKViewClientWebProcessCallbacksTest):
        (TestWebKitAPI::WKViewClientWebProcessCallbacksTest::WKViewClientWebProcessCallbacksTest):
        (TestWebKitAPI::WKViewClientWebProcessCallbacksTest::didReceiveMessage):

2013-04-24  Christophe Dumez  <ch.dumez@sisa.samsung.com>

        [EFL][WK2] WebKitTestRunner failures due to IconDatabase assertions
        https://bugs.webkit.org/show_bug.cgi?id=115095

        Reviewed by Antonio Gomes.

        Use different subfolders under DumpRenderTree Temp folder for every
        functionality (icon database, cache, localstorage, ...). This makes
        sure there is no conflict between the functionalities.

        In EFL's case, libsoup cache was causing problems for the icon
        database if sharing the same folder.

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

== Rolled over to ChangeLog-2013-04-24 ==
