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 ==
