2014-03-14  Jinwoo Song  <jinwoo7.song@samsung.com>

        [EFL][MiniBrowser] Revise help messages of command line parameters
        https://bugs.webkit.org/show_bug.cgi?id=130222

        Reviewed by Csaba Osztrogonác.

        Correct the default value description and make help messages to be consistent.

        * MiniBrowser/efl/main.c:

2014-03-12  Sergio Villar Senin  <svillar@igalia.com>

        Rename DEFINE_STATIC_LOCAL to DEPRECATED_DEFINE_STATIC_LOCAL
        https://bugs.webkit.org/show_bug.cgi?id=129612

        Reviewed by Darin Adler.

        For new code use static NeverDestroyed<T> instead.

        * DumpRenderTree/JavaScriptThreading.cpp:
        (javaScriptThreadsMutex):
        (javaScriptThreads):
        * DumpRenderTree/efl/EventSender.cpp:
        (touchPointList):
        (delayedEventQueue):
        * DumpRenderTree/win/FrameLoadDelegate.cpp:
        (delegatesWithDelayedWork):
        * Scripts/check-for-exit-time-destructors:
        * TestWebKitAPI/Tests/WebKit2/SeccompFilters.cpp:
        * TestWebKitAPI/Tests/WebKit2Gtk/WebProcessTest.cpp:
        (testsMap):

2014-03-13  Sanghyup Lee  <sh53.lee@samsung.com>

        [EFL][WK2] Fix compilation warning in Minibrowser
        https://bugs.webkit.org/show_bug.cgi?id=130132

        Reviewed by Csaba Osztrogonác.

        Replace mktemp() with mkstemp() to fix compilation warning in MiniBrowser.

        * MiniBrowser/efl/main.c:
        (on_download_request):

2014-03-13  Filip Pizlo  <fpizlo@apple.com>

        FTL should support IsBlah
        https://bugs.webkit.org/show_bug.cgi?id=130202

        Reviewed by Geoffrey Garen.
        
        Running existing JSRegress tests with noInline gives us coverage for these
        changes. Chances are, this will also give coverage for other interesting things
        as well.

        * Scripts/run-jsc-stress-tests:

2014-03-12  Brian Burg  <bburg@apple.com>

        Web Inspector: Remove unused callId parameter from evaluateInWebInspector
        https://bugs.webkit.org/show_bug.cgi?id=129744

        Reviewed by Timothy Hatcher.

        * DumpRenderTree/TestRunner.cpp:
        (evaluateInWebInspectorCallback):
        * DumpRenderTree/TestRunner.h:
        * DumpRenderTree/efl/TestRunnerEfl.cpp:
        (TestRunner::evaluateInWebInspector):
        * DumpRenderTree/gtk/TestRunnerGtk.cpp:
        (TestRunner::evaluateInWebInspector):
        * DumpRenderTree/mac/TestRunnerMac.mm:
        (TestRunner::evaluateInWebInspector):
        * DumpRenderTree/win/TestRunnerWin.cpp:
        (TestRunner::evaluateInWebInspector):
        * WebKitTestRunner/InjectedBundle/Bindings/TestRunner.idl:
        * WebKitTestRunner/InjectedBundle/TestRunner.cpp:
        (WTR::TestRunner::evaluateInWebInspector):
        * WebKitTestRunner/InjectedBundle/TestRunner.h:

2014-03-13  Jozsef Berta  <jberta.u-szeged@partner.samsung.com>

        [GTK] build-webkit shouldn't show error message when ninja isn't installed
        https://bugs.webkit.org/show_bug.cgi?id=130129

        Reviewed by Csaba Osztrogonác.

        * Scripts/webkitdirs.pm:
        (canUseNinja): Redirecting stderr to /dev/null

2014-03-13  Andres Gomez  <agomez@igalia.com>

        [GTK] "Tools/jhbuild/jhbuild-wrapper --gtk" build fails even after running Tools/gtk/install-dependencies due to missing proper libxml2 python bindings
        https://bugs.webkit.org/show_bug.cgi?id=130092

        Reviewed by Csaba Osztrogonác.

        Added "python-dev" as dependency for deb based distros. It is
        already present for rpm based distros. This dependency will allow
        libxml2 to generate its python bindings, needed by gtk-doc.

        * gtk/install-dependencies:

2014-03-12  Carlos Garcia Campos  <cgarcia@igalia.com>

        Unreviewed. Fix GTK+ cmake build after r165488.

        * MiniBrowser/gtk/CMakeLists.txt: Add CMAKE_BINARY_DIR to include dirs.

2014-03-12  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK][CMAKE] Remove compile warnings about GTK+ deprecated API
        https://bugs.webkit.org/show_bug.cgi?id=130014

        Reviewed by Martin Robinson.

        Include cmake or autotools config header.

        * MiniBrowser/gtk/BrowserDownloadsBar.c:
        * MiniBrowser/gtk/BrowserSearchBar.c:
        * MiniBrowser/gtk/BrowserWindow.c:
        * MiniBrowser/gtk/main.c:

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

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

        Didn't really fix the issue and broke another bot (Requested
        by mrobinson on #webkit).

        Reverted changeset:

        "[CMake] Newer versions of CMake cannot find older versions of
        Freetype"
        https://bugs.webkit.org/show_bug.cgi?id=130107
        http://trac.webkit.org/changeset/165471

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

        It should be possible to build WebKit with FTL on iOS
        https://bugs.webkit.org/show_bug.cgi?id=130116

        Reviewed by Dan Bernstein.

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

2014-03-12  Brent Fulgham  <bfulgham@apple.com>

        [Win] Remove use of QTSDK
        https://bugs.webkit.org/show_bug.cgi?id=130049

        Reviewed by Darin Adler.

        * DumpRenderTree/win/DumpRenderTree.cpp:
        (initialize): Remove QuickTime code.
        * win/AssembleBuildLogs/AssembleLogs.cmd: Don't grab logs from
        building QTMovieWin.

2014-03-12  Martin Robinson  <mrobinson@igalia.com>

        [GTK][CMAKE] Too verbose build output
        https://bugs.webkit.org/show_bug.cgi?id=130076

        Reviewed by Carlos Garcia Campos.

        Instead of building with cmake --build which isn't smart about pretty printing and
        colors, we build with a script which calls the proper build command.

        * Scripts/webkitdirs.pm:
        (buildCMakeGeneratedProject): For GTK+ call the script that we generate during
        the CMake configuration pass.

2014-03-11  Martin Robinson  <mrobinson@igalia.com>

        [CMake] Newer versions of CMake cannot find older versions of Freetype
        https://bugs.webkit.org/show_bug.cgi?id=130107

        Reviewed by Gustavo Noronha Silva.

        * gtk/jhbuildrc: Work around a bug in newer CMakes by giving the FREETYPE_DIR hint
        to CMake during jhbuild initialization.

2014-03-12  Zalan Bujtas  <zalan@apple.com>

        Add hiDPI support for compositing content in DumpRenderTree/WebKitTestRunner
        https://bugs.webkit.org/show_bug.cgi?id=129961

        Reviewed by Simon Fraser.

        Now scaled content can go through the window capturing mechanism too for compositing content.
        AppleMagnifiedMode is redundant.

        * DumpRenderTree/mac/DumpRenderTree.mm:
        (setDefaultsToConsistentValuesForTesting):
        (runTest):
        * DumpRenderTree/mac/PixelDumpSupportMac.mm:
        (createBitmapContextFromWebView):
        * WebKitTestRunner/PlatformWebView.h:
        * WebKitTestRunner/cg/TestInvocationCG.cpp:
        (WTR::TestInvocation::dumpPixelsAndCompareWithExpected):
        * WebKitTestRunner/mac/PlatformWebViewMac.mm:
        (WTR::PlatformWebView::didInitializeClients):
        (WTR::PlatformWebView::changeWindowScaleIfNeeded):
        (WTR::PlatformWebView::forceWindowFramesChanged):
        * WebKitTestRunner/mac/main.mm:
        (setDefaultsToConsistentValuesForTesting):

2014-03-12  Anton Obzhirov  <a.obzhirov@samsung.com>

        Unreviewed. Add myself as a committer.

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

2014-03-12  Ryuan Choi  <ryuan.choi@samsung.com>

        Unreviewed build fix on the EFL port when used lower version of ATK

        * WebKitTestRunner/InjectedBundle/atk/AccessibilityUIElementAtk.cpp:
        (WTR::AccessibilityUIElement::y): Fixed typo.

2014-03-11  Myles C. Maxfield  <mmaxfield@apple.com>

        Some images are blank in the rebaseline server UI
        https://bugs.webkit.org/show_bug.cgi?id=130104

        Reviewed by Tim Horton.

        Let the server check for images in the 'retries' directory
        if it can't find an image otherwise.

        * Scripts/webkitpy/tool/servers/rebaselineserver.py:
        (RebaselineHTTPRequestHandler.test_result):

2014-03-11  Gustavo Noronha Silva  <gustavo.noronha@collabora.com>

        [GTK][CMake] --update-gtk has no effect
        https://bugs.webkit.org/show_bug.cgi?id=130088

        Reviewed by Philippe Normand.

        * Scripts/webkitdirs.pm:
        (buildCMakeProjectOrExit): call update-webkitgtk-libs if --update-gtk has been passed
        as an argument.

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

        Add "System Font" to the list of whitelisted DRT fonts
        https://bugs.webkit.org/show_bug.cgi?id=130046

        Reviewed by Darin Adler.

        * DumpRenderTree/mac/DumpRenderTree.mm:
        (allowedFontFamilySet):
        * WebKitTestRunner/InjectedBundle/mac/ActivateFonts.mm:

2014-03-11  Martin Robinson  <mrobinson@igalia.com>

        [GTK] The jhbuild environment should set CMAKE_PREFIX_PATH and CMAKE_LIBRARY_PATH
        https://bugs.webkit.org/show_bug.cgi?id=130064

        Reviewed by Philippe Normand.

        * efl/jhbuildrc: Remove duplicated code.
        * gtk/jhbuildrc: Remove duplicated code.
        * jhbuild/jhbuildrc_common.py:
        (init): Move duplicated code from jhbuildrc's and extend setting CMake environment variables to
        GTK+. We always set the CMAKE_LIBRARY_PATH, which should be harmless for EFL 32-bit systems.
        and is apparently necessary for GTK+.

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

        check-webkit-style failed to complain about missing braces
        https://bugs.webkit.org/show_bug.cgi?id=34189

        Reviewed by Ryosuke Niwa.

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

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

        Remove Qt cruft from style checker.
        https://bugs.webkit.org/show_bug.cgi?id=130085

        Reviewed by Csaba Osztrogonác.

        There is no 'foreach' keyword in c++. That was a Qt feature
        added in: http://trac.webkit.org/changeset/46113
        Qt was removed from WebKit, so we should remove the checks
        of this keyword from check-webkit-style scripts.

        * Scripts/webkitpy/style/checkers/cpp.py:
        (check_spacing_for_function_call):
        (check_spacing):
        (check_braces):
        * Scripts/webkitpy/style/checkers/cpp_unittest.py:
        (CppStyleTest.test_mismatching_spaces_in_parens):
        (CppStyleTest.test_spacing_for_fncall):
        (WebKitStyleTest.test_braces):

2014-03-11  Martin Hodovan  <mhodovan@inf.u-szeged.hu>

        [GTK] update-webkitgtk-libs needs itstool
        https://bugs.webkit.org/show_bug.cgi?id=130082

        After http://trac.webkit.org/changeset/165110 WebKitGTK+ uses gtk-doc 1.20.
        itstool is a dependency of building gtk-doc from version 1.19, so it should
        be added to Tools/gtk/install-dependencies script, too.

        Reviewed by Philippe Normand.

        * gtk/install-dependencies:

2014-03-11  Eva Balazsfalvi  <evab.u-szeged@partner.samsung.com>

        webkitbot rollout ChangeLogs should be nicer
        https://bugs.webkit.org/show_bug.cgi?id=122654

        Reviewed by Csaba Osztrogonác.

        Added bug urls and descriptions of rolled out patches to the rollout changelog
        if they are present in the original changelog. Additionally removed the list of
        changed files and functions.

        * Scripts/webkitpy/common/checkout/changelog.py:
        (ChangeLog.update_with_unreviewed_message): Cut off the list of modified files.
        * Scripts/webkitpy/common/checkout/checkout.py:
        (Checkout._changelog_data_for_revision): Store bug description.
        * Scripts/webkitpy/common/checkout/checkout_mock.py:
        * Scripts/webkitpy/common/checkout/checkout_unittest.py:
        (CheckoutTest.test_commit_info_for_revision):
        * Scripts/webkitpy/common/checkout/commitinfo.py:
        (CommitInfo.bug_description): Added.
        (CommitInfo.to_json):
        * Scripts/webkitpy/common/checkout/commitinfo_unittest.py:
        (CommitInfoTest.test_commit_info_creation):
        * Scripts/webkitpy/tool/commands/download.py:
        (AbstractRolloutPrepCommand._prepare_state): Store bug ids and descriptions of rolled
        out patches for creating rollout changelog.
        (CreateRollout._prepare_state): Remove obsolete comments and code, the bug id that
        caused the regression is stored in state["bug_blocked"] now.
        * Scripts/webkitpy/tool/commands/download_unittest.py:
        (test_prepare_rollout):
        (test_create_rollout_multiple_revision):
        * Scripts/webkitpy/tool/steps/preparechangelogforrevert.py:
        (PrepareChangeLogForRevert._message_for_revert): Add bug urls and descriptions of
        rolled out patches to the changelog.
        (PrepareChangeLogForRevert.run):
        * Scripts/webkitpy/tool/steps/preparechangelogforrevert_unittest.py:
        (UpdateChangeLogsForRevertTest):
        (test_message_for_revert):
        * Scripts/webkitpy/tool/steps/reopenbugafterrollout.py:
        (ReopenBugAfterRollout.run):

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

        [ATK] Adjust WKTR/DRT to use new API from ATK 2.11.90
        https://bugs.webkit.org/show_bug.cgi?id=130021

        Reviewed by Mario Sanchez Prada.

        Replace deprecated functions to use new API from ATK 2.11.90.

        * DumpRenderTree/atk/AccessibilityUIElementAtk.cpp:
        (AccessibilityUIElement::x):
        (AccessibilityUIElement::y):
        (AccessibilityUIElement::width):
        (AccessibilityUIElement::height):
        (AccessibilityUIElement::clickPointX):
        (AccessibilityUIElement::clickPointY):
        * WebKitTestRunner/InjectedBundle/atk/AccessibilityUIElementAtk.cpp:
        (WTR::AccessibilityUIElement::x):
        (WTR::AccessibilityUIElement::y):
        (WTR::AccessibilityUIElement::width):
        (WTR::AccessibilityUIElement::height):
        (WTR::AccessibilityUIElement::clickPointX):
        (WTR::AccessibilityUIElement::clickPointY):

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

        [ATK] Expose aria-posinset and aria-setsize through object attributes
        https://bugs.webkit.org/show_bug.cgi?id=130011

        Reviewed by Chris Fleizach.

        Added missing implementation of numberAttributeValue both to WKTR and DRT.

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

2014-03-10  Brent Fulgham  <bfulgham@apple.com>

        [Win] Unreviewed build fix.

        Some bad Windows code was committed at some point that prevents the Apple Windows port
        from finding its runtime dependencies reliably.

        * win/DLLLauncher/DLLLauncherMain.cpp:
        (appleApplicationSupportDirectory): Restored this function.
        (modifyPath): Update to use appleApplicationSupportDirectory function.

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

        Let the user define the full address of the performance-site-server for uploading results
        https://bugs.webkit.org/show_bug.cgi?id=129819

        Reviewed by Ryosuke Niwa.

        Currently perftestsrunner.py assumes that the server uses https protocol all the time, which
        can be confusing. It's more straightforward, if you need to define explicitly the server's full
        address along with the protocol, when you're using this parameter. I added HTTPS as the default
        protocol for now, in order to avoid breaking the perf bots.

        * Scripts/webkitpy/performance_tests/perftestsrunner.py:
        (_upload_json):
        * Scripts/webkitpy/performance_tests/perftestsrunner_unittest.py:
        (MainTest.test_upload_json):

2014-03-10  Brent Fulgham  <bfulgham@apple.com>

        [Win] Pass environment to Pre-Build, Pre-Link, and Post-Build Stages.
        https://bugs.webkit.org/show_bug.cgi?id=130023

        Reviewed by Dean Jackson.

        * DumpRenderTree/DumpRenderTree.vcxproj/DumpRenderTree/DumpRenderTreeLauncher.vcxproj: Add missing
        /SAFESEH flag to DLL launcher process.

2014-03-09  Martin Robinson  <mrobinson@igalia.com>

        RunGtkWebKitGObjectDOMBindingsAPIBreakTests should be added to the BuildAndTestFactory not the TestFactory
        https://bugs.webkit.org/show_bug.cgi?id=129980

        Reviewed by Carlos Garcia Campos.

        * BuildSlaveSupport/build.webkit.org-config/master.cfg: Add RunGtkWebKitGObjectDOMBindingsAPIBreakTests to the correct factory.

2014-03-09  Martin Robinson  <mrobinson@igalia.com>

        [GTK] Remove the WebView source-mode WebKit1 test
        https://bugs.webkit.org/show_bug.cgi?id=129976

        Reviewed by Carlos Garcia Campos.

        * TestWebKitAPI/Tests/WebKitGtk/testwebview.c: Remove the source-mode test.

2014-03-08  Martin Robinson  <mrobinson@igalia.com>

        Unreviewed build fix for GTKbuild after the switch to CMake

        * gtk/common.py:
        (is_cmake_build): Like r165284, we need to assume CMake by default, since the
        test-only bot doesn't have any build files.

2014-03-07  Martin Robinson  <mrobinson@igalia.com>

        [GTK] built-product-archive does not handle GTK+ CMake build
        https://bugs.webkit.org/show_bug.cgi?id=129941

        * BuildSlaveSupport/built-product-archive:
        (archiveBuiltProduct): Fix the build by adding support to built-product-archive for
        the CMake build.

2014-03-07  Lorenzo Tilve  <ltilve@igalia.com>

        [GTK] Include CMake into install-dependencies script
        https://bugs.webkit.org/show_bug.cgi?id=129909

        Reviewed by Martin Robinson.

        As since r165267 buid-webkit uses CMake by default, the dependency
        with 'cmake' package should be introduced.

        * gtk/install-dependencies: Ditto.

2014-03-07  Martin Robinson  <mrobinson@igalia.com>

        REGRESSION(165267): Broke a webkitpy unit tests
        https://bugs.webkit.org/show_bug.cgi?id=129904

        Reviewed by Jon Honeycutt.

        * Scripts/webkitpy/port/gtk.py: Flip the default test to assume CMake by default.
        (GtkPort._is_cmake_build):

2014-03-07  Andres Gomez  <agomez@igalia.com>

        [GTK] webkit-patch setup-git-clone fails even after running Tools/gtk/install-dependencies
        https://bugs.webkit.org/show_bug.cgi?id=129893

        Reviewed by Martin Robinson.

        Added "git-svn" as dependency for deb based distros and,
        additionally, "subversion" for rpm based distros.

        * gtk/install-dependencies:

2014-03-07  Roger Fong  <roger_fong@apple.com>

        Remove dummy setSystemWebGLLoadPolicy client method.
        https://bugs.webkit.org/show_bug.cgi?id=129873.

        Reviewed by Dean Jackson.

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

2014-03-07  Mark Hahnenberg  <mhahnenberg@apple.com>

        run-jsc-stress-tests doesn't eagerly report test failures when using the shell runner
        https://bugs.webkit.org/show_bug.cgi?id=129886

        Reviewed by Mark Lam.

        * Scripts/jsc-stress-test-helpers/shell-runner.sh: Added a "verbose" mode to the shell runner.
        If we're in verbose mode, then we don't redirect any output when running each test. If we're not
        in verbose mode then we redirect stdout to /dev/null and allow any stderr output through.
        * Scripts/run-jsc-stress-tests: Redirect any sort of error output to stderr so that it will 
        make it through when in non-verbose mode.

2014-03-07  Martin Robinson  <mrobinson@igalia.com>

        [GTK] buid-webkit should use CMake by default
        https://bugs.webkit.org/show_bug.cgi?id=129855

        Reviewed by Carlos Garcia Campos.

        Make the CMake build the default GTK+ build when using build-webkit. This will
        ensure that all bots are using CMake. We do this by swapping --gtk and --gtkcmake,
        so that we have --gtk and --gtkautotools.

        * Scripts/webkitdirs.pm: Swap --gtkcmake/--gtk for --gtk/--gtkautotools.
        * Scripts/webkitpy/port/gtk.py: Ditto.

2014-03-06  Martin Robinson  <mrobinson@igalia.com>

        [CMake] [GTK] Build with ninja when it is available
        https://bugs.webkit.org/show_bug.cgi?id=129805

        Reviewed by Philippe Normand.

        * Scripts/webkitdirs.pm:
        (canUseNinja): Added this helper which tries to execute Ninja, in an effort to determine
        if it's available on the system.
        (cmakeGeneratedBuildfile): Return the path to the generated build file. Only Unix support ATM.
        (generateBuildSystemFromCMakeProject): For GTK+ compile with Ninja when possible.

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

        If the FTL is build-time enabled then it should be run-time enabled.

        Rubber stamped by Geoffrey Garen.

        * Scripts/run-jsc-stress-tests:

2014-03-06  Mark Hahnenberg  <mhahnenberg@apple.com>

        detectFailures in run-jsc-stress-tests can report everything was ok if too many tests fail
        https://bugs.webkit.org/show_bug.cgi?id=129837

        Reviewed by Michael Saboff.

        ls test_fail_* can fail if there are too many files that match. We then swallow that error, which makes everything seem ok.
        The fix is to use find instead of ls like we do in shell-runner.sh.

        * Scripts/run-jsc-stress-tests:

2014-03-06  Joseph Pecoraro  <pecoraro@apple.com>

        filter-build-webkit should not strip .o
        https://bugs.webkit.org/show_bug.cgi?id=129614

        Reviewed by Dean Jackson.

        This makes it much easier to jump from the failing output at
        the end back up to the compile errors earlier in the output.

        * Scripts/filter-build-webkit:

2014-03-06  Anders Carlsson  <andersca@apple.com>

        Build WebKit2 before building WebKit
        https://bugs.webkit.org/show_bug.cgi?id=129831
        <rdar://problem/15920020>

        Reviewed by Dan Bernstein.

        * Scripts/build-webkit:
        Always build WebKit2 and make sure to build it before WebKit when building on Mac.

2014-03-06  ChangSeok Oh  <changseok.oh@collabora.com>

        make-3.82 fails to build on ARM/Linux
        https://bugs.webkit.org/show_bug.cgi?id=107926

        Reviewed by Martin Robinson.

        Some ARM/Linux systems don't support PAGE_SIZE macro so that it causes a build failure.
        The related bug reporting is here. https://lists.debian.org/debian-kernel/2014/02/msg00274.html
        To avoid this, I propose to use sysconf(_SC_PAGESIZE) instead of PAGE_SIZE
        where it is not defined. See more details, http://linux.die.net/man/2/getpagesize

        * gtk/patches/make-3.82-arg-list-length.patch:

2014-03-06  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] Close the page when the view is disposed instead of when finalized
        https://bugs.webkit.org/show_bug.cgi?id=129783

        Reviewed by Sergio Villar Senin.

        Add test case but disabled for now because it's affetected by bug #129684.

        * TestWebKitAPI/Tests/WebKit2Gtk/TestMultiprocess.cpp:
        (testProcessPerWebView):

2014-03-06  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] MiniBrowser crashes when opening several urls passed as command line options
        https://bugs.webkit.org/show_bug.cgi?id=129738

        Reviewed by Sergio Villar Senin.

        The problem is that we are calling g_object_unref() for the
        WebKitWebSettings everytime we set it to a WebKitWebView, but the
        view only increases the reference counter when the settings is not
        the same it currently has. We should release our reference once.

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

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

        [GTK][CMake] Tarball is created with wrong tarball paths
        https://bugs.webkit.org/show_bug.cgi?id=129496

        Reviewed by Daniel Bates.

        * gtk/make-dist.py:
        (Manifest.__init__): I inadvertently inverted the logic of these checks when
        landing the original patch with some suggestions from the reviewer. With the
        checks corrected, the tarball path is constructed properly.

2014-03-05  Jae Hyun Park  <jaepark@webkit.org>

        Unreviewed. Update my email in contributors.json

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

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

        [WebGL] Use WKSI to see what the system policy for WebGL is
        https://bugs.webkit.org/show_bug.cgi?id=129722
        <rdar://problem/15790542>

        Reviewed by Tim Horton.

        Dummy entry for setSystemWebGLLoadPolicy.

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

2014-03-03  Martin Robinson  <mrobinson@igalia.com>

        [GTK][CMake] Generate documentation for the DOM bindings
        https://bugs.webkit.org/show_bug.cgi?id=126211

        Reviewed by Carlos Garcia Campos.

        * gtk/GNUmakefile.am: No longer generation sections and SGML files in the makefile.
        * gtk/generate-gtkdoc: Call the code from webkitdom.py to generate sections and SGML files.
        * gtk/generate-webkitdom-doc-files: Removed.
        * gtk/webkitdom.py: Moved WebKit GObject DOM bindings doc generation code here, so
        that it can be called by generate-gtkdoc.

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

        [GTK][CMake] build-webkit should rerun cmake if the Makefile is missing
        https://bugs.webkit.org/show_bug.cgi?id=129380

        Reviewed by Philippe Normand.

        * Scripts/webkitdirs.pm:
        (generateBuildSystemFromCMakeProject): Check for the existence of the Makefile before
        skipping CMake execution.

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

        [GTK] The jhbuild environment should have the latest stable release of gtk-doc
        https://bugs.webkit.org/show_bug.cgi?id=129651

        Reviewed by Philippe Normand.

        * gtk/jhbuild.modules: Add gtk-doc to the list of modules.

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

        [GTK] Give the WebKit GObject DOM bindings API break detection it's own buildbot bubble
        https://bugs.webkit.org/show_bug.cgi?id=129637

        Reviewed by Carlos Garcia Campos.

        * BuildSlaveSupport/build.webkit.org-config/master.cfg:
        (RunGtkWebKitGObjectDOMBindingsAPIBreakTests): Added this test runner.
        (RunGtkWebKitGObjectDOMBindingsAPIBreakTests.commandComplete): Run the breakage test command and scan the output.
        (RunGtkWebKitGObjectDOMBindingsAPIBreakTests.evaluateCommand): Return failure if there is missing API (an API break).
        New API typically just requires a rebaseline and isn't necessarily a faiulre.
        (TestFactory.__init__): Add the test for GTK+.
        * BuildSlaveSupport/build.webkit.org-config/mastercfg_unittest.py: Add a unit test for the new bubble.

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

        [ATK] Expose missing functionalities of AtkTableCell to AT
        https://bugs.webkit.org/show_bug.cgi?id=129492

        Reviewed by Mario Sanchez Prada.

        Reducing some code by using new API of AtkTableCell.

        * DumpRenderTree/atk/AccessibilityUIElementAtk.cpp:
        * WebKitTestRunner/InjectedBundle/atk/AccessibilityUIElementAtk.cpp:

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

        Preparing to run layout tests on Wincairo.
        https://bugs.webkit.org/show_bug.cgi?id=129709

        Reviewed by Brent Fulgham.

        * Scripts/webkitdirs.pm:
        (setPathForRunningWebKitApp):
        Add GStreamer directory for WinCairo running layout tests.
        * win/DLLLauncher/DLLLauncherMain.cpp:
        (modifyPath):
        Added the WinCairo bin32 or bin64 directory for running WinLauncher.

2014-03-04  Martin Robinson  <mrobinson@igalia.com>

        [GTK] Simplify the GObject DOM bindings API break check into one step
        https://bugs.webkit.org/show_bug.cgi?id=129571

        Reviewed by Carlos Garcia Campos.

        * GNUmakefile.am: Add the API break check to 'make check.'
        * gtk/check-for-webkitdom-api-breaks: Added. A combination of the two removed scripts.
        * gtk/check-gdom-symbols: Removed.
        * gtk/webkitdom.py: Added.
        (header_name_list_from_gtkdoc_config_file): Gets the names of all headers from the gtkdoc config file.
        (get_all_webkitdom_symbol_files): Find the symbol files from the names.

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

        Add Jeremy Jones to the contributors list as a contributor.

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

2014-03-03  Adenilson Cavalcanti  <cavalcantii@gmail.com>

        Unreviewed. Update contact email.
        https://bugs.webkit.org/show_bug.cgi?id=129610

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

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

        Web Inspector model tests load wrong inspector page under WebKitTestRunner
        https://bugs.webkit.org/show_bug.cgi?id=129460

        Reviewed by Dan Bernstein.

        Don't unconditionally open the inspector before running an inspector test.
        Instead, the test should request that the inspector open when it's ready.

        This change was lost during a rebase, but is the same change made to
        DumpRenderTree.

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

2014-03-02  Darin Adler  <darin@apple.com>

        Split TextIteratorBehavior into a separate header
        https://bugs.webkit.org/show_bug.cgi?id=129578

        Reviewed by Sam Weinig.

        * Scripts/sort-export-file: Added special cases to the script so you can just paste link errors
        from WebKit in and the script will add them in as unconditional exports. This makes the "add"
        task easy, but the remove is still a bit of a pain.

2014-03-02  Darin Adler  <darin@apple.com>

        Sort Mac platform export files so they merge better
        https://bugs.webkit.org/show_bug.cgi?id=129581

        Reviewed by Sam Weinig.

        * Scripts/sort-export-file: Added. Quickly whipped together script that sorts
        Mac export files in a "canonical" order for this project.

2014-02-28  Zalan Bujtas  <zalan@apple.com>

        Add hiDPI support to DumpRenderTree/WebKitTestRunner without the need of reloading the test case.
        https://bugs.webkit.org/show_bug.cgi?id=129438

        Reviewed by Simon Fraser.

        'hidpi-' prefixed test cases now trigger 2x scale factor on the testing
        offscreen window. It makes testing subpixel rendering and positioning possible.

        Both the offscreen window's and WebKit's scaling are set accordingly.

        * DumpRenderTree/mac/DumpRenderTree.mm:
        (createWebViewAndOffscreenWindow): cleanup
        (destroyWebViewAndOffscreenWindow): cleanup
        (dumpRenderTree):
        (changeWindowScaleIfNeeded):
        (runTest):
        * DumpRenderTree/mac/DumpRenderTreeWindow.h:
        * DumpRenderTree/mac/DumpRenderTreeWindow.mm:
        (-[DumpRenderTreeWindow initWithContentRect:styleMask:backing:defer:]): cleanup
        * WebKitTestRunner/PlatformWebView.h:
        * WebKitTestRunner/TestInvocation.cpp:
        (WTR::changeWindowScaleIfNeeded):
        (WTR::TestInvocation::invoke):
        * WebKitTestRunner/efl/PlatformWebViewEfl.cpp:
        (WTR::PlatformWebView::changeWindowScaleIfNeeded):
        * WebKitTestRunner/gtk/PlatformWebViewGtk.cpp:
        (WTR::PlatformWebView::changeWindowScaleIfNeeded):
        * WebKitTestRunner/ios/PlatformWebViewIOS.mm:
        (WTR::PlatformWebView::changeWindowScaleIfNeeded):
        * WebKitTestRunner/mac/PlatformWebViewMac.mm:
        (WTR::PlatformWebView::changeWindowScaleIfNeeded):

2014-02-28  Anders Carlsson  <andersca@apple.com>

        Remove logging.

        Reviewed by Dan Bernstein.

        * MiniBrowser/mac/WK2BrowserWindowController.m:
        (-[WK2BrowserWindowController browsingContextController:decidePolicyForNavigationAction:decisionHandler:]):

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

        [iOS] DumpRenderTree Perl Support may build against wrong SDK and toolchain
        https://bugs.webkit.org/show_bug.cgi?id=129163

        Reviewed by David Kilzer.

        Fixes an issue where DumpRenderTree Perl Support may build with the specified
        iOS Simulator SDK and toolchain instead of using the OS X SDK and toolchain.
        This issue manifests itself in a build failure when building the IPhoneSimulatorNotification
        bundle.

        Currently we build DumpRenderTree Perl Support with respect to the variable SDKROOT,
        which is specified either explicitly when building with MAKE(1) or implicitly by
        build-{dumprendertree, webkit}. Instead we should always build Perl Support using
        the OS X SDK and toolchain since the built products are only applicable to OS X.

        * DumpRenderTree/ios/PerlSupport/Makefile:

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

        Unreviewed, rolling out r164859.
        http://trac.webkit.org/changeset/164859
        https://bugs.webkit.org/show_bug.cgi?id=129483

        caused WK1 crashes (DumpRenderTree) (Requested by zalan on
        #webkit).

        * DumpRenderTree/mac/DumpRenderTree.mm:
        (createWebViewAndOffscreenWindow):
        (dumpRenderTree):
        (runTest):
        * DumpRenderTree/mac/DumpRenderTreeWindow.h:
        * DumpRenderTree/mac/DumpRenderTreeWindow.mm:
        (-[DumpRenderTreeWindow initWithContentRect:styleMask:backing:defer:]):
        * WebKitTestRunner/PlatformWebView.h:
        * WebKitTestRunner/TestInvocation.cpp:
        (WTR::TestInvocation::invoke):
        * WebKitTestRunner/efl/PlatformWebViewEfl.cpp:
        * WebKitTestRunner/gtk/PlatformWebViewGtk.cpp:
        * WebKitTestRunner/ios/PlatformWebViewIOS.mm:
        * WebKitTestRunner/mac/PlatformWebViewMac.mm:
        (-[WebKitTestRunnerWindow frameRespectingFakeOrigin]):

2014-02-28  Zalan Bujtas  <zalan@apple.com>

        Add hiDPI support to DumpRenderTree/WebKitTestRunner without the need of reloading the test case.
        https://bugs.webkit.org/show_bug.cgi?id=129438

        Reviewed by Simon Fraser.

        'hidpi-' prefixed test cases now trigger 2x scale factor on the testing
        offscreen window. It makes testing subpixel rendering and positioning possible.

        Both the offscreen window's and WebKit's scaling are set accordingly.

        * DumpRenderTree/mac/DumpRenderTree.mm:
        (createWebViewAndOffscreenWindow): unrelated cleanup.
        (destroyWebViewAndOffscreenWindow): unrelated cleanup.
        (dumpRenderTree):
        (changeOffscreenWindowScaleIfNeeded):
        (runTest):
        * DumpRenderTree/mac/DumpRenderTreeWindow.h:
        * DumpRenderTree/mac/DumpRenderTreeWindow.mm:
        (-[DumpRenderTreeWindow initWithContentRect:styleMask:backing:defer:]): cleanup.
        * WebKitTestRunner/PlatformWebView.h:
        * WebKitTestRunner/TestInvocation.cpp:
        (WTR::changeOffscreenWindowScaleIfNeeded):
        (WTR::TestInvocation::invoke):
        * WebKitTestRunner/mac/PlatformWebViewMac.mm:
        (WTR::PlatformWebView::changeOffscreenWindowScaleIfNeeded):

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

        Web Inspector: model tests should use a special Test.html inspector page
        https://bugs.webkit.org/show_bug.cgi?id=129190

        Reviewed by Timothy Hatcher.

        Remove code that immediately opens the Web Inspector based on the file path of the test.
        Instead, the test page should request that the inspector open inside its `test()` method.

        This change is necessary because otherwise, the inspector would be opened too early for
        InspectorController::isUnderTest to get set in time, so the normal Web Inspector page
        will get loaded instead of the minimal test page.

        * DumpRenderTree/efl/DumpRenderTree.cpp:
        (createTestRunner):
        * DumpRenderTree/gtk/DumpRenderTree.cpp:
        (runTest):
        * DumpRenderTree/mac/DumpRenderTree.mm:
        (runTest):
        * DumpRenderTree/win/DumpRenderTree.cpp:
        (runTest):

2014-02-27  Laszlo Vidacs  <lvidacs.u-szeged@partner.samsung.com>

        check-webkit-style indentation false alarm in WebKit/win/WebNodeHighlight.cpp
        https://bugs.webkit.org/show_bug.cgi?id=127076

        Reviewed by Anders Carlsson.

        Avoid match for :: as start of a member initialization list. Modify expression to match
        after a colon either non-colon character or end of line.

        * Scripts/webkitpy/style/checkers/cpp.py:
        (check_member_initialization_list):
        * Scripts/webkitpy/style/checkers/cpp_unittest.py:
        (WebKitStyleTest.test_member_initialization_list):

2014-02-27  Renata Hodovan  <rhodovan.u-szeged@partner.samsung.com>

        Unreviewed. Update my email addresses in contributors.json.

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

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

        [gtk-doc] UnicodeEncodeError: 'ascii' codec can't encode character
        https://bugs.webkit.org/show_bug.cgi?id=128927

        Reviewed by Philippe Normand.

        Encode manually the data for sys.{stdout,stderr}.write.

        * gtk/gtkdoc.py:
        (GTKDoc._run_command):

2014-02-27  Andres Gomez  <agomez@igalia.com>

        Unreviewed. Add myself to watchlists

        * Scripts/webkitpy/common/config/watchlist: Add myself to
        watchlists.

2014-02-27  Andres Gomez  <agomez@igalia.com>

        Unreviewed, rolling out r164790.
        http://trac.webkit.org/changeset/164790

        Revert r164790 because of erroneous commit log

        * Scripts/webkitpy/common/config/watchlist:

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

        [ATK] Utilize AtkTableCell to expose directly AccessibilityTableCell to AT
        https://bugs.webkit.org/show_bug.cgi?id=129250

        Reviewed by Mario Sanchez Prada.

        Changing version of ATK to 2.11.90, because it introduces AtkTableCell interface.
        Implementing methods so that we could test column/row headers represented as an array of cells.

        * DumpRenderTree/AccessibilityUIElement.cpp:
        * DumpRenderTree/atk/AccessibilityUIElementAtk.cpp:
        (AccessibilityUIElement::columnHeaders):
        (AccessibilityUIElement::rowHeaders):
        * DumpRenderTree/win/AccessibilityUIElementWin.cpp: Adding empty stubs, to not break compilation.
        (AccessibilityUIElement::columnHeaders):
        (AccessibilityUIElement::rowHeaders):
        * WebKitTestRunner/InjectedBundle/atk/AccessibilityUIElementAtk.cpp:
        (WTR::AccessibilityUIElement::rowHeaders):
        (WTR::AccessibilityUIElement::columnHeaders):
        * efl/jhbuild.modules:
        * gtk/jhbuild.modules:

2014-02-27  Andres Gomez  <agomez@igalia.com>

        Unreviewed. Add myself to watchlists

        * Scripts/webkitpy/common/config/watchlist: Add myself to
        watchlists.

2014-02-27  Andres Gomez  <agomez@igalia.com>

        Unreviewed. Add myself as a committer.

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

2014-02-27  Xabier Rodriguez Calvar  <calvaris@igalia.com>

        Unreviewed. Add Víctor Jáquez and myself to watchlists

        * Scripts/webkitpy/common/config/watchlist: Add Víctor Jáquez and
        myself to watchlists.

2014-02-26  Julien Brianceau  <jbriance@cisco.com>

        Unreviewed. Add myself as a committer.

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

2014-02-26  Laszlo Vidacs  <lvidacs.u-szeged@partner.samsung.com>

        Unreviewed. Moved myself to the list of committers.

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

2014-02-24  Martin Robinson  <mrobinson@igalia.com>

        [GTK] Reduplicate common.top_level_path in scripts
        https://bugs.webkit.org/show_bug.cgi?id=129291

        Reviewed by Philippe Normand.

        Duplicate common.top_level_path and avoid polluting many scripts with awkward system
        path manipulation and weird dependencies on the jhbuild infrastructure.

        * Scripts/run-gtk-tests: Use common again.
        (TestRunner._setup_testing_environment): Ditto.
        * gtk/check-gdom-symbols: Ditto.
        * gtk/common.py:
        (top_level_path): Re-add top_level_path..
        (get_build_path): Use the builtin top_level_path again.
        * gtk/find-make-dist-errors: Use common again.
        (get_missing_headers): Ditto.
        * gtk/generate-inspector-gresource-manifest.py: Ditto.

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

        runscript: line 42: /bin/ls: Argument list too long
        https://bugs.webkit.org/show_bug.cgi?id=129376

        Reviewed by Michael Saboff.

        The "test_script_*" can expand to more things than can be passed as arguments on the command line. 
        We should use find instead, which generates the list of files rather than expanding them all on 
        the command line and spitting them back out.

        * Scripts/jsc-stress-test-helpers/shell-runner.sh: 

2014-02-26  Martin Robinson  <mrobinson@igalia.com>

        ENABLE_PROMISES is improperly specified as ENABLE_PROMISE in Features.pm
        https://bugs.webkit.org/show_bug.cgi?id=129377

        Reviewed by Csaba Osztrogonác.

        * Scripts/webkitperl/FeatureList.pm: Properly specify the promises feature as ENABLE_PROMISES.

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

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

        Reviewed by Carlos Garcia Campos.

        Enable again gtk-doc generation in EWS once bug #128417 has been fixed.

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

2014-02-26  Martin Robinson  <mrobinson@igalia.com>

        [GTK] generate-gtkdoc can fail with WebKit1 or WebKit2 only builds
        https://bugs.webkit.org/show_bug.cgi?id=129319

        Reviewed by Carlos Garcia Campos.

        * gtk/generate-gtkdoc:
        (get_generator_for_config): Properly handle the situation where the pkgconfig file is missing.

2014-02-25  Mihai Maerean  <mmaerean@adobe.com>

        Unreviewed. Add myself as a committer.

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

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

        [CSS Grid Layout] Add ENABLE flag
        https://bugs.webkit.org/show_bug.cgi?id=129153

        Reviewed by Simon Fraser.

        Added ENABLE_CSS_GRID_LAYOUT feature flag. It's on by default for
        all ports for developer builds.

        * Scripts/webkitperl/FeatureList.pm:

2014-02-25  Dániel Bátyai  <dbatyai.u-szeged@partner.samsung.com>

        Added myself as a committer.

        Unreviewed.

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

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

        Unreviewed. Moved myself to the list of committers.

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

2014-02-25  Peter Molnar  <pmolnar.u-szeged@partner.samsung.com>

        Move myself to the committers list.

        Unreviewed.

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

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

        Unreviewed. Add myself as a committer.

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

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

        Unreviewed, rolling out r164639.
        http://trac.webkit.org/changeset/164639
        https://bugs.webkit.org/show_bug.cgi?id=129302

        gtk-doc still have problems in EWS (Requested by rego on
        #webkit).

        * Scripts/webkitpy/common/config/ports.py:
        (GtkPort.build_webkit_command):
        (GtkWK2Port.build_webkit_command):
        * Scripts/webkitpy/common/config/ports_unittest.py:
        (DeprecatedPortTest.test_gtk_port):
        (DeprecatedPortTest.test_gtk_wk2_port):

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

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

        Reviewed by Carlos Garcia Campos.

        Enable again gtk-doc generation in EWS once bug #128417 has been fixed.

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

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

        [GTK] Mark view source mode methods as deprecated
        https://bugs.webkit.org/show_bug.cgi?id=128920

        Reviewed by Martin Robinson.

        * TestWebKitAPI/Tests/WebKit2Gtk/TestWebKitWebView.cpp:
        (beforeAll): Remove view mode test.

2014-02-24  Martin Robinson  <mrobinson@igalia.com>

        [GTK] generate-gtkdoc should not generate documentation for source files for unbuilt source files
        https://bugs.webkit.org/show_bug.cgi?id=128417

        Reviewed by Carlos Garcia Campos.

        * gtk/GNUmakefile.am: Make the documentation process depend on the configuration files.
        * gtk/generate-gtkdoc: Switch from using hard-coded configurations to reading them from
        a makefile. This allows accepting a header list from the build system, which can be used
        to dynamically build a list of ignored files. We can ignore any source file that doesn't
        have a corresponding header file on the header list. 
        * gtk/gtkdoc.py: Now accept a headers parameter, which can be used instead of passing just
        source directories to gtkdoc-scan.

2014-02-24  Anders Carlsson  <andersca@apple.com>

        Add a DefaultVisitedLinkProvider and route visited link actions through it
        https://bugs.webkit.org/show_bug.cgi?id=129285

        Reviewed by Dan Bernstein.

        * MiniBrowser/mac/AppDelegate.m:
        (-[BrowserAppDelegate applicationDidFinishLaunching:]):
        Set a shared history so we'll get visited link tracking.

        * MiniBrowser/mac/WK1BrowserWindowController.m:
        (-[WK1BrowserWindowController awakeFromNib]):
        Set a group name.

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

        iOS build fix after r164577.

        * DumpRenderTree/ios/AccessibilityUIElementIOS.mm:
        (AccessibilityUIElement::selectedChildrenCount):
        (AccessibilityUIElement::selectedChildAtIndex):

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

        [ASan] Remove methods from ignore list that no longer cause crashes
        <http://webkit.org/b/129257>

        Reviewed by Anders Carlsson.

        * asan/webkit-asan-ignore.txt: Remove old methods.

2014-02-24  Tibor Meszaros  <tmeszaros.u-szeged@partner.samsung.com>

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

        Reviewed by Csaba Osztrogonác.

        Co-authored with Peter Szanka <h868064@stud.u-szeged.hu>.

        * Scripts/run-gtk-tests:
        (TestRunner._setup_testing_environment):
        * efl/common.py: Removed.
        * efl/jhbuildrc:
        * gtk/check-gdom-symbols:
        * gtk/common.py:
        (binary_build_path):
        (get_build_path):
        * gtk/find-make-dist-errors:
        (get_missing_headers):
        * gtk/generate-gtkdoc:
        (get_webkit2_options):
        (get_webkit1_options.src_path):
        (get_webkit1_options):
        (get_webkitdom_options.src_path):
        (get_webkitdom_options):
        * gtk/generate-inspector-gresource-manifest.py:
        * gtk/jhbuildrc:
        * jhbuild/jhbuildrc_common.py: Added.
        (script_path):
        (top_level_path):
        (init):

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

        Unreviewed. Fix code indentation and spacing.

        * Scripts/webkitpy/style/checkers/js.py:
        (SingleQuoteChecker.check):

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

        [ATK] Wrong selected element at a given index in a list box.
        https://bugs.webkit.org/show_bug.cgi?id=129039

        Reviewed by Chris Fleizach.

        Added missing implementation and proposed some new function for testing selection
        in a list boxes.

        * DumpRenderTree/AccessibilityUIElement.cpp:
        (setSelectedChildAtIndexCallback):
        (removeSelectionAtIndexCallback):
        (AccessibilityUIElement::getJSClass):
        * DumpRenderTree/AccessibilityUIElement.h:
        * DumpRenderTree/atk/AccessibilityUIElementAtk.cpp:
        (AccessibilityUIElement::selectedChildrenCount):
        (AccessibilityUIElement::selectedChildAtIndex):
        (AccessibilityUIElement::setSelectedChildAtIndex):
        (AccessibilityUIElement::removeSelectionAtIndex):
        * DumpRenderTree/win/AccessibilityUIElementWin.cpp:
        (AccessibilityUIElement::selectedChildrenCount):
        (AccessibilityUIElement::selectedChildAtIndex):
        * WebKitTestRunner/InjectedBundle/AccessibilityUIElement.cpp:
        (WTR::AccessibilityUIElement::setSelectedChildAtIndex):
        (WTR::AccessibilityUIElement::removeSelectionAtIndex):
        * WebKitTestRunner/InjectedBundle/AccessibilityUIElement.h:
        * WebKitTestRunner/InjectedBundle/Bindings/AccessibilityUIElement.idl:
        * WebKitTestRunner/InjectedBundle/atk/AccessibilityUIElementAtk.cpp:
        (WTR::AccessibilityUIElement::selectedChildAtIndex):
        (WTR::AccessibilityUIElement::selectedChildrenCount):
        (WTR::AccessibilityUIElement::setSelectedChildAtIndex):
        (WTR::AccessibilityUIElement::removeSelectionAtIndex):

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

        [GTK] Fix build after Web Inspector code reorganization (r164543)
        https://bugs.webkit.org/show_bug.cgi?id=129231

        Reviewed by Dean Jackson.

        * gtk/generate-inspector-gresource-manifest.py:
        Modify paths to Web Inspector code.

2014-02-23  Martin Robinson  <mrobinson@igalia.com>

        [GTK] generate-gtkdoc should use argparse
        https://bugs.webkit.org/show_bug.cgi?id=128418

        Reviewed by Carlos Garcia Campos.

        * gtk/generate-gtkdoc: Get all arguments from argparse, pass then as parameters
        to all functions, and guard the main routine with a __name__ == __main__ check.

2014-02-23  Martin Robinson  <mrobinson@igalia.com>

        [GTK][CMake] Many plugin tests fail when running WebKit1 layout tests
        https://bugs.webkit.org/show_bug.cgi?id=129191

        Reviewed by Anders Carlsson.

        * DumpRenderTree/PlatformGTK.cmake: Properly specify the library build directory
        for the GTK+ DumpRenderTree build. We could manually construct this path, but the
        name of the directory is "lib" and not "libs". Instead we should use the CMake
        variable specifically assigned to this task.

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

        [ASan] Add JSC::DFG::prepareOSREntry() to ignore list
        <http://webkit.org/b/129209>

        Reviewed by Geoffrey Garen.

        * asan/webkit-asan-ignore.txt: Add DFG::prepareOSREntry() to the
        ignore list to make ASan builds usable again.  Follow-up
        investigation is tracked by <rdar://problem/16055903>.

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

        Make old-run-webkit-tests work with iOS Simulator WebKitTestRunner
        https://bugs.webkit.org/show_bug.cgi?id=128622

        Reviewed by Simon Fraser.

        With this change, we now have layout tests running in both DumpRenderTree
        and WebKitTestRunner, with WebKit and WebKit2 used respectively in the iOS
        simulator.

        * Scripts/old-run-webkit-tests:
        In general, make any specific reference to DumpRenderTree
        able to refer to WebKitTestRunner wherever possible:
        - Rename functions to remove DRT-specific naming.
        - Name FIFOs after the tool that is being used.
        -- Clean up FIFO creation code
        Other necessary changes:
        - Allow use of an ios-sim-wk2 platform.
        - Clean up platform hierarchy creation where the simulator platform behavior differed.
        * WebKitTestRunner/TestController.cpp:
        Open FIFOs to get dumps out of the simulator as we do in DumpRenderTree.
        (WTR::TestController::TestController):
        * WebKitTestRunner/WebKitTestRunner.xcodeproj/project.pbxproj:
        Copy the injected bundle into the app bundle.

2014-02-21  Joseph Pecoraro  <pecoraro@apple.com>

        run-webkit-httpd fails to find httpd configuation file.

        Reviewed by Ryosuke Niwa.

        * Scripts/webkitperl/httpd.pm:
        (getHTTPDConfigPathForTestDirectory):

2014-02-21  Eric Carlson  <eric.carlson@apple.com>

        Fix TimeRanges layering violations
        https://bugs.webkit.org/show_bug.cgi?id=128717

        Reviewed by Jer Noble.

        * TestWebKitAPI/Tests/WebCore/TimeRanges.cpp: TimeRanges* -> TimeRanges&.
        (TestWebKitAPI::TEST):

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

        Web Inspector: update check-webkit-style to flag single quotes in WebInspectorUI projects
        https://bugs.webkit.org/show_bug.cgi?id=128422

        Reviewed by Joseph Pecoraro.

        * Scripts/webkitpy/style/checkers/js.py:
        (JSChecker.__init__):
        (JSChecker.check):
        (SingleQuoteChecker):
        (SingleQuoteChecker.__init__):
        (SingleQuoteChecker.check):
        * Scripts/webkitpy/style/checkers/js_unittest.py:
        (JSTestCase.assertError.error_for_test):
        (JSTestCase.assertError):
        (JSTestCase.test_no_error):
        (JSTestCase.test_error):

== Rolled over to ChangeLog-2014-02-20 ==
