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