2014-06-26  Brady Eidson  <beidson@apple.com>

        MiniBrowser should support a preference to override the default URL
        https://bugs.webkit.org/show_bug.cgi?id=134373

        Reviewed by Darin Adler.

        * MiniBrowser/mac/AppDelegate.m:
        (-[BrowserAppDelegate applicationDidFinishLaunching:]): See if there’s a pref
          overriding the default URL, and use it if there is.

2014-06-26  Brent Fulgham  <bfulgham@apple.com>

        [Win] Fix potential buffer overrun in DLLLauncher
        https://bugs.webkit.org/show_bug.cgi?id=134351
        <rdar://problem/17469185>

        Reviewed by Darin Adler.

        * win/DLLLauncher/DLLLauncherMain.cpp: Correct error
        in end-of-buffer calculation.

2014-06-26  Tamas Gergely  <tgergely.u-szeged@partner.samsung.com>

        [EFL] Missing dependency between freetype6 and fontconfig libs.
        https://bugs.webkit.org/show_bug.cgi?id=134190

        Reviewed by Gyuyoung Kim.

        The external dependencies contain the freetype6 and the fontconfig libs.
        The fontconfig lib requires freetype, but the dependency is not set in
        the efl/jhbuild.modules file. So, during building the external libs,
        fontconfig uses the freetype package of the system, while WebKit
        binaries will use freetype from the WebKitBuild/Dependency directory.
        There are more similar dependencies that were not indicated in the
        jhbuild.modules file.

        * efl/jhbuild.modules:
          Added dependencies between libs.

2014-06-25  Brent Fulgham  <bfulgham@apple.com>

        [Win] Expose Cache Information to WinLauncher
        https://bugs.webkit.org/show_bug.cgi?id=134318

        Reviewed by Dean Jackson.

        * WinLauncher/Common.cpp: Update for new dialog.
        * WinLauncher/WinLauncher.cpp: Add support for WebCache
        and WebCoreStatistics.
        * WinLauncher/WinLauncher.h:
        * WinLauncher/WinLauncher.vcxproj/WinLauncherLib.rc:
        Update for new Cache Dialog.
        * WinLauncher/WinLauncher.vcxproj/WinLauncherLibCommon.props: Link to
        WTF.lib
        * WinLauncher/WinLauncher.vcxproj/WinLauncherLibResource.h: Update
        for new Dialog.

2014-06-26  Brent Fulgham  <bfulgham@apple.com>

        [Win] Unreviewed gardening. Use consistent line-endings in file.

        * WinLauncher/WinLauncher.h: Use '\n' EOL marker, not DOS-style
        '\r\n' EOL.

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

        [JavaScriptCore] Make build-jsc output format better.
        https://bugs.webkit.org/show_bug.cgi?id=133547

        Reviewed by Ryosuke Niwa.

        * Scripts/build-jsc: Emit built time information on successful builds.
        (writeCongrats):
        * Scripts/build-webkit: Move formatBuildTime function into webkitdirs.pm.
        (cMakeArgsFromFeatures):
        (formatBuildTime): Deleted.
        * Scripts/webkitdirs.pm:
        (formatBuildTime):

2014-06-25  Chris Fleizach  <cfleizach@apple.com>

        Add an undo group for each dictated utterance in WebKit
        https://bugs.webkit.org/show_bug.cgi?id=134086

        Reviewed by Enrica Casucci.

        Create a method for creating attributed strings with the undo insertion marker.

        * DumpRenderTree/mac/TextInputController.m:
        (+[TextInputController isSelectorExcludedFromWebScript:]):
        (+[TextInputController webScriptNameForSelector:]):
        (-[TextInputController stringWithUndoGroupingInsertion:]):

2014-06-25  Michael Saboff  <msaboff@apple.com>

        Provide javascript aware backtrace script for lldb
        https://bugs.webkit.org/show_bug.cgi?id=134276

        Reviewed by Jer Noble.

        * lldb/lldb_webkit.py:
        (__lldb_init_module):
        (btjs): New scripted command to display a backtrace that shows JavaScript frames with details.

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

        REGRESSION (r170426) Broke two python tests
        https://bugs.webkit.org/show_bug.cgi?id=134299

        Reviewed by Csaba Osztrogonác.

        * Scripts/webkitpy/port/efl.py:
        (EflPort._search_paths): Added search path for efl-wk2.

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

        [EFL] Remove WebKit1 related code from scripts
        https://bugs.webkit.org/show_bug.cgi?id=134195

        Reviewed by Laszlo Gombos.

        After removing WebKit1 from EFL port, still there is some code left related to DumpRenderTree, 
        EWebLauncher. Also running layout tests does not require adding -2/--webkit-test-runner switch.

        * Scripts/run-launcher: MiniBrowser now runs as default without -2 switch.
        * Scripts/webkitdirs.pm:
        (builtDylibPathForName): Remove reference to libewebkit.so
        * Scripts/webkitpy/layout_tests/run_webkit_tests.py:
        (_set_up_derived_options): Script runs WKTR by default.
        * Scripts/webkitpy/performance_tests/perftestsrunner.py:
        (PerfTestsRunner.__init__): Ditto.
        * Scripts/webkitpy/port/efl.py:
        (EflPort._search_paths): Remove efl-wk2 from baseline search path.
        (EflPort.show_results_html_file): Run MiniBrowser as result viewer.

2014-06-25  Laszlo Gombos  <l.gombos@samsung.com>

        Remove build guard for progress element
        https://bugs.webkit.org/show_bug.cgi?id=134292

        Reviewed by Benjamin Poulain.

        * Scripts/webkitperl/FeatureList.pm:

2014-06-24  Tomas Popela  <tpopela@redhat.com>

        [GTK] Some of DOM bindings macros are misnamed
        https://bugs.webkit.org/show_bug.cgi?id=121543

        Reviewed by Carlos Garcia Campos.

        As we are using WebKitDOM as a namespace we should unify all type macros
        to have WEBKIT_DOM_TYPE prefix instead of WEBKIT_TYPE_DOM. Also add
        more exceptions to decamelize function in GObject bindings generator
        to fix the names of bindings for BR, HR, UL, OL, DL and LI elements.

        * TestWebKitAPI/Tests/WebKit2Gtk/DOMNodeFilterTest.cpp:
        * gtk/webkitdom.py:
        (WebKitDOMDocGeneratorSections._dom_class_decamelize):
        (WebKitDOMDocGeneratorSections.write_section):

2014-06-24  Frédéric Wang  <fred.wang@free.fr>

        [EFL] Install Latin Modern Math on the bots
        https://bugs.webkit.org/show_bug.cgi?id=134153

        Reviewed by Gyuyoung Kim.

        * efl/jhbuild.modules: Switch back to https://github.com/ for the webkitgtk-test-fonts.

2014-06-24  Frédéric Wang  <fred.wang@free.fr>

        [EFL] [GTK] Use Latin Modern Math in the jhbuild environments.
        https://bugs.webkit.org/show_bug.cgi?id=134153

        Reviewed by Martin Robinson.

        * efl/jhbuild.modules: Use webkitgtk-test-fonts.git instead of the zip archive and upgrade to 0.0.5.
        * gtk/jhbuild.modules: Upgrade webkitgtk-test-fonts to 0.0.5.

2014-06-24  Gyuyoung Kim  <gyuyoung.kim@samsung.com>

        Unreviewed, update my speciality.

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

2014-06-24  Brent Fulgham  <bfulgham@apple.com>

        [Win] Clean up and refactor WinLauncher
        https://bugs.webkit.org/show_bug.cgi?id=134209

        Reviewed by Tim Thorton.

        Relanding r170339 and r170340 with correct WinLauncher.h file.

        * WinLauncher/Common.cpp: Copied from WinLauncher/WinLauncher.cpp.
        (PrintView):
        (ToggleMenuItem):
        (WndProc):
        (BackButtonProc):
        (ForwardButtonProc):
        (loadURL):
        (shouldUseFullDesktop): Deleted.
        (SimpleEventListener::SimpleEventListener): Deleted.
        (SimpleEventListener::handleEvent): Deleted.
        (WinLauncherWebHost::updateAddressBar): Deleted.
        (WinLauncherWebHost::didFailProvisionalLoadWithError): Deleted.
        (WinLauncherWebHost::QueryInterface): Deleted.
        (WinLauncherWebHost::AddRef): Deleted.
        (WinLauncherWebHost::Release): Deleted.
        (updateMenuItemForHistoryItem): Deleted.
        (showLastVisitedSites): Deleted.
        (WinLauncherWebHost::didFinishLoadForFrame): Deleted.
        (resizeSubViews): Deleted.
        (setToDefaultPreferences): Deleted.
        (wWinMain): Deleted.
        (MyRegisterClass): Deleted.
        (LaunchInspector): Deleted.
        (NavigateForwardOrBackward): Deleted.
        (NavigateToHistory): Deleted.
        * WinLauncher/DOMDefaultImpl.cpp: Copied from WinLauncher/DOMDefaultImpl.h.
        (DOMEventListener::Release):
        (WebScriptObject::WebScriptObject): Deleted.
        (WebScriptObject::~WebScriptObject): Deleted.
        (WebScriptObject::throwException): Deleted.
        (WebScriptObject::callWebScriptMethod): Deleted.
        (WebScriptObject::evaluateWebScript): Deleted.
        (WebScriptObject::removeWebScriptKey): Deleted.
        (WebScriptObject::stringRepresentation): Deleted.
        (WebScriptObject::webScriptValueAtIndex): Deleted.
        (WebScriptObject::setWebScriptValueAtIndex): Deleted.
        (WebScriptObject::setException): Deleted.
        (DOMEventListener::throwException): Deleted.
        (DOMEventListener::callWebScriptMethod): Deleted.
        (DOMEventListener::evaluateWebScript): Deleted.
        (DOMEventListener::removeWebScriptKey): Deleted.
        (DOMEventListener::stringRepresentation): Deleted.
        (DOMEventListener::webScriptValueAtIndex): Deleted.
        (DOMEventListener::setWebScriptValueAtIndex): Deleted.
        (DOMEventListener::setException): Deleted.
        (DOMEventListener::handleEvent): Deleted.
        * WinLauncher/DOMDefaultImpl.h:
        (WebScriptObject::QueryInterface): Deleted.
        (WebScriptObject::AddRef): Deleted.
        (WebScriptObject::Release): Deleted.
        (DOMObject::QueryInterface): Deleted.
        (DOMEventListener::QueryInterface): Deleted.
        (DOMEventListener::AddRef): Deleted.
        (DOMEventListener::Release): Deleted.
        * WinLauncher/WinLauncher.cpp:
        (WinLauncher::WinLauncher):
        (WinLauncher::init):
        (WinLauncher::prepareViews):
        (WinLauncher::setFrameLoadDelegate):
        (WinLauncher::setUIDelegate):
        (WinLauncher::setAccessibilityDelegate):
        (WinLauncher::mainFrame):
        (WinLauncher::seedInitialDefaultPreferences):
        (WinLauncher::setToDefaultPreferences):
        (updateMenuItemForHistoryItem):
        (WinLauncher::showLastVisitedSites):
        (WinLauncher::launchInspector):
        (WinLauncher::navigateForwardOrBackward):
        (WinLauncher::navigateToHistory):
        (WinLauncher::goBack):
        (WinLauncher::goForward):
        (WinLauncher::loadURL):
        (shouldUseFullDesktop): Deleted.
        (SimpleEventListener::SimpleEventListener): Deleted.
        (SimpleEventListener::handleEvent): Deleted.
        (WinLauncherWebHost::updateAddressBar): Deleted.
        (WinLauncherWebHost::didFailProvisionalLoadWithError): Deleted.
        (WinLauncherWebHost::QueryInterface): Deleted.
        (WinLauncherWebHost::AddRef): Deleted.
        (WinLauncherWebHost::Release): Deleted.
        (showLastVisitedSites): Deleted.
        (WinLauncherWebHost::didFinishLoadForFrame): Deleted.
        (resizeSubViews): Deleted.
        (subclassForLayeredWindow): Deleted.
        (computeFullDesktopFrame): Deleted.
        (DllMain): Deleted.
        (getAppDataFolder): Deleted.
        (setToDefaultPreferences): Deleted.
        (setCacheFolder): Deleted.
        (createCrashReport): Deleted.
        (wWinMain): Deleted.
        (MyRegisterClass): Deleted.
        (AbortProc): Deleted.
        (getPrinterDC): Deleted.
        (initDocStruct): Deleted.
        (PrintView): Deleted.
        (ToggleMenuItem): Deleted.
        (LaunchInspector): Deleted.
        (NavigateForwardOrBackward): Deleted.
        (NavigateToHistory): Deleted.
        (WndProc): Deleted.
        (EditProc): Deleted.
        (BackButtonProc): Deleted.
        (ForwardButtonProc): Deleted.
        (About): Deleted.
        (loadURL): Deleted.
        (dllLauncherEntryPoint): Deleted.
        * WinLauncher/WinLauncher.h:
        (WinLauncher::standardPreferences):
        (WinLauncher::privatePreferences):
        (WinLauncher::hasWebView):
        (WinLauncher::usesLayeredWebView):
        (WinLauncherWebHost::WinLauncherWebHost): Deleted.
        (WinLauncherWebHost::didStartProvisionalLoadForFrame): Deleted.
        (WinLauncherWebHost::didReceiveServerRedirectForProvisionalLoadForFrame): Deleted.
        (WinLauncherWebHost::didCommitLoadForFrame): Deleted.
        (WinLauncherWebHost::didReceiveTitle): Deleted.
        (WinLauncherWebHost::didChangeIcons): Deleted.
        (WinLauncherWebHost::didReceiveIcon): Deleted.
        (WinLauncherWebHost::didFailLoadWithError): Deleted.
        (WinLauncherWebHost::didChangeLocationWithinPageForFrame): Deleted.
        (WinLauncherWebHost::willPerformClientRedirectToURL): Deleted.
        (WinLauncherWebHost::didCancelClientRedirectForFrame): Deleted.
        (WinLauncherWebHost::willCloseFrame): Deleted.
        (WinLauncherWebHost::windowScriptObjectAvailable): Deleted.
        (WinLauncherWebHost::didClearWindowObject): Deleted.
        * WinLauncher/WinLauncher.vcxproj/WinLauncherLib.vcxproj:
        * WinLauncher/WinLauncher.vcxproj/WinLauncherLib.vcxproj.filters:
        * WinLauncher/WinLauncherReplace.h:
        (processCrashReport):
        * WinLauncher/WinLauncherWebHost.cpp: Copied from WinLauncher/WinLauncher.cpp.
        (WinLauncherWebHost::updateAddressBar):
        (WinLauncherWebHost::QueryInterface):
        (WinLauncherWebHost::AddRef):
        (WinLauncherWebHost::Release):
        (WinLauncherWebHost::didFinishLoadForFrame):
        (shouldUseFullDesktop): Deleted.
        (updateMenuItemForHistoryItem): Deleted.
        (showLastVisitedSites): Deleted.
        (resizeSubViews): Deleted.
        (subclassForLayeredWindow): Deleted.
        (computeFullDesktopFrame): Deleted.
        (DllMain): Deleted.
        (getAppDataFolder): Deleted.
        (setToDefaultPreferences): Deleted.
        (setCacheFolder): Deleted.
        (createCrashReport): Deleted.
        (wWinMain): Deleted.
        (MyRegisterClass): Deleted.
        (AbortProc): Deleted.
        (getPrinterDC): Deleted.
        (initDocStruct): Deleted.
        (PrintView): Deleted.
        (ToggleMenuItem): Deleted.
        (LaunchInspector): Deleted.
        (NavigateForwardOrBackward): Deleted.
        (NavigateToHistory): Deleted.
        (WndProc): Deleted.
        (EditProc): Deleted.
        (BackButtonProc): Deleted.
        (ForwardButtonProc): Deleted.
        (About): Deleted.
        (loadURL): Deleted.
        (dllLauncherEntryPoint): Deleted.
        * WinLauncher/WinLauncherWebHost.h: Copied from WinLauncher/WinLauncher.h.
        (WinLauncherWebHost::WinLauncherWebHost):
        (WinLauncherWebHost::didStartProvisionalLoadForFrame):
        (WinLauncherWebHost::didReceiveServerRedirectForProvisionalLoadForFrame):
        (WinLauncherWebHost::didCommitLoadForFrame):
        (WinLauncherWebHost::didReceiveTitle):
        (WinLauncherWebHost::didChangeIcons):
        (WinLauncherWebHost::didReceiveIcon):
        (WinLauncherWebHost::didFailLoadWithError):
        (WinLauncherWebHost::didChangeLocationWithinPageForFrame):
        (WinLauncherWebHost::willPerformClientRedirectToURL):
        (WinLauncherWebHost::didCancelClientRedirectForFrame):
        (WinLauncherWebHost::willCloseFrame):
        (WinLauncherWebHost::windowScriptObjectAvailable):
        (WinLauncherWebHost::didClearWindowObject):
        * WinLauncher/WinMain.cpp: Copied from WinLauncher/WinLauncher.cpp.
        (wWinMain):
        (MyRegisterClass):
        (shouldUseFullDesktop): Deleted.
        (SimpleEventListener::SimpleEventListener): Deleted.
        (SimpleEventListener::handleEvent): Deleted.
        (WinLauncherWebHost::updateAddressBar): Deleted.
        (WinLauncherWebHost::didFailProvisionalLoadWithError): Deleted.
        (WinLauncherWebHost::QueryInterface): Deleted.
        (WinLauncherWebHost::AddRef): Deleted.
        (WinLauncherWebHost::Release): Deleted.
        (updateMenuItemForHistoryItem): Deleted.
        (showLastVisitedSites): Deleted.
        (WinLauncherWebHost::didFinishLoadForFrame): Deleted.
        (resizeSubViews): Deleted.
        (subclassForLayeredWindow): Deleted.
        (computeFullDesktopFrame): Deleted.
        (DllMain): Deleted.
        (getAppDataFolder): Deleted.
        (setToDefaultPreferences): Deleted.
        (setCacheFolder): Deleted.
        (createCrashReport): Deleted.
        (AbortProc): Deleted.
        (getPrinterDC): Deleted.
        (initDocStruct): Deleted.
        (PrintView): Deleted.
        (ToggleMenuItem): Deleted.
        (LaunchInspector): Deleted.
        (NavigateForwardOrBackward): Deleted.
        (NavigateToHistory): Deleted.
        (WndProc): Deleted.
        (EditProc): Deleted.
        (BackButtonProc): Deleted.
        (ForwardButtonProc): Deleted.
        (About): Deleted.
        (loadURL): Deleted.
        (dllLauncherEntryPoint): Deleted.

2014-06-20  Myles C. Maxfield  <mmaxfield@apple.com>

        [iOS] getsectdata() is deprecated and we use it in DRT
        https://bugs.webkit.org/show_bug.cgi?id=134122

        Reviewed by Alexey Proskuryakov.

        Migrate to using magic linker symbols.

        No tests because there should be no behavior change

        * DumpRenderTree/mac/DumpRenderTree.mm:
        (activateFontsIOS):

2014-06-24  Javier Fernandez  <jfernandez@igalia.com>

        Name moving. Unreviewed.

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

2014-06-24  Gyuyoung Kim  <gyuyoung.kim@samsung.com>

        Remove EFL WK1 watch category
        https://bugs.webkit.org/show_bug.cgi?id=134231

        Reviewed by Csaba Osztrogonác.

        * Scripts/webkitpy/common/config/watchlist: Removed EFL WK1 category.

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

        [ATK] Remove some unused code from DumpRenderTree
        https://bugs.webkit.org/show_bug.cgi?id=134191

        Reviewed by Chris Fleizach.

        DumpRenderTree's accessibility code could be removed since GTK and EFL has stopped supporting WK1.

        * DumpRenderTree/atk/AccessibilityCallbacks.h: Removed.
        * DumpRenderTree/atk/AccessibilityCallbacksAtk.cpp: Removed.
        * DumpRenderTree/atk/AccessibilityControllerAtk.cpp: Removed.
        * DumpRenderTree/atk/AccessibilityNotificationHandlerAtk.cpp: Removed.
        * DumpRenderTree/atk/AccessibilityNotificationHandlerAtk.h: Removed.
        * DumpRenderTree/atk/AccessibilityUIElementAtk.cpp: Removed.

2014-06-23  Shivakumar JM  <shiva.jm@samsung.com>

        [EFL][WK2] Search field is not shown properly on doing ctrl+f on Minibrowser.
        https://bugs.webkit.org/show_bug.cgi?id=134025

        Reviewed by Gyuyoung Kim.

        Use EVAS_HINT_FILL in evas_object_size_hint_align_set() api.

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

2014-06-23  Ryuan Choi  <ryuan.choi@samsung.com>

        [EFL] Replace RefPtr<Evas_Object> with UniquePtrEfl
        https://bugs.webkit.org/show_bug.cgi?id=134236

        Reviewed by Gyuyoung Kim.

        * ImageDiff/efl/ImageDiff.cpp:
        (calculateDifference):
        (printImageDifferences):
        (readImageFromStdin):
        (main):

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

        Rolling out r170340 and r170339.

        Changeset r170339 broke the Apple Windows Debug and Release builds.

        Reverted changesets:

        "[Win] Build fix after r134209"
        http://trac.webkit.org/changeset/170340

        "[Win] Clean up and refactor WinLauncher"
        https://bugs.webkit.org/show_bug.cgi?id=134209
        http://trac.webkit.org/changeset/170339

2014-06-23  Brent Fulgham  <bfulgham@apple.com>

        [Win] Build fix after r134209

        * WinLauncher/WinMain.cpp: Must include the resources file
        before Common.cpp.

2014-06-23  Brent Fulgham  <bfulgham@apple.com>

        [Win] Clean up and refactor WinLauncher
        https://bugs.webkit.org/show_bug.cgi?id=134209

        Reviewed by Tim Horton.

        Make WinLauncher a class, and move all non-class driver functions
        into "Common.cpp" and "WinMain.cpp". These files are distinct
        to allow some internal tools to reuse the code in 'Common'.

        * WinLauncher/Common.cpp: Added. Consists of code moved from
        'WinLauncher.cpp' that can be reused for other tools.
        (subclassForLayeredWindow):
        (computeFullDesktopFrame):
        (DllMain):
        (getAppDataFolder):
        (setCacheFolder):
        (createCrashReport):
        (AbortProc):
        (getPrinterDC):
        (initDocStruct):
        (PrintView):
        (ToggleMenuItem):
        (WndProc):
        (EditProc):
        (BackButtonProc):
        (ForwardButtonProc):
        (About):
        (loadURL):
        (dllLauncherEntryPoint):
        * WinLauncher/DOMDefaultImpl.cpp: Copied from WinLauncher/DOMDefaultImpl.h.
        (DOMEventListener::Release):
        (WebScriptObject::WebScriptObject): Deleted.
        (WebScriptObject::~WebScriptObject): Deleted.
        (WebScriptObject::throwException): Deleted.
        (WebScriptObject::callWebScriptMethod): Deleted.
        (WebScriptObject::evaluateWebScript): Deleted.
        (WebScriptObject::removeWebScriptKey): Deleted.
        (WebScriptObject::stringRepresentation): Deleted.
        (WebScriptObject::webScriptValueAtIndex): Deleted.
        (WebScriptObject::setWebScriptValueAtIndex): Deleted.
        (WebScriptObject::setException): Deleted.
        (DOMEventListener::throwException): Deleted.
        (DOMEventListener::callWebScriptMethod): Deleted.
        (DOMEventListener::evaluateWebScript): Deleted.
        (DOMEventListener::removeWebScriptKey): Deleted.
        (DOMEventListener::stringRepresentation): Deleted.
        (DOMEventListener::webScriptValueAtIndex): Deleted.
        (DOMEventListener::setWebScriptValueAtIndex): Deleted.
        (DOMEventListener::setException): Deleted.
        (DOMEventListener::handleEvent): Deleted.
        * WinLauncher/DOMDefaultImpl.h:
        (WebScriptObject::QueryInterface): Deleted.
        (WebScriptObject::AddRef): Deleted.
        (WebScriptObject::Release): Deleted.
        (DOMObject::QueryInterface): Deleted.
        (DOMEventListener::QueryInterface): Deleted.
        (DOMEventListener::AddRef): Deleted.
        (DOMEventListener::Release): Deleted.
        * WinLauncher/WinLauncher.cpp: Converted stand-alone implementation
        into a C++ class and removed WinAPI code.
        (WinLauncher::WinLauncher):
        (WinLauncher::init):
        (WinLauncher::prepareViews):
        (WinLauncher::setFrameLoadDelegate):
        (WinLauncher::setUIDelegate):
        (WinLauncher::setAccessibilityDelegate):
        (WinLauncher::mainFrame):
        (WinLauncher::seedInitialDefaultPreferences):
        (WinLauncher::setToDefaultPreferences):
        (updateMenuItemForHistoryItem):
        (WinLauncher::showLastVisitedSites):
        (WinLauncher::launchInspector):
        (WinLauncher::navigateForwardOrBackward):
        (WinLauncher::navigateToHistory):
        (WinLauncher::goBack):
        (WinLauncher::goForward):
        (WinLauncher::loadURL):
        (shouldUseFullDesktop): Deleted.
        (SimpleEventListener::SimpleEventListener): Deleted.
        (SimpleEventListener::handleEvent): Deleted.
        (WinLauncherWebHost::updateAddressBar): Deleted.
        (WinLauncherWebHost::didFailProvisionalLoadWithError): Deleted.
        (WinLauncherWebHost::QueryInterface): Deleted.
        (WinLauncherWebHost::AddRef): Deleted.
        (WinLauncherWebHost::Release): Deleted.
        (showLastVisitedSites): Deleted.
        (WinLauncherWebHost::didFinishLoadForFrame): Deleted.
        (resizeSubViews): Deleted.
        (subclassForLayeredWindow): Deleted.
        (computeFullDesktopFrame): Deleted.
        (DllMain): Deleted.
        (getAppDataFolder): Deleted.
        (setToDefaultPreferences): Deleted.
        (setCacheFolder): Deleted.
        (createCrashReport): Deleted.
        (wWinMain): Deleted.
        (MyRegisterClass): Deleted.
        (AbortProc): Deleted.
        (getPrinterDC): Deleted.
        (initDocStruct): Deleted.
        (PrintView): Deleted.
        (ToggleMenuItem): Deleted.
        (LaunchInspector): Deleted.
        (NavigateForwardOrBackward): Deleted.
        (NavigateToHistory): Deleted.
        (WndProc): Deleted.
        (EditProc): Deleted.
        (BackButtonProc): Deleted.
        (ForwardButtonProc): Deleted.
        (About): Deleted.
        (loadURL): Deleted.
        (dllLauncherEntryPoint): Deleted.
        * WinLauncher/WinLauncher.h: Removed.
        * WinLauncher/WinLauncher.vcxproj/WinLauncherLib.vcxproj:
        * WinLauncher/WinLauncher.vcxproj/WinLauncherLib.vcxproj.filters:
        * WinLauncher/WinLauncherReplace.h:
        (processCrashReport):
        * WinLauncher/WinLauncherWebHost.cpp: Added.
        (SimpleEventListener::SimpleEventListener):
        (SimpleEventListener::handleEvent):
        (WinLauncherWebHost::updateAddressBar):
        (WinLauncherWebHost::didFailProvisionalLoadWithError):
        (WinLauncherWebHost::QueryInterface):
        (WinLauncherWebHost::AddRef):
        (WinLauncherWebHost::Release):
        (WinLauncherWebHost::didFinishLoadForFrame):
        * WinLauncher/WinLauncherWebHost.h: Copied from WinLauncher/WinLauncher.h.
        Moved WinLauncherWebHost implementation from WinLauncher.cpp into
        its own set of files.
        (WinLauncherWebHost::WinLauncherWebHost):
        (WinLauncherWebHost::didStartProvisionalLoadForFrame):
        (WinLauncherWebHost::didReceiveServerRedirectForProvisionalLoadForFrame):
        (WinLauncherWebHost::didCommitLoadForFrame):
        (WinLauncherWebHost::didReceiveTitle):
        (WinLauncherWebHost::didChangeIcons):
        (WinLauncherWebHost::didReceiveIcon):
        (WinLauncherWebHost::didFailLoadWithError):
        (WinLauncherWebHost::didChangeLocationWithinPageForFrame):
        (WinLauncherWebHost::willPerformClientRedirectToURL):
        (WinLauncherWebHost::didCancelClientRedirectForFrame):
        (WinLauncherWebHost::willCloseFrame):
        (WinLauncherWebHost::windowScriptObjectAvailable):
        (WinLauncherWebHost::didClearWindowObject):
        * WinLauncher/WinMain.cpp: Added. This consists of code from
        WinLauncher that is unique to the WinLauncher utility, and is
        not part of the WinLauncher class.
        (wWinMain):
        (MyRegisterClass):

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

        Enable the Web Inspector in MiniBrowser
        https://bugs.webkit.org/show_bug.cgi?id=134148

        Reviewed by Joseph Pecoraro.
        
        Set the pref to enable Web Inspector in both WK1 and WK2 windows.

        * MiniBrowser/mac/AppDelegate.m:
        (-[BrowserAppDelegate applicationDidFinishLaunching:]):

2014-06-21  Gyuyoung Kim  <gyuyoung.kim@samsung.com>

        Disable gamepad feature on EFL and GTK ports by default
        https://bugs.webkit.org/show_bug.cgi?id=134169

        Reviewed by Brady Eidson.

        EFL and GTK ports disabled Gamepad feature now. Besides current implementation
        was treated to 'deprecated' status.

        ENABLE_GAMEPAD_DEPRECATED is disabled for now. There is build break on EFL port.

        * Scripts/webkitperl/FeatureList.pm:

2014-06-21  Tibor Meszaros  <tmeszaros.u-szeged@partner.samsung.com>

        [Inspector][EFL] Can't resume a special break point on EFL inspector
        https://bugs.webkit.org/show_bug.cgi?id=129294

        Reviewed by Gyuyoung Kim.

        Patch our EFL 1.9 with the fix landed in upstream EFL 1.10
        by Ryuan Choi - <https://phab.enlightenment.org/D790>

        * efl/jhbuild.modules:
        * efl/patches/ecore.patch: Added.

2014-06-21  Eva Balazsfalvi  <evab.u-szeged@partner.samsung.com>

        Removing PAGE_VISIBILITY_API compile guard.
        https://bugs.webkit.org/show_bug.cgi?id=133844

        Reviewed by Gavin Barraclough.

        * Scripts/webkitperl/FeatureList.pm:

2014-06-20  Ryuan Choi  <ryuan.choi@samsung.com>

        [EFL] Remove DumpRenderTree/efl and EWebLauncher
        https://bugs.webkit.org/show_bug.cgi?id=134138

        Reviewed by Gyuyoung Kim.

        DumpRenderTree/efl and EWebLauncher are not necessary anymore because WebKit1 EFL will be removed.

        * CMakeLists.txt:
        * DumpRenderTree/PlatformEfl.cmake: Removed.
        * DumpRenderTree/efl: Removed entire directory.
        * EWebLauncher: Ditto.
        * WebKitTestRunner/InjectedBundle/efl/FontManagement.cpp: Renamed from Tools/DumpRenderTree/efl/FontManagement.cpp.
        (buildPath):
        (getCoreFontFiles):
        (addFontDirectory):
        (addFontFiles):
        (getCustomBuildDir):
        (getPlatformFontsPath):
        (addFontsToEnvironment):
        * WebKitTestRunner/InjectedBundle/efl/FontManagement.h: Renamed from Tools/DumpRenderTree/efl/FontManagement.h.
        * WebKitTestRunner/PlatformEfl.cmake:

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

        Name moving. Unreviewed.

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

2014-06-20  Javier Fernandez  <jfernandez@igalia.com>

        Unreviewed. Adding myself to committers.

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

2014-06-20  Yusuke Suzuki  <utatane.tea@gmail.com>

        Unreviewed. Adding myself to committers.

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

2014-06-20  Tim Horton  <timothy_horton@apple.com>

        Make WebKit2 more accessible in MiniBrowser
        https://bugs.webkit.org/show_bug.cgi?id=134099

        Reviewed by Anders Carlsson.

        * MiniBrowser/mac/AppDelegate.h:
        * MiniBrowser/mac/AppDelegate.m:
        (-[BrowserAppDelegate newWindow:]):
        (-[BrowserAppDelegate applicationDidFinishLaunching:]):
        (-[BrowserAppDelegate toggleUseWebKit2ByDefault:]):
        (-[BrowserAppDelegate _useWebKit2ByDefault]):
        (-[BrowserAppDelegate _updateNewWindowKeyEquivalents]):
        (-[BrowserAppDelegate validateMenuItem:]):
        * MiniBrowser/mac/MainMenu.xib:
        Add a "Use WebKit2 By Default" menu item to the top of the Debug menu.
        When switched on, Cmd-N will make WebKit2 windows (and the default window will be WebKit2).
        Make the non-default new-window menu item always show up, because people often don't find it
        when you have to press option to have it show up.

        * MiniBrowser/mac/BrowserWindowController.h:
        * MiniBrowser/mac/BrowserWindowController.m:
        (-[BrowserWindowController initWithWindow:]):
        
        * MiniBrowser/mac/WK1BrowserWindowController.m:
        (-[WK1BrowserWindowController validateMenuItem:]):
        * MiniBrowser/mac/WK2BrowserWindowController.m:
        (-[WK2BrowserWindowController validateMenuItem:]):
        Use the cached [menuItem action] like the earlier cases do.

2014-06-20  Daniel Bates  <dabates@apple.com>

        Teach run-{safari, webkit-app} about iOS Simulator
        https://bugs.webkit.org/show_bug.cgi?id=133986

        Reviewed by David Kilzer.

        Extract the logic from old-run-webkit-tests to install and launch {DumpRenderTree, WebKitTestRunnerApp}.app
        into general-purpose routines in webkitdirs.pm so that they can be used both by script old-run-webkit-tests
        and run-safari.

        * Scripts/old-run-webkit-tests:
        (installAndLaunchDumpToolAppUsingNotification): Extracted logic to install and launch {DumpRenderTree,
        WebKitTestRunnerApp}.app into webkitdirs::installAndLaunchIOSWebKitAppInSimulator() and modified code
        to call it.
        (openIPhoneSimulator): Deleted; moved logic to webkitdirs::openIOSSimulator().
        (quitIPhoneSimulator): Deleted; moved logic to webkitdirs::quitIOSSimulator().
        * Scripts/run-webkit-app: Modified to call runIOSWebKitApp() when the iOS simulator SDK is used
        (say, by specifying the optional command-line argument --simulator). For now, die() with an error
        when the iOS device SDK is used as we don't support launching an app on the device at this time.
        * Scripts/webkitdirs.pm:
        (xcodeSDKVersion): Added.
        (setupIOSWebKitEnvironment): Added.
        (installedMobileSafariBundle): Added.
        (mobileSafariBundle): Added.
        (plistPathFromBundle): Added.
        (appIdentiferFromBundle): Added.
        (appDisplayNameFromBundle): Added.
        (loadIPhoneSimulatorNotificationIfNeeded): Added.
        (openIOSSimulator): Added.
        (quitIOSSimulator): Added.
        (iosSimulatorDeviceByName): Added.
        (iosSimulatorRuntime): Added.
        (findOrCreateSimulatorForIOSDevice): Added.
        (runIOSWebKitAppInSimulator): Added.
        (installAndLaunchIOSWebKitAppInSimulator): Added.
        (runIOSWebKitApp): Added.
        (runSafari): Modified to call runIOSWebKitAppInSimulator() the iOS simulator SDK is used. For now,
        die() with an error when the iOS device SDK is used as we don't support launching Safari on the
        device at this time.

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

        Add WTF::Optional class
        https://bugs.webkit.org/show_bug.cgi?id=134083

        Reviewed by Andreas Kling.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WTF/Optional.cpp: Added.
        (TestWebKitAPI::TEST):

2014-06-20  Ion Rosca  <rosca@adobe.com>

        Unreviewed. Adding myself to Committers list.

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

2014-06-20  Eva Balazsfalvi  <evab.u-szeged@partner.samsung.com>

        [EFL] Add gstreamer as dependecy of EFL after r169785
        https://bugs.webkit.org/show_bug.cgi?id=134066

        Reviewed by Gyuyoung Kim.

        * efl/jhbuild.modules:

2014-06-20  Ryuan Choi  <ryuan.choi@samsung.com>

        [EFL] Merge url_utils.c to MiniBrowser
        https://bugs.webkit.org/show_bug.cgi?id=134095

        Reviewed by Csaba Osztrogonác.

        url_utils.c is simple code to share between EWebLauncher and MiniBrowser.
        This patch removes the dependency of url_utils.c from MiniBrowser to drop WebKit1 EFL port.

        * MiniBrowser/efl/CMakeLists.txt:
        Remove the EWebLauncher/ from the includes and url_utils.h from the source lists.
        * MiniBrowser/efl/main.c:
        (has_scheme): Copied from url_utils.c
        (url_from_user_input): Ditto.

2014-06-19  Eva Balazsfalvi  <evab.u-szeged@partner.samsung.com>

        Fix webkitpy tests after EFL WK1 buildbot and EWS removal - r170172.

        Reviewed by Csaba Osztrogonác.

        * Scripts/webkitpy/common/config/ports_unittest.py:
        (DeprecatedPortTest.test_gtk_wk2_port):
        (DeprecatedPortTest.test_efl_port): Deleted.
        * Scripts/webkitpy/style/checkers/test_expectations_unittest.py:
        (TestExpectationsTestCase.test_determine_port_from_expectations_path):
        * Scripts/webkitpy/tool/commands/rebaseline_unittest.py:
        (TestRebaselineExpectations.test_rebaseline_expectations):

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

        [EFL][CMAKE] Disable WebKit1 build as a default
        https://bugs.webkit.org/show_bug.cgi?id=134093

        Reviewed by Gyuyoung Kim.

        * CMakeLists.txt:

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

        [GTK] webkit_dom_document_create_tree_walker impossible to use due to WebKitDOMNodeFilter
        https://bugs.webkit.org/show_bug.cgi?id=93002

        Reviewed by Gustavo Noronha Silva.

        Add unit tests to check WebKitDOMNodefilter API used from both
        TreeWalker and NodeIterator.

        * Scripts/webkitpy/style/checker.py: Add exceptions for GTK+
        public headers and add WebKitDOMNodeFilter to the list of exceptions.
        * TestWebKitAPI/Tests/WebKit2Gtk/CMakeLists.txt: Add new files to compilation.
        * TestWebKitAPI/Tests/WebKit2Gtk/DOMNodeFilterTest.cpp: Added.
        (webkitNodeFilterAcceptNode):
        (webkitNodeFilterDOMNodeFilterIfaceInit):
        (webkit_node_filter_init):
        (webkit_node_filter_class_init):
        (WebKitDOMNodeFilterTest::create):
        (WebKitDOMNodeFilterTest::webPageFromArgs):
        (WebKitDOMNodeFilterTest::testTreeWalker):
        (WebKitDOMNodeFilterTest::testNodeIterator):
        (WebKitDOMNodeFilterTest::runTest):
        (registerTests):
        * TestWebKitAPI/Tests/WebKit2Gtk/TestDOMNodeFilter.cpp: Added.
        (runTest):
        (testWebKitDOMNodeFilterTreeWalker):
        (testWebKitDOMNodeFilterNodeIterator):
        (beforeAll):
        (afterAll):
        * gtk/webkitdom.py:
        (WebKitDOMDocGeneratorSections.__init__):
        (WebKitDOMDocGeneratorSections._symbol_list):
        (WebKitDOMDocGeneratorSections.write_section):

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

        [GTK] Limit the amount of API exposed to GObject DOM bindings API
        https://bugs.webkit.org/show_bug.cgi?id=133726

        Reviewed by Gustavo Noronha Silva.

        Don't make fatal finding files without a .symbols file, since now
        only the stable DOM API has .symbols files.

        * gtk/webkitdom.py:
        (get_all_webkitdom_symbol_files):

2014-06-19  Gyuyoung Kim  <gyuyoung.kim@samsung.com>

        Remove efl wk1 buildbot and ews
        https://bugs.webkit.org/show_bug.cgi?id=134089

        Reviewed by Benjamin Poulain.

        EFL WK1 is not supported anymore. Removed all bots for EFL WK1 bots.

        * BuildSlaveSupport/build.webkit.org-config/config.json:
        * QueueStatusServer/config/queues.py:
        * Scripts/webkitpy/common/config/ews.json:
        * Scripts/webkitpy/common/config/ports.py:
        (DeprecatedPort.port):
        (QtWK2Port.run_webkit_tests_command):
        (EflPort): Deleted.
        (EflPort.build_webkit_command): Deleted.
        * Scripts/webkitpy/port/builders.py:
        * TestResultServer/static-dashboards/flakiness_dashboard.js:
        * TestResultServer/static-dashboards/loader_unittests.js:

2014-06-19  David Kilzer  <ddkilzer@apple.com>

        check-webkit-style does not understand Obj-C literal syntax for NSDictionary
        <http://webkit.org/b/134061>

        Reviewed by Dan Bernstein.

        * Scripts/webkitpy/style/checkers/cpp.py:
        (check_spacing): Ignore '@' immediately before '{'.
        * Scripts/webkitpy/style/checkers/cpp_unittest.py:
        (CppStyleTest.test_spacing_before_braces): Add unit test for
        '^{' block syntax and '@{' Objective-C liternal NSDitionary
        syntax.

2014-06-18  Tim Horton  <timothy_horton@apple.com>

        All of MiniBrowser's WKWebViews should share a configuration
        https://bugs.webkit.org/show_bug.cgi?id=134017

        Reviewed by Anders Carlsson.

        * MiniBrowser/mac/WK2BrowserWindowController.m:
        (-[WK2BrowserWindowController awakeFromNib]):
        Share a single WKWebViewConfiguration between all of MiniBrowser's views.
        This means that they'll share things like preferences, visited links, etc.
        It also means that we'll properly share processes once we hit the process limit.

2014-06-18  Zan Dobersek  <zdobersek@igalia.com>

        [GTK] Bump the GLib and GTK+ dependencies in jhbuild-wayland.modules
        https://bugs.webkit.org/show_bug.cgi?id=133971

        Reviewed by Martin Robinson.

        * gtk/jhbuild-wayland.modules: Bump the GTK+ dependency that's required for
        building for the Wayland target. The latest 3.12 version is required to match
        the xdg_shell protocol version used in Weston 1.5. GLib dependency is bumped
        as well due to GTK+ depending on a newer version.

2014-06-17  Ryuan Choi  <ryuan.choi@samsung.com>

        [EFL] Turn on NOSNIFF in FeatureList.pm
        https://bugs.webkit.org/show_bug.cgi?id=134010

        Reviewed by Csaba Osztrogonác.

        r164848 enabled NOSNIFF feature for EFL port but missed to change FeatureList.pm.

        * Scripts/webkitperl/FeatureList.pm: Turn on NOSNIFF for the EFL port.

2014-06-17  Tim Horton  <timothy_horton@apple.com>

        MiniBrowser should show Web Content process pids in the window title
        https://bugs.webkit.org/show_bug.cgi?id=134016

        Reviewed by Sam Weinig.

        * MiniBrowser/mac/WK2BrowserWindowController.m:
        (-[WK2BrowserWindowController observeValueForKeyPath:ofObject:change:context:]):

2014-06-17  Carlos Alberto Lopez Perez  <clopez@igalia.com>

        [GTK] Fix the handling of resize events after r169505.
        https://bugs.webkit.org/show_bug.cgi?id=133517

        Reviewed by Martin Robinson.

        * Scripts/webkitpy/port/xvfbdriver.py:
        (XvfbDriver._start): Set the resolution of Xvfb to XGA (1024x768).
        The tests css3/viewport-percentage-lengths/viewport-percentage-lengths-*.html
        need at least 900x640 pixels to pass.
        * Scripts/webkitpy/port/xvfbdriver_unittest.py:
        (XvfbDriverTest.test_start_no_pixel_tests): Update resolution.
        (XvfbDriverTest.test_start_pixel_tests): Update resolution.
        (XvfbDriverTest.test_start_arbitrary_worker_number): Update resolution.
        (XvfbDriverTest.test_start_next_worker): Update resolution.
        * WebKitTestRunner/gtk/PlatformWebViewGtk.cpp:
        (WTR::PlatformWebView::PlatformWebView): gtk_widget_size_allocate should
        be requested over the main widget instead of the window.
        (WTR::PlatformWebView::resizeTo): Changed this to call setWindowFrame like
        the Mac port.
        (WTR::PlatformWebView::windowFrame): Remove legacy ifdef for GTK2.
        (WTR::PlatformWebView::setWindowFrame): Set the size and position
        of the Window and the web view.

2014-06-17  Matthew Mirman <mmirman@apple.com>

        Unreviewed. Added myself to list of contributors.

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

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

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

        Caused 4 webkitpy failures on the bots (Requested by bradee-oh
        on #webkit).

        Reverted changeset:

        "[GTK] Fix the handling of resize events after r169505."
        https://bugs.webkit.org/show_bug.cgi?id=133517
        http://trac.webkit.org/changeset/170058

2014-06-17  Rebecca Hauck  <rhauck@adobe.com>

        Update import-w3c-tests to reflect current W3C test repo directory structure
        https://bugs.webkit.org/show_bug.cgi?id=133460

        Reviewed by Bem Jones-Bey.

        Removed all references to test status, which are no longer reflected in the
        directory names in the W3C CSS test repo.  No tests are required for this 
        change, the existing tests pass.

        * Scripts/webkitpy/w3c/test_importer.py:
        (main):
        (TestImporter.__init__):
        (TestImporter.find_importable_tests):
        (TestImporter.setup_destination_directory):
        (TestImporter.write_import_log):
        (TestImporter.update_test_status): Deleted.

2014-06-17  Carlos Alberto Lopez Perez  <clopez@igalia.com>

        [GTK] Fix the handling of resize events after r169505.
        https://bugs.webkit.org/show_bug.cgi?id=133517

        Reviewed by Martin Robinson.

        * Scripts/webkitpy/port/xvfbdriver.py:
        (XvfbDriver._start): Set the resolution of Xvfb to XGA (1024x768).
        The tests css3/viewport-percentage-lengths/viewport-percentage-lengths-*.html
        need at least 900x640 pixels to pass.
        * WebKitTestRunner/gtk/PlatformWebViewGtk.cpp:
        (WTR::PlatformWebView::PlatformWebView): gtk_widget_size_allocate should
        be requested over the main widget instead of the window.
        (WTR::PlatformWebView::resizeTo): Changed this to call setWindowFrame like
        the Mac port.
        (WTR::PlatformWebView::windowFrame): Remove legacy ifdef for GTK2.
        (WTR::PlatformWebView::setWindowFrame): Set the size and position
        of the Window and the web view.

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

        String::isolatedCopy doesn’t return an isolated copy when used on an rvalue reference
        https://bugs.webkit.org/show_bug.cgi?id=133968

        Reviewed by Anders Carlsson.

        * TestWebKitAPI/Tests/WTF/WTFString.cpp:
        (TestWebKitAPI::TEST): Added a test that an isolated copy of an rvalue reference doesn’t
        share an impl() with the original.

2014-06-17  Gyuyoung Kim  <gyuyoung.kim@samsung.com>

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

        Reviewed by Csaba Osztrogonác.

        UserMessage, WillLoad and test_ewk2_view have been failed since r169784.

        * TestWebKitAPI/PlatformEfl.cmake:

2014-06-16  Ryuan Choi  <ryuan.choi@samsung.com>

        [EFL][WK2] Remove workaround for icon display bug in MiniBrowser
        https://bugs.webkit.org/show_bug.cgi?id=133962

        Reviewed by Gyuyoung Kim.

        Since we bumped EFL to 1.9, this workaround is unnecessary.

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

2014-06-16  Gwang Yoon Hwang  <yoon@igalia.com>

        [GTK] Add llvmpipe (Mesa) to the JHBuild moduleset and force it when running layout tests
        https://bugs.webkit.org/show_bug.cgi?id=131472

        Reviewed by Martin Robinson.

        This patch reapplies r167510 with fixes to add llvm as a dependency for llvmpipe.

        * Scripts/webkitpy/port/xvfbdriver.py:
        (XvfbDriver._start): Use the LLVMPIPE_LIBGL_PATH to set the LD_LIBRARY_PATH
        when running WebKitTestRunner with the Xvfb driver.
        * gtk/install-dependencies: Add LLVM as a dependency to build llvmpipe.
        * gtk/jhbuild.modules: Add Mesa to the modulelist so that the llvmpipe libGL is build, but not
        installed.
        * gtk/jhbuildrc: Set the LLVMPIPE_LIBGL_PATH environment variable so that the test driver knows
        how to properly set the LD_LIBRARY_PATH variable. We do this because it is much easier to
        calculate the path in the jhbuildrc than in the test driver code. This simplifies things a great
        deal.

2014-06-16  Tanay C  <tanay.c@samsung.com>

        Remove deprecated API warnings in WebKit/Tools/MiniBrowser/efl/main.c
        https://bugs.webkit.org/show_bug.cgi?id=133792

        Reviewed by Gyuyoung Kim.

        * MiniBrowser/efl/main.c: replaced the deprecated API's with the latest ones
        (show_file_entry_dialog):
        (window_create):

2014-06-16  Mario Sanchez Prada  <mario.prada@samsung.com>

        [ATK] Missing 'selection-changed' signal when navigating a combo box with keyboard
        https://bugs.webkit.org/show_bug.cgi?id=133512

        Reviewed by Chris Fleizach.

        Added support for connecting to AtkSelection's 'selection-changed'
        signal, and print it out as AXSelectedChildrenChanged in the tests.

        Also removed some dead code, that became useless after r169487.

        * WebKitTestRunner/InjectedBundle/atk/AccessibilityNotificationHandlerAtk.cpp:
        (WTR::AccessibilityNotificationHandler::connectAccessibilityCallbacks): Updated.

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

        [EFL][WK2] Change ewk_view_settings_get to ewk_page_group_settings_get
        https://bugs.webkit.org/show_bug.cgi?id=133841

        Reviewed by Gyuyoung Kim.

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

2014-06-15  Dan Bernstein  <mitz@apple.com>

        Set the svn:ignore property on an Xcode project to ignore user and workspace data.

        * jsc-cli/jsc-cli.xcodeproj: Added property svn:ignore.

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

        Fix build.

        * TestWebKitAPI/Tests/WebKit2ObjC/UserContentTest.mm:
        (callRunJavaScriptBlockAndRelease):
        (runJavaScriptInMainFrame):
        (TEST_F):

2014-06-13  Xabier Rodriguez Calvar  <calvaris@igalia.com>

        Create MSE and EME watchlist
        https://bugs.webkit.org/show_bug.cgi?id=133810

        Reviewed by Eric Carlson.

        * Scripts/webkitpy/common/config/watchlist: Create MSEEME
        definition and add Eric Carlson and myself to it.

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

        [GTK] Remove all deprecated API from GObject DOM bindings
        https://bugs.webkit.org/show_bug.cgi?id=133728

        Reviewed by Martin Robinson.

        * gtk/webkitdom.py:
        (WebKitDOMDocGenerator): Remove all deleted classes from the list.
        (WebKitDOMDocGeneratorSections.__init__): Fix a typo in member initialization.

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

        [iOS] Fix the view being half offscreen in WebKitTestRunner on iOS
        https://bugs.webkit.org/show_bug.cgi?id=133835

        Reviewed by Tim Horton.
        
        Don't do the _fakeOrigin stuff when -initWithFrame: is calling -setFrame:

        * WebKitTestRunner/ios/PlatformWebViewIOS.mm:
        (-[WebKitTestRunnerWindow initWithFrame:]):
        (-[WebKitTestRunnerWindow setFrame:]):

2014-06-12  Carlos Alberto Lopez Perez  <clopez@igalia.com>

        [GTK] Performance tests should be always ran with WKTR.
        https://bugs.webkit.org/show_bug.cgi?id=133780

        Reviewed by Ryosuke Niwa.

        * Scripts/webkitpy/performance_tests/perftestsrunner.py:
        (PerfTestsRunner.__init__): Enable webkit_test_runner when port
        is GTK.

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

        [GTK] REGRESSION: application name is not correctly appended to the UA
        https://bugs.webkit.org/show_bug.cgi?id=133793

        Reviewed by Carlos Garcia Campos.

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

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

        [GTK] Unsupported browser in www.icloud.com
        https://bugs.webkit.org/show_bug.cgi?id=133403

        Reviewed by Martin Robinson.

        * TestWebKitAPI/Tests/WebCore/gtk/UserAgentQuirks.cpp:
        (TestWebKitAPI::TEST): removed a test for the NeedsSafariVersion6
        quirk that was removed.

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

        [iOS WK2] Give WebKitTestRunner a viewport configuration with initial scale=1 for testing
        https://bugs.webkit.org/show_bug.cgi?id=133779

        Reviewed by Benjamin Poulain.
        
        Tell the WebPage to use the testing viewport configuration from the injected bundle.

        * WebKitTestRunner/InjectedBundle/InjectedBundle.cpp:
        (WTR::InjectedBundle::didReceiveMessage): Code cleanup.
        * WebKitTestRunner/InjectedBundle/cocoa/InjectedBundlePageCocoa.mm:
        (WTR::InjectedBundlePage::platformDidStartProvisionalLoadForFrame): Call WKBundlePageSetUseTestingViewportConfiguration()
        on iOS.

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

        WTR cleanup: push per-test viewport configuration into TestController, where platforms can customize it
        https://bugs.webkit.org/show_bug.cgi?id=133770

        Reviewed by Anders Carlsson.
        
        Push the per-test view configuration up to TestController, so that platforms
        can modify the behavior. This also allows platform-specific changes (e.g.
        for threaded scrolling) to made without #ifefs.

        * WebKitTestRunner/TestController.cpp:
        (WTR::TestController::updateWebViewSizeForTest):
        (WTR::TestController::updateWindowScaleForTest):
        (WTR::shouldUseFixedLayout):
        (WTR::TestController::updateLayoutTypeForTest):
        (WTR::TestController::platformConfigureViewForTest):
        (WTR::TestController::configureViewForTest):
        * WebKitTestRunner/TestController.h:
        * WebKitTestRunner/TestInvocation.cpp:
        (WTR::TestInvocation::invoke):
        (WTR::sizeWebViewForCurrentTest): Deleted.
        (WTR::changeWindowScaleIfNeeded): Deleted.
        (WTR::shouldUseThreadedScrolling): Deleted.
        (WTR::updateThreadedScrollingForCurrentTest): Deleted.
        (WTR::shouldUseFixedLayout): Deleted.
        (WTR::updateLayoutType): Deleted.
        * WebKitTestRunner/TestInvocation.h:
        (WTR::TestInvocation::pathOrURL):
        * WebKitTestRunner/ios/TestControllerIOS.mm:
        (WTR::shouldMakeViewportFlexible):
        (WTR::TestController::platformConfigureViewForTest):
        * WebKitTestRunner/mac/TestControllerMac.mm:
        (WTR::shouldUseThreadedScrolling):
        (WTR::TestController::platformConfigureViewForTest):

2014-06-11  Gyuyoung Kim  <gyuyoung.kim@samsung.com>

        [EFL] Add dependencies packages to efl install-dependencies file
        https://bugs.webkit.org/show_bug.cgi?id=133720

        Reviewed by Csaba Osztrogonác.

        After r169785, EFL port starts to use efl 1.9 ver. EFL port needs to
        install doxygen and libssl-dev because efl 1.9 depends on those libraries.

        * efl/install-dependencies:

2014-06-11  Zoltan Horvath  <zoltan@webkit.org>

        Unreviewed. Moving myself to the list of reviewers.

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

2014-06-11  Gyuyoung Kim  <gyuyoung.kim@samsung.com>

        [EFL] Drop to maintain EFL 32bit release bot
        https://bugs.webkit.org/show_bug.cgi?id=133710

        Reviewed by Csaba Osztrogonác.

        * BuildSlaveSupport/build.webkit.org-config/config.json: Removed EFL 32bit bot.

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

        [GTK] Use a different user agent string depending on the site
        https://bugs.webkit.org/show_bug.cgi?id=132681

        Reviewed by Anders Carlsson.

        Add a unit test to check user agent quirks.

        * TestWebKitAPI/PlatformGTK.cmake:
        * TestWebKitAPI/Tests/WebCore/gtk/UserAgentQuirks.cpp: Added.
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/WebKit2Gtk/TestWebKitSettings.cpp:
        (testWebKitSettings): Site specific quirks setting is now enabled
        by default.

2014-06-10  Gyuyoung Kim  <gyuyoung.kim@samsung.com>

        Unreviewed, update my list of email addresses in contributors.json.

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

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

        Always switch to an sRGB screen color profile when running tests
        https://bugs.webkit.org/show_bug.cgi?id=133712

        Reviewed by Tim Horton.
        
        Switch the screen color profile to sRGB when running tests, because even ref
        tests need the screen to use the correct color profile.

        * DumpRenderTree/mac/LayoutTestHelper.m:
        (installLayoutTestColorProfile):
        * Scripts/webkitpy/port/mac.py:
        (MacPort.start_helper):

2014-06-10  Martin Hodovan  <mhodovan@partner.samsung.com>

        [EFL] Bump EFL libraries to 1.9
        https://bugs.webkit.org/show_bug.cgi?id=125479

        Reviewed by Gyuyoung Kim.

        Based on the work of Ryuan Choi <ryuan.choi@samsung.com>
        and László Langó <llango.u-szeged@partner.samsung.com>.

        * ImageDiff/CMakeLists.txt:
        * MiniBrowser/efl/CMakeLists.txt:
        * efl/install-dependencies:
        * efl/jhbuild.modules:
        * efl/jhbuildrc:

2014-06-10  David Farler  <dfarler@apple.com>

        old-run-webkit-tests: Create CoreSimulator device on demand and find it by name
        https://bugs.webkit.org/show_bug.cgi?id=133663

        Reviewed by David Kilzer.

        * Scripts/old-run-webkit-tests:
        (installAndLaunchDumpToolAppUsingNotification):
        - Remove obsolete notification keys
        - Key off of mandatory device UDID (a UUID)
        - Create a device on demand via CoreSimulator if necessary
        -- Grab the UDID from the created device plist.
        * Scripts/webkitdirs.pm:
        (iOSSimulatorDevicesPath): Added
        (iOSSimulatorDevices): Added
        (createiOSSimulatorDevice): Added
        (deleteiOSSimulatorDevice): Added

2014-06-10  Víctor Manuel Jáquez Leal  <vjaquez@igalia.com>

        [GTK][gtkdoc] remove -Wcast-align
        https://bugs.webkit.org/show_bug.cgi?id=133640

        Apparently gcc warns that GParamSpec is not castable to
        GParamSpecInt64/GParamSpecUInt64/GParamSpecDouble due they are 64bit, even
        though ARM hackers claim that those only need 4byte alignment. As long as gcc
        behaves that way, this warning is not very useful, also they break the Debian
        packaging.

        This patch appends the compiler flag -Wno-align-cast for the gtkdoc
        scanner compilation, thus the compiler ignores the previous
        -Waling-cast flag.

        Reviewed by Martin Robinson.

        * gtk/generate-gtkdoc:
        (get_generator_for_config):

2014-06-09  Alexey Proskuryakov  <ap@apple.com>

        Disable button animations in regression tests
        https://bugs.webkit.org/show_bug.cgi?id=133647
        <rdar://problem/16677530>

        Reviewed by Tim Horton.

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

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

        Move scrolling-related tests to tiled-drawing/scrolling subdirectory, and minor cleanup
        https://bugs.webkit.org/show_bug.cgi?id=133650

        Reviewed by Tim Horton.
        
        No point checking for a Windows-style path in Cocoa code.

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

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

        Fix more latched scrolling test flakiness and slowness
        https://bugs.webkit.org/show_bug.cgi?id=133601

        Reviewed by Brent Fulgham.
        
        Latched scrolling tests were flakey for two reasons. First, the EventSender
        wheel events were async from the web to the UI process, and the resulting
        synthetic events also async from the UI to the web process. Make them sync
        for testing.
        
        Secondly, the timer-based scrolling tree commit could result in the scrolling
        tree (specifically the frame node's notion of the scrollable area and content
        size) not being updated before the scrolling thread starts getting wheel events.
        Fix by having WebPage::wheelEventSyncForTesting() commit if necessary.
        
        Finally remove all the now-unnecessary timeouts from the tests.

        * WebKitTestRunner/mac/EventSenderProxy.mm:
        (WTR::EventSenderProxy::mouseMoveTo):
        (WTR::EventSenderProxy::mouseScrollBy):
        (WTR::EventSenderProxy::mouseScrollByWithWheelAndMomentumPhases):

2014-06-09  Andrzej Badowski  <a.badowski@samsung.com>

        [EFL] Add parameter to MiniBrowser to disable web security
        https://bugs.webkit.org/show_bug.cgi?id=121095

        Reviewed by Gyuyoung Kim.

        -w (--web-security) commandline allows to disable/enable web security (enabled by default).
        The reason for this is to test and debug (using, for example, MiniBrowser) scripts accessing
        resources from other domains (cross-domain requests) such as access map location on another server.
        Another possibility is to launch in a webkit browser local file tests that will refer to the links
        in the http website loaded in an iframe. It will not be possible without deactivation of web security.

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

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

        32-bit build fix.

        * WebKitTestRunner/mac/EventSenderProxy.mm:
        (WTR::EventSenderProxy::mouseMoveTo):
        (WTR::EventSenderProxy::mouseScrollByWithWheelAndMomentumPhases):

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

        Fix builds on 10.8; -firstObject isn't declared on NSArray there.

        * DumpRenderTree/mac/DumpRenderTree.mm:
        (createWebViewAndOffscreenWindow):
        * DumpRenderTree/mac/EventSendingController.mm:
        (-[EventSendingController mouseScrollByX:andY:continuously:]):
        (-[EventSendingController mouseScrollByX:andY:withWheel:andMomentumPhases:]):
        * WebKitTestRunner/mac/EventSenderProxy.mm:
        (WTR::EventSenderProxy::mouseScrollBy):
        (WTR::EventSenderProxy::mouseScrollByWithWheelAndMomentumPhases):

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

        Latched scrolling tests are flakey on Mavericks
        https://bugs.webkit.org/show_bug.cgi?id=133578
        <rdar://problem/17180591>

        Reviewed by Brent Fulgham.
        
        The latched scrolling tests rely on synthetic mousewheel events whose coordinates can
        be wrong on machines with more than one screen. This is because we use
        [NSScreen mainScreen] when computing the global coordinates of the events, but
        [NSScreen mainScreen] returns the screen with the key window, not the first screen.
        
        So replace calls to [NSScreen mainScreen] with [[NSScreen screens] firstObject]. Also
        add comments clarifying why the coordinate math works (which is not obvious given
        the events have no target window).
        
        Some scrolling tests also dispatched events outside the 800x600 test window, so
        fix those tests, and add logging that will appear in test output when this happens.

        * DumpRenderTree/mac/DumpRenderTree.mm:
        (createWebViewAndOffscreenWindow):
        * DumpRenderTree/mac/EventSendingController.mm:
        (-[EventSendingController mouseScrollByX:andY:continuously:]):
        (-[EventSendingController mouseScrollByX:andY:withWheel:andMomentumPhases:]):
        * WebKitTestRunner/mac/EventSenderProxy.mm:
        (WTR::EventSenderProxy::mouseMoveTo):
        (WTR::EventSenderProxy::mouseScrollBy):
        (WTR::EventSenderProxy::continuousMouseScrollBy):
        (WTR::EventSenderProxy::mouseScrollByWithWheelAndMomentumPhases):

2014-06-05  Carlos Alberto Lopez Perez  <clopez@igalia.com>

        [GTK] run-perf-tests should run the tests inside the jhbuild shell.
        https://bugs.webkit.org/show_bug.cgi?id=133533

        Reviewed by Carlos Garcia Campos.

        * Scripts/webkitpy/common/multiprocessing_bootstrap.py:
        (run): Remove the jhbuild-wrapper wrapper from here. It should be
        on Scripts/webkitpy/port/gtk.py.
        * Scripts/webkitpy/port/base.py:
        (Port.set_option): Add a set_option(name, value) function to set
        the optparse parameter "name" to the value "value", even if the
        parameter "name" is already initialized.
        * Scripts/webkitpy/port/gtk.py:
        (GtkPort.__init__): Set the default wrapper to jhbuild-wrapper.
        If another wrapper is specified via the option "-l --wrapper=x",
        then prepend the jhbuild-wrapper to the one specified.

2014-06-04  David Farler  <dfarler@apple.com>

        Build ASan WebKit for iOS Simulator
        https://bugs.webkit.org/show_bug.cgi?id=133489

        Reviewed by Darin Adler.

        * DumpRenderTree/mac/Configurations/DumpRenderTree.xcconfig:
        * DumpRenderTree/mac/Configurations/DumpRenderTreeApp.xcconfig:
        - Add missing ASan LDFLAGS.
        * asan/asan.xcconfig:
        - Split compiler-rt linker flags for OS X and iOS Simulator

2014-06-03  Yoav Weiss  <yoav@yoav.ws>

        Add myself (yoav@yoav.ws) to contributors.json
        https://bugs.webkit.org/show_bug.cgi?id=133492

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

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

        REGRESSION(r169092 and r169102): Skip failing JSC tests poperly on non-x86 Darwin platforms
        https://bugs.webkit.org/show_bug.cgi?id=133149

        Reviewed by Csaba Osztrogonác.

        * Scripts/run-jsc-stress-tests: Added determineOS to determine the host operating system the script run on.

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

        Add a verbose flag to binding tests
        https://bugs.webkit.org/show_bug.cgi?id=122303

        Reviewed by Csaba Osztrogonác.

        This patch will:
        - Add a verbose keyword argument to the BindingsTests constructor,
        - Add --no-verbose option to the run-bindigs-test.
        Verbose mode, which is on by default, prints positive results to stdout as before.
        When the --no-verbose option added to run-bindings-tests, positive results are not printed at all.

        Original patch from Matthew Hanson <matthew_hanson@apple.com>

        * Scripts/run-bindings-tests:
        (main):
        * Scripts/webkitpy/bindings/main.py:
        (BindingsTests.__init__):
        (BindingsTests.detect_changes):

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

        Rename DoYouEvenBench 0.17 to Speedometer 1.0 and add a new look.
        https://bugs.webkit.org/show_bug.cgi?id=133455

        Reviewed by Timothy Hatcher.

        Since the perf. dashboard doesn't support following renamed benchmarks,
        keep reporting Speedometer results as DoYouEvenBench results.

        * Scripts/webkitpy/performance_tests/perftestsrunner.py:
        (_generate_results_dict):

2014-05-31  Darin Adler  <darin@apple.com>

        Viewport percentage tests that resize the viewport are flaky
        https://bugs.webkit.org/show_bug.cgi?id=133351

        Reviewed by Anders Carlsson.

        * DumpRenderTree/mac/DumpRenderTree.mm:
        (sizeWebViewForCurrentTest): Added a call to reset the window origin, which
        happens to be stored in the UI delegate object. This is part of resetting the
        window position.

        * DumpRenderTree/mac/UIDelegate.h: Store the window origin rather than storing
        a frame rectangle. The size is stored in the size of the web view itself.
        * DumpRenderTree/mac/UIDelegate.mm:
        (-[UIDelegate resetWindowOrigin]): Added.
        (-[UIDelegate webView:setFrame:]): Changed to set the size of the web view. The
        old version would store the frame, but not resize the web view!
        (-[UIDelegate webViewFrame:]): Get the size from the web view.

        * WebKitTestRunner/efl/PlatformWebViewEfl.cpp:
        (WTR::PlatformWebView::setWindowFrame): Added code to resize the web view.

        * WebKitTestRunner/gtk/PlatformWebViewGtk.cpp:
        (WTR::PlatformWebView::resizeTo): Added a comment about missing code to resize
        the window.

        * WebKitTestRunner/ios/PlatformWebViewIOS.mm:
        (WTR::PlatformWebView::resizeTo): Changed this to call setWindowFrame so the
        window gets resized too, not just the web view.
        (WTR::PlatformWebView::setWindowFrame): Added code to set the size of the web view.

        * WebKitTestRunner/mac/PlatformWebViewMac.mm:
        (WTR::PlatformWebView::resizeTo): Changed this to call setWindowFrame so the
        window gets resized too, not just the web view.
        (WTR::PlatformWebView::setWindowFrame): Added code to set the size of the web view.

2014-05-30  Michael Saboff  <msaboff@apple.com>

        Change run-jsc-stress-tests to not resolve jsc path locally when creating a bundle
        https://bugs.webkit.org/show_bug.cgi?id=133409

        Reviewed by Filip Pizlo.

        Handle creating a tarball the same way as running remote when processing
        paths in prepareBundle.

        * Scripts/run-jsc-stress-tests:

2014-05-30  Mario Sanchez Prada  <mario.prada@samsung.com>

        [ATK] Deprecate usage of logAccessibilityEvents() in layout tests
        https://bugs.webkit.org/show_bug.cgi?id=132280

        Reviewed by Chris Fleizach.

        Remove implementation of logAccessibilityEvents() for ATK based
        ports, as this has proved to be a flaky method of checking that
        ATK events are being properly emitted. Instead, it's better to use
        the addNotificationListener() functions and provide a JS callback
        to check that the right events are being emmitted from the tests.

        * WebKitTestRunner/InjectedBundle/atk/AccessibilityControllerAtk.cpp:
        (WTR::AccessibilityController::logAccessibilityEvents): Replaced
        with dummy implementation.
        * WebKitTestRunner/InjectedBundle/atk/AccessibilityNotificationHandlerAtk.cpp:
        (WTR::AccessibilityNotificationHandler::logAccessibilityEvents): Removed

2014-05-30  Mario Sanchez Prada  <mario.prada@samsung.com>

        [ATK] Deprecate usage of logAccessibilityEvents() in layout tests
        https://bugs.webkit.org/show_bug.cgi?id=132280

        Rubber stamped by Carlos Garcia Campos.

        Fix two small issues with previous patch (r169483), that caused some tests to break.

        * WebKitTestRunner/InjectedBundle/atk/AccessibilityNotificationHandlerAtk.cpp:
        (WTR::AccessibilityNotificationHandler::connectAccessibilityCallbacks): Removed
        duplicated entry.
        * WebKitTestRunner/InjectedBundle/atk/AccessibilityUIElementAtk.cpp:
        (WTR::AccessibilityUIElement::setSelectedTextRange): Fix boolean condition.

2014-05-30  Jarek Czekalski  <jarekczek@poczta.onet.pl>

        [ATK] Added new accessibility signal: text-caret-moved.
        Make AccessibilityUIElement.setSelectedTextRange work
        as atk_text_set_caret_offset when given offset == 0.
        https://bugs.webkit.org/show_bug.cgi?id=132527

        Reviewed by Mario Sanchez Prada.

        text-caret-moved signal in accessibilityController is needed to
        implement tests from Tools/TestWebKitAPI/Tests/WebKitGtk/testatk.c
        as LayoutTests. Add the signal to the controller.

        * WebKitTestRunner/InjectedBundle/Bindings/AccessibilityUIElement.idl:
        * WebKitTestRunner/InjectedBundle/AccessibilityUIElement.cpp:
        * WebKitTestRunner/InjectedBundle/AccessibilityUIElement.h:
        * WebKitTestRunner/InjectedBundle/ios/AccessibilityUIElementIOS.mm:
        * WebKitTestRunner/InjectedBundle/mac/AccessibilityUIElementMac.mm:
        (setSelectedTextRange): Change return type to bool.
        * WebKitTestRunner/InjectedBundle/atk/AccessibilityUIElementAtk.cpp:
        (setSelectedTextRange): Call atk_text_set_caret_offset and return bool.
        * WebKitTestRunner/InjectedBundle/atk/AccessibilityNotificationHandlerAtk.cpp:
        (axObjectEventListener): Add notification name AXTextCaretMoved, allow
        for extra arguments passed to handler and use it for text-caret-moved offset.
        (WTR::AccessibilityNotificationHandler::connectAccessibilityCallbacks):
        Connect callback to new listener for ATK:AtkText:text-caret-moved.
        Refactor so that failures be reported.
        Initialize atk interfaces before trying to connect to them, see
        https://bugzilla.gnome.org/show_bug.cgi?id=729922
        (WTR::AccessibilityNotificationHandler::disconnectAccessibilityCallbacks):
        Simplify code by using a vector in place of dozen variables.
        * DumpRenderTree/atk/AccessibilityCallbacksAtk.cpp:
        Comment about not synchronizing with accessibilityController.

2014-05-29  Carlos Alberto Lopez Perez  <clopez@igalia.com>

        [GTK] Add a WebKit2 Performance bot.
        https://bugs.webkit.org/show_bug.cgi?id=132862

        Reviewed by Csaba Osztrogonác.

        This adds a GTK WebKit2 perf bot.

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

2014-05-29  Dan Bernstein  <mitz@apple.com>

        Fixed the WebKitTestRunner build after r169452.

        * WebKitTestRunner/InjectedBundle/InjectedBundle.cpp:
        (WTR::InjectedBundle::initialize):

2014-05-28  Gwang Yoon Hwang  <yoon@igalia.com>

        Unreviewed. Update my email addresses in contributors.json.

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

2014-05-27  Jon Honeycutt  <jhoneycutt@apple.com>

        Need an API test for bug #133193 (r169315)
        <https://bugs.webkit.org/show_bug.cgi?id=133324>

        This adds an API test that ensures that calling "stop loading" during a
        "did fail provisional load" callback doesn't crash.

        Reviewed by Andy Estes.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        Add new files to project.

        * TestWebKitAPI/Tests/WebKit2/StopLoadingDuringDidFailProvisionalLoad.cpp: Added.
        (TestWebKitAPI::didReceiveMessageFromInjectedBundle):
        If the message is the "test done" message, record that.
        (TestWebKitAPI::setInjectedBundleClient):
        Register a function for the "did receive message from injected bundle"
        callback.
        (TestWebKitAPI::didFailProvisionalLoadWithErrorForFrame):
        Assert that we received the message from the injected bundle, and set
        'done' to finish the test.
        (TestWebKitAPI::TEST):
        Create a WebView, register a page loader client for the "did fail
        provisional load" callback, and load a non-existent resource.

        * TestWebKitAPI/Tests/WebKit2/StopLoadingDuringDidFailProvisionalLoad_bundle.cpp: Added.
        (TestWebKitAPI::StopLoadingDuringDidFailProvisionalLoadTest::StopLoadingDuringDidFailProvisionalLoadTest):
        (TestWebKitAPI::didFailProvisionalLoadWithErrorForFrameCallback):
        Tell the StopLoadingDuringDidFailProvisionalLoadTest object that the
        provisional load failed.
        (TestWebKitAPI::StopLoadingDuringDidFailProvisionalLoadTest::didCreatePage):
        Register a page loader client for the "did fail provisional load"
        callback.
        (TestWebKitAPI::StopLoadingDuringDidFailProvisionalLoadTest::didFailProvisionalLoad):
        Call WKBundlePageStopLoading() during the callback. This not crashing
        is what we're ensuring with this test.

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

        [GTK] Make it possible to build with FTL enabled
        https://bugs.webkit.org/show_bug.cgi?id=133219

        Reviewed by Philippe Normand.

        * gtk/jhbuild-optional.modules: Add llvm from svn and build the
        same revision than mac.

2014-05-27  Michael Saboff  <msaboff@apple.com>

        REGRESSION(r169265): sh: line 0: cd: ../.vm
        https://bugs.webkit.org/show_bug.cgi?id=133242

        Rubber stamped by Oliver Hunt.

        Changed runAndMonitorTestRunnerCommand() to pass mysys as a string instead of an
        array since the command may contain character escapes that don't work with the
        array form of system().

        * Scripts/run-jsc-stress-tests:

2014-05-27  Gyuyoung Kim  <gyuyoung.kim@samsung.com>

        [EFL] Change download url of freetype6
        https://bugs.webkit.org/show_bug.cgi?id=133303

        Reviewed by Csaba Osztrogonác.

        freetype6 tarball isn't downloaded in Korea. So, we need to
        change the url for now.

        * efl/jhbuild.modules:

2014-05-27  Tibor Meszaros  <tmeszaros.u-szeged@partner.samsung.com>

        Remove BLOB guards
        https://bugs.webkit.org/show_bug.cgi?id=132863

        Reviewed by Csaba Osztrogonác.

        * Scripts/webkitperl/FeatureList.pm:

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

        Remove leftover comment from r165182.

        Rubber stamped by Carlos Garcia Campos.

        * TestWebKitAPI/Tests/WebKit2Gtk/TestMultiprocess.cpp:

2014-05-26  Tibor Meszaros  <tmeszaros.u-szeged@partner.samsung.com>

        [EFL] Add LLVM as optional jhbuild module for FTL developers
        https://bugs.webkit.org/show_bug.cgi?id=133216

        Reviewed by Gyuyoung Kim.

        * efl/jhbuild.modules:

2014-05-26  Gyuyoung Kim  <gyuyoung.kim@samsung.com>

        Fix test failures on python test
        https://bugs.webkit.org/show_bug.cgi?id=133297

        Reviewed by Dirk Schulze.

        2 tests are failing because of unbounded local variable reference in test_importer.py.

        * Scripts/webkitpy/w3c/test_importer.py: Move local variable declaration to top.
        (TestImporter.import_tests):

2014-05-26  Carlos Alberto Lopez Perez  <clopez@igalia.com>

        [GTK] GObject DOM bindings API break test fails in the tests bots
        https://bugs.webkit.org/show_bug.cgi?id=133211

        Reviewed by Martin Robinson.

        When generating the built product archive on platform GTK, we need
        to copy also the file gtkdoc-webkitdom.cfg and the directory
        DerivedSources/webkitdom.

        * BuildSlaveSupport/built-product-archive:
        (archiveBuiltProduct):

2014-05-26  Commit Queue  <commit-queue@webkit.org>

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

        Broke CJK font fallback (Requested by ap on #webkit).

        Reverted changeset:

        "[Mac] WebProcess doesn't follow localization of UI process
        when run as a service"
        https://bugs.webkit.org/show_bug.cgi?id=133126
        http://trac.webkit.org/changeset/169122

2014-05-26  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] WebProcess leaked when closing pages with network process enabled
        https://bugs.webkit.org/show_bug.cgi?id=129684

        Reviewed by Anders Carlsson.

        Enable the test to check that web processes finish when the web
        view is destroyed.

        * TestWebKitAPI/Tests/WebKit2Gtk/TestMultiprocess.cpp:

2014-05-26  Carlos Garcia Campos  <cgarcia@igalia.com>

        REGRESSION(r164632): [GTK] Crash in generate-gtkdoc when rebasing docs
        https://bugs.webkit.org/show_bug.cgi?id=133279

        Reviewed by Philippe Normand.

        generator.saw_warnings is only set by GTKDoc::generate(), so it
        should only be used after generate.

        * gtk/generate-gtkdoc:
        (generate_documentation_for_config): Do not check
        generator.saw_warnings again, simply return the value returned by
        generate_doc() which is generator.saw_warnings. When rebasing,
        returns always False since there aren't warnings.

2014-05-26  Youenn Fablet  <youenn.fablet@crf.canon.fr>

        W3C test importer should catch exceptions coming from HTML/CSS conversion
        https://bugs.webkit.org/show_bug.cgi?id=133176

        Reviewed by Darin Adler.

        Exceptions raised when converting HTML/CSS are caught.
        Files for which conversion failed are still copied to the target directory.
        Each individual conversion failure is logged.
        Total conversion failure number is logged at the end of the import process.

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

2014-05-26  Carlos Alberto Lopez Perez  <clopez@igalia.com>

        [GTK] Allow to run the tests on the native X display.
        https://bugs.webkit.org/show_bug.cgi?id=133157

        Reviewed by Benjamin Poulain.

        This adds a new driver (xorgdriver) that runs the tests on the
        X display referenced by the environment variable DISPLAY.

        This new driver will be activated only if the environment variable
        USE_NATIVE_XDISPLAY is defined. This can be used both for layout
        tests and performance tests.

        This patch also makes the script run-perf-tests to check the
        system dependencies before starting the tests. Previously this
        was not checked, and if the system dependencies were not met,
        the script tried to execute the tests anyway, causing massive
        failures. For example, if you had Xvfb not installed and you
        wanted to use the Xvfb driver (the default on GTK and EFL),
        run-perf-tests would not abort.

        * Scripts/webkitpy/performance_tests/perftestsrunner.py:
        (PerfTestsRunner._parse_args): Check the system dependencies of
        the driver before starting the tests.
        * Scripts/webkitpy/port/driver.py:
        (Driver): Implement generic check_driver method.
        (Driver.check_driver):
        (Driver.check_driver.implementation):
        * Scripts/webkitpy/port/gtk.py:
        (GtkPort._driver_class): Check for environment variable
        USE_NATIVE_XDISPLAY to decide if the Xorg driver should be used.
        * Scripts/webkitpy/port/xorgdriver.py: Added.
        (XorgDriver): Implement Xorg driver.
        (XorgDriver.check_driver):
        (XorgDriver._start):

2014-05-26  Carlos Alberto Lopez Perez  <clopez@igalia.com>

        REGRESSION(r166798): [GTK] [EFL] kill-old-processes should not kill dbus-daemon
        https://bugs.webkit.org/show_bug.cgi?id=133215

        Reviewed by Csaba Osztrogonác.

        This reverts r166798.

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

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

        [EFL] Turn on ENABLE_CSS_FILTERS in build script
        https://bugs.webkit.org/show_bug.cgi?id=133278

        Reviewed by Gyuyoung Kim.

        * Scripts/webkitperl/FeatureList.pm: Add a build script condition missing in r169172.

2014-05-26  Eva Balazsfalvi  <evab.u-szeged@partner.samsung.com>

        run-javascriptcore-tests warning fix on non Mac platforms
        https://bugs.webkit.org/show_bug.cgi?id=133260

        Reviewed by Darin Adler.

        * Scripts/webkitdirs.pm:
        (argumentsForConfiguration):

2014-05-23  Michael Saboff  <msaboff@apple.com>

        REGRESSION(r169265): sh: line 0: cd: ../.vm
        https://bugs.webkit.org/show_bug.cgi?id=133242

        Rubber stamped by Geoffrey Garen.

        Added missing shell escapes '\' required as part of previous fix.

        * Scripts/run-jsc-stress-tests:

2014-05-23  Ryosuke Niwa  <rniwa@webkit.org>

        Revert the erroneous change committed in r169286.

        * Scripts/webkitpy/performance_tests/perftest.py:
        (PerfTest._run_with_driver):

2014-05-23  Geoffrey Garen  <ggaren@apple.com>

        run-perf-tests should ignore whitespace lines when snarfing test output
        https://bugs.webkit.org/show_bug.cgi?id=133238

        Reviewed by Ryosuke Niwa.

        Required for PerformanceTests/Canvas/terrain.html.

        * Scripts/webkitpy/performance_tests/perftest.py:
        (PerfTest._run_with_driver):
        (PerfTest):

2014-05-23  Michael Saboff  <msaboff@apple.com>

        REGRESSION (r169241) Crash running run-jsc-stress-tests on EFL ARM
        https://bugs.webkit.org/show_bug.cgi?id=133223

        Reviewed by Geoffrey Garen.

        Change runAndMonitorTestRunnerCommand() to convert the *cmd argument to a
        string before calling IO.popen() to work with older versions of ruby.
        Changed the remote path in runShellTestRunner to quote the command
        string we want to run via ssh so that it will work correctly with array
        to string conversion needed for popen.

        * Scripts/run-jsc-stress-tests:

2014-05-23  Zsolt Borbely  <zsborbely.u-szeged@partner.samsung.com>

        Remove 'css-shaders' option from the build-webkit
        https://bugs.webkit.org/show_bug.cgi?id=133212

        Reviewed by Daniel Bates.

        Original CSS shaders removed in r162644.

        * Scripts/webkitperl/FeatureList.pm:

2014-05-23  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] GObject DOM bindings API break test should fail in the bots when the command fails to run
        https://bugs.webkit.org/show_bug.cgi?id=133209

        Reviewed by Sergio Villar Senin.

        Return FAILURE when the command failed to run.

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

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

        [GTK] Install libharfbuzz-dev in Tools/gtk/install-dependencies
        https://bugs.webkit.org/show_bug.cgi?id=133210

        Reviewed by Carlos Garcia Campos.

        * gtk/install-dependencies:

2014-05-22  Benjamin Poulain  <bpoulain@apple.com>

        Add Yusuke Suzuki to the list of contributors (for real)

        Wrong section...

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

2014-05-22  Benjamin Poulain  <bpoulain@apple.com>

        Add Yusuke Suzuki to the list of contributors

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

2014-05-22  Michael Saboff  <msaboff@apple.com>

        Eliminate n/total progress update from run-jsc-stress-tests output to file
        https://bugs.webkit.org/show_bug.cgi?id=133191

        Reviewed by Geoffrey Garen.

        Changed progressMeter setting to be based on stdout being a tty instead of
        stdin.  Unified the processing of output from the shell runner to match the
        same processing as is used by the makefile runner.  As part of this, the 
        shell runner script was simplified.  It now forwards the output of each
        test_script just like the Makefile and doesn't provide its own progress.

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

2014-05-22  Michael Saboff  <msaboff@apple.com>

        Add option to run-jsc-stress-tests to use installed jsc
        https://bugs.webkit.org/show_bug.cgi?id=133102

        Reviewed by Geoffrey Garen.

        Added --no-copy option to not copy a JavaScriptCore framework, but use the one
        provied with the --jsc option.

        * Scripts/run-jsc-stress-tests:

2014-05-21  Zsolt Borbely  <zsborbely.u-szeged@partner.samsung.com>

        [EFL] Add include path of compact_unwind_encoding.h if FTL JIT is enabled
        https://bugs.webkit.org/show_bug.cgi?id=132907

        Reviewed by Gyuyoung Kim.

        We need the mach-o/compact_unwind_encoding.h header from libc++abi-dev package
        in JavaScriptCore/ftl/FTLUnwindInfo.cpp when FTL JIT is enabled.

        * efl/install-dependencies:

2014-05-21  Eva Balazsfalvi  <evab.u-szeged@partner.samsung.com>

        REGRESSION(r169092): It broke run-jsc-stress tests on non Mac platforms
        https://bugs.webkit.org/show_bug.cgi?id=133145

        Reviewed by Csaba Osztrogonác.

        * Scripts/run-jsc-stress-tests:

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

        [Mac] WebProcess doesn't follow localization of UI process when run as a service
        https://bugs.webkit.org/show_bug.cgi?id=133126
        <rdar://problem/13396515>
        <rdar://problem/16561084>

        Reviewed by Sam Weinig and Tim Horton.

        * WebKitTestRunner/InjectedBundle/mac/InjectedBundleMac.mm:
        (WTR::InjectedBundle::platformInitialize): It was too late to override language
        here, and it's not necessary any more. Keeping the code for older OS versions in
        case it did have effect in some code paths.

2014-05-19  David Farler  <dfarler@apple.com>

        Move WebKitTestRunner to std::unique_ptr
        https://bugs.webkit.org/show_bug.cgi?id=133081

        Reviewed by Daniel Bates.

        * WebKitTestRunner/InjectedBundle/InjectedBundle.cpp:
        (WTR::InjectedBundle::didCreatePage):
        * WebKitTestRunner/InjectedBundle/InjectedBundle.h:
        * WebKitTestRunner/TestController.cpp:
        (WTR::TestController::initialize):
        (WTR::TestController::createWebViewWithOptions):
        (WTR::TestController::resetStateToConsistentValues):
        (WTR::TestController::runTest):
        * WebKitTestRunner/TestController.h:
        * WebKitTestRunner/TestInvocation.cpp:
        * WebKitTestRunner/TestInvocation.h:
        * WebKitTestRunner/WorkQueueManager.cpp:
        (WTR::WorkQueueManager::processWorkQueue):
        (WTR::WorkQueueManager::enqueue):
        * WebKitTestRunner/WorkQueueManager.h:

2014-05-20  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] WebKitWebPage::send-request always pass a valid pointer for redirected response
        https://bugs.webkit.org/show_bug.cgi?id=133119

        Reviewed by Sergio Villar Senin.

        Check that redirect response parameter of
        WebKitWebPage::send-request signal is NULL when not redirecting
        and a valid WebKitURIResponse object when redirecting.

        * TestWebKitAPI/Tests/WebKit2Gtk/TestResources.cpp:
        (testWebResourceSendRequest):
        (serverCallback):
        * TestWebKitAPI/Tests/WebKit2Gtk/WebExtensionTest.cpp:
        (sendRequestCallback):

2014-05-20  Carlos Garcia Campos  <cgarcia@igalia.com>

        REGRESSION(CMAKE): [GTK] Several WebKit2GTK+ unit tests are no longer built
        https://bugs.webkit.org/show_bug.cgi?id=133117

        Reviewed by Philippe Normand.

        Bring back missing tests to the build.

        * TestWebKitAPI/Tests/WebKit2Gtk/CMakeLists.txt:

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

        Take care of some ARM64 test failures
        https://bugs.webkit.org/show_bug.cgi?id=133090

        Reviewed by Geoffrey Garen.

        * Scripts/run-jsc-stress-tests: Make it easier to conditionally skip things.

2014-05-19  David Kilzer  <ddkilzer@apple.com>

        [iOS] REGRESSION (r168910): webkitdirs.pm: Be more forgiving when parsing --sdk, --device and --sim
        <http://webkit.org/b/133089>

        Reviewed by Darin Adler.

        * Scripts/webkitdirs.pm:
        (determineXcodeSDK): If both '--sdk SDKROOT' and '--sim' are
        specified on the command line, we would remove the '--sdk'
        arguments, but leave '--sim', potentially passing it along to
        xcodebuild causing a build failure.  This happens when
        'old-run-webkit-tests --release --sim' invokes
        build-dumprendertree when DumpRenderTree hasn't been built yet.

2014-05-19  David Farler  <dfarler@apple.com>

        Dashboard: OpenSource revision key changed from WebKitOpenSource to WebKit
        https://bugs.webkit.org/show_bug.cgi?id=133086

        Reviewed by Daniel Bates.

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

2014-05-19  David Kilzer  <ddkilzer@apple.com>

        REGRESSION (r169042): Fix run-api-tests on Mountain Lion
        <http://webkit.org/b/132954>

        * Scripts/webkitdirs.pm:
        (sharedCommandLineOptionsUsage): Remove the prototype for the
        subroutine.  Older perls don't like the "+@" syntax.

2014-05-19  Eva Balazsfalvi  <evab.u-szeged@partner.samsung.com>

        run-javascriptcore-tests should sort the list of failing stress tests
        https://bugs.webkit.org/show_bug.cgi?id=132989

        Reviewed by Csaba Osztrogonác.

        * Scripts/run-javascriptcore-tests:

2014-05-19  David Kilzer  <ddkilzer@apple.com>

        webkitdirs.pm: Add setupMacWebKitEnvironment() to set __XPC_DYLD_FRAMEWORK_PATH consistently
        <http://webkit.org/b/132954>

        Reviewed by Darin Adler.

        Extract code into setupMacWebKitEnvironment() for setting up
        common environment variables so it may be shared.  Sets
        __XPC_DYLD_FRAMEWORK_PATH consistently and adds support for
        using guardmalloc to some scripts.

        Also adds support for parsing shared (common) command-line
        switches, initially just -g|--guard-malloc.

        * Scripts/bisect-builds: Add -g|--guard-malloc support by using
        sharedCommandLineOptions() and sharedCommandLineOptionsUsage().
        (mountAndRunNightly): Call setupMacWebKitEnvironment().  Use a
        local copy of %ENV when launching Safari so we don't have to
        restore variables.

        * Scripts/run-api-tests: Add -g|--guard-malloc support by using
        sharedCommandLineOptions() and sharedCommandLineOptionsUsage().
        Check result of GetOptions() to catch invalid command-line
        switches.
        (runTest): Use a local copy of %ENV when running tests so we
        don't have to restore variables.
        (prepareEnvironmentForRunningTestTool): Call
        setupMacWebKitEnvironment().

        * Scripts/run-pageloadtest: Add -g|--guard-malloc support by
        using sharedCommandLineOptions() and
        sharedCommandLineOptionsUsage().  Call
        setupMacWebKitEnvironment().

        * Scripts/webkitdirs.pm:
        (sharedCommandLineOptions): Return array of common switches to
        pass to Getopt::Long::GetOptions().
        (sharedCommandLineOptionsUsage): Return formatted string of
        common switches for printing usage help text.
        (setUpGuardMallocIfNeeded): Support using '-g' for enabling
        guardmalloc.
        (printHelpAndExitForRunAndDebugWebKitAppIfNeeded): Ditto.
        (setupMacWebKitEnvironment): Extracted from runMacWebKitApp()
        and changed not to clobber DYLD_FRAMEWORK_PATH if already set.
        (runMacWebKitApp): Call setupMacWebKitEnvironment().  Use a
        local copy of %ENV when launching Safari so we don't have to
        restore variables.
        (execMacWebKitAppForDebugging): Call
        setupMacWebKitEnvironment().

2014-05-18  Rik Cabanier  <cabanier@adobe.com>

        support for navigator.hardwareConcurrency
        https://bugs.webkit.org/show_bug.cgi?id=132588

        Reviewed by Filip Pizlo.

        * Scripts/webkitperl/FeatureList.pm:

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

        Implement Navigations for all methods declared returning one
        https://bugs.webkit.org/show_bug.cgi?id=133048
        <rdar://problem/16830064>

        Reviewed by Sam Weinig.

        * MiniBrowser/mac/MiniBrowser_Prefix.pch:
        Import WebKit.h.
        
        * MiniBrowser/mac/WK2BrowserWindowController.m:
        (-[WK2BrowserWindowController webView:didStartProvisionalNavigation:]):
        (-[WK2BrowserWindowController webView:didReceiveServerRedirectForProvisionalNavigation:]):
        (-[WK2BrowserWindowController webView:didFailProvisionalNavigation:withError:]):
        (-[WK2BrowserWindowController webView:didCommitNavigation:]):
        (-[WK2BrowserWindowController webView:didFinishLoadingNavigation:]):
        (-[WK2BrowserWindowController webView:didFailNavigation:withError:]):
        Print out the navigations.

2014-05-17  Zalan Bujtas  <zalan@apple.com>

        Subpixel rendering: Add subpixelCSSOMElementMetricsEnabled to WK1 WebPreferences.
        https://bugs.webkit.org/show_bug.cgi?id=133029

        Reviewed by Simon Fraser.

        Added a menu item to toggle subpixelCSSOMElementMetricsEnabled's value. However
        toggling it on a WK2 window needs restart.
        Adding dynamic toggle to WK2 requires a WebPreferences SPI. It's not worth cluttering
        the WebPreferences just to support this temporary toggle.

        * MiniBrowser/mac/BrowserWindowController.h:
        * MiniBrowser/mac/MainMenu.xib:
        * MiniBrowser/mac/WK1BrowserWindowController.m:
        (-[WK1BrowserWindowController validateMenuItem:]):
        (-[WK1BrowserWindowController isSubpixelCSSOMElementMetricsEnabled]):
        (-[WK1BrowserWindowController toggleSubpixelCSSOMElementMetricsEnabled:]):
        * MiniBrowser/mac/WK2BrowserWindowController.m:
        (-[WK2BrowserWindowController validateMenuItem:]):
        (-[WK2BrowserWindowController isSubpixelCSSOMElementMetricsEnabled]):
        (-[WK2BrowserWindowController toggleSubpixelCSSOMElementMetricsEnabled:]):

2014-05-17  Anders Carlsson  <andersca@apple.com>

        Replace WKContextSetDatabaseDirectory with two WKContextConfiguration parameters
        https://bugs.webkit.org/show_bug.cgi?id=133033
        <rdar://problem/16830143>

        Reviewed by Sam Weinig.

        Set up the WebSQL and IndexedDB directories.

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

2014-05-16  Martin Hock  <mhock@apple.com>

        MemoryCache::addImageToCache should return the result of add().
        https://bugs.webkit.org/show_bug.cgi?id=132928
        <rdar://problem/16651547>

        Reviewed by Alexey Proskuryakov.

        * TestWebKitAPI/Configurations/TestWebKitAPI.xcconfig:
        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/ios/MemoryCacheAddImageToCacheIOS.mm: Added.
        (TestWebKitAPI::TEST):

2014-05-15  David Farler  <dfarler@apple.com>

        old-run-webkit-tests: allow specifying a simulator app path
        https://bugs.webkit.org/show_bug.cgi?id=132975

        Reviewed by Anders Carlsson.

        * Scripts/old-run-webkit-tests:
        (openIPhoneSimulator):
        Add new --simulator-app command line parameter for specifying the
        absolute path to the simulator app to launch before starting a
        session.

2014-05-16  Eva Balazsfalvi  <evab.u-szeged@partner.samsung.com>

        [webkitpy] In case of multiple bug rollout, all bugs should be reopened, not only the oldest one
        https://bugs.webkit.org/show_bug.cgi?id=131363

        Reviewed by Csaba Osztrogonác.

        * Scripts/webkitpy/common/checkout/checkout_mock.py:
        * Scripts/webkitpy/common/net/bugzilla/bugzilla_mock.py:
        (MockBugzilla):
        * Scripts/webkitpy/tool/commands/download_unittest.py:
        (test_create_rollout_multiple_revision_with_one_resolved):
        (test_create_rollout_multiple_resolved):
        (test_rollout_two_revisions):
        (test_rollout_multiple_revisions):
        (test_rollout_multiple_revisions_with_a_missing_bug_id):
        * Scripts/webkitpy/tool/steps/createbug.py:
        (CreateBug.run):
        * Scripts/webkitpy/tool/steps/reopenbugafterrollout.py:
        (ReopenBugAfterRollout.run):

2014-05-16  Martin Hodovan  <mhodovan.u-szeged@partner.samsung.com>

        [WK2] Change the remaining framework includes from WebKit2 to WebKit
        https://bugs.webkit.org/show_bug.cgi?id=132956

        Reviewed by Sam Weinig.

        * MiniBrowser/MiniBrowserWebProcessPlugIn.h:
        * MiniBrowser/mac/AppDelegate.m:
        * MiniBrowser/mac/WK2BrowserWindowController.m:
        * TestWebKitAPI/InjectedBundleController.h:
        * TestWebKitAPI/InjectedBundleMain.cpp:
        * TestWebKitAPI/JavaScriptTest.cpp:
        * TestWebKitAPI/PlatformUtilities.h:
        * TestWebKitAPI/Tests/CustomProtocolsSyncXHRTest.mm:
        * TestWebKitAPI/Tests/WebKit2/CanHandleRequest.cpp:
        * TestWebKitAPI/Tests/WebKit2/CanHandleRequest_Bundle.cpp:
        * TestWebKitAPI/Tests/WebKit2/CookieManager.cpp:
        * TestWebKitAPI/Tests/WebKit2/CoordinatedGraphics/WKViewIsActiveSetIsActive.cpp:
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/WebKit2/CoordinatedGraphics/WKViewIsActiveSetIsActive_Bundle.cpp:
        * TestWebKitAPI/Tests/WebKit2/CoordinatedGraphics/WKViewRestoreZoomAndScrollBackForward.cpp:
        * TestWebKitAPI/Tests/WebKit2/CoordinatedGraphics/WKViewUserViewportToContents.cpp:
        * TestWebKitAPI/Tests/WebKit2/DOMWindowExtensionBasic.cpp:
        * TestWebKitAPI/Tests/WebKit2/DOMWindowExtensionBasic_Bundle.cpp:
        * TestWebKitAPI/Tests/WebKit2/DOMWindowExtensionNoCache_Bundle.cpp:
        * TestWebKitAPI/Tests/WebKit2/DidAssociateFormControls_Bundle.cpp:
        * TestWebKitAPI/Tests/WebKit2/DidNotHandleKeyDown.cpp:
        * TestWebKitAPI/Tests/WebKit2/DocumentStartUserScriptAlertCrash.cpp:
        * TestWebKitAPI/Tests/WebKit2/DocumentStartUserScriptAlertCrash_Bundle.cpp:
        * TestWebKitAPI/Tests/WebKit2/DownloadDecideDestinationCrash.cpp:
        * TestWebKitAPI/Tests/WebKit2/EphemeralSessionPushStateNoHistoryCallback.cpp:
        * TestWebKitAPI/Tests/WebKit2/EvaluateJavaScript.cpp:
        * TestWebKitAPI/Tests/WebKit2/FailedLoad.cpp:
        * TestWebKitAPI/Tests/WebKit2/Find.cpp:
        * TestWebKitAPI/Tests/WebKit2/FindMatches.mm:
        * TestWebKitAPI/Tests/WebKit2/ForceRepaint.cpp:
        * TestWebKitAPI/Tests/WebKit2/FrameMIMETypeHTML.cpp:
        * TestWebKitAPI/Tests/WebKit2/FrameMIMETypePNG.cpp:
        * TestWebKitAPI/Tests/WebKit2/Geolocation.cpp:
        * TestWebKitAPI/Tests/WebKit2/GetInjectedBundleInitializationUserDataCallback.cpp:
        * TestWebKitAPI/Tests/WebKit2/GetInjectedBundleInitializationUserDataCallback_Bundle.cpp:
        * TestWebKitAPI/Tests/WebKit2/HitTestResultNodeHandle.cpp:
        * TestWebKitAPI/Tests/WebKit2/HitTestResultNodeHandle_Bundle.cpp:
        * TestWebKitAPI/Tests/WebKit2/InjectedBundleBasic.cpp:
        * TestWebKitAPI/Tests/WebKit2/InjectedBundleBasic_Bundle.cpp:
        * TestWebKitAPI/Tests/WebKit2/InjectedBundleFrameHitTest.cpp:
        * TestWebKitAPI/Tests/WebKit2/InjectedBundleFrameHitTest_Bundle.cpp:
        * TestWebKitAPI/Tests/WebKit2/InjectedBundleInitializationUserDataCallbackWins.cpp:
        * TestWebKitAPI/Tests/WebKit2/InjectedBundleInitializationUserDataCallbackWins_Bundle.cpp:
        * TestWebKitAPI/Tests/WebKit2/LayoutMilestonesWithAllContentInFrame.cpp:
        * TestWebKitAPI/Tests/WebKit2/LoadAlternateHTMLStringWithNonDirectoryURL.cpp:
        * TestWebKitAPI/Tests/WebKit2/LoadCanceledNoServerRedirectCallback.cpp:
        * TestWebKitAPI/Tests/WebKit2/LoadCanceledNoServerRedirectCallback_Bundle.cpp:
        * TestWebKitAPI/Tests/WebKit2/LoadPageOnCrash.cpp:
        * TestWebKitAPI/Tests/WebKit2/NewFirstVisuallyNonEmptyLayout.cpp:
        * TestWebKitAPI/Tests/WebKit2/NewFirstVisuallyNonEmptyLayoutFails.cpp:
        * TestWebKitAPI/Tests/WebKit2/NewFirstVisuallyNonEmptyLayoutFails_Bundle.cpp:
        * TestWebKitAPI/Tests/WebKit2/NewFirstVisuallyNonEmptyLayoutForImages.cpp:
        * TestWebKitAPI/Tests/WebKit2/NewFirstVisuallyNonEmptyLayoutForImages_Bundle.cpp:
        * TestWebKitAPI/Tests/WebKit2/NewFirstVisuallyNonEmptyLayoutFrames.cpp:
        * TestWebKitAPI/Tests/WebKit2/NewFirstVisuallyNonEmptyLayoutFrames_Bundle.cpp:
        * TestWebKitAPI/Tests/WebKit2/NewFirstVisuallyNonEmptyLayout_Bundle.cpp:
        * TestWebKitAPI/Tests/WebKit2/PageLoadBasic.cpp:
        * TestWebKitAPI/Tests/WebKit2/PageLoadDidChangeLocationWithinPageForFrame.cpp:
        * TestWebKitAPI/Tests/WebKit2/ParentFrame.cpp:
        * TestWebKitAPI/Tests/WebKit2/ParentFrame_Bundle.cpp:
        * TestWebKitAPI/Tests/WebKit2/PasteboardNotifications.mm:
        * TestWebKitAPI/Tests/WebKit2/PasteboardNotifications_Bundle.cpp:
        * TestWebKitAPI/Tests/WebKit2/PreventEmptyUserAgent.cpp:
        * TestWebKitAPI/Tests/WebKit2/PrivateBrowsingPushStateNoHistoryCallback.cpp:
        * TestWebKitAPI/Tests/WebKit2/ReloadPageAfterCrash.cpp:
        * TestWebKitAPI/Tests/WebKit2/ResizeReversePaginatedWebView.cpp:
        * TestWebKitAPI/Tests/WebKit2/ResizeWindowAfterCrash.cpp:
        * TestWebKitAPI/Tests/WebKit2/ScrollPinningBehaviors.cpp:
        * TestWebKitAPI/Tests/WebKit2/SeccompFilters.cpp:
        * TestWebKitAPI/Tests/WebKit2/ShouldGoToBackForwardListItem.cpp:
        * TestWebKitAPI/Tests/WebKit2/ShouldGoToBackForwardListItem_Bundle.cpp:
        * TestWebKitAPI/Tests/WebKit2/SpacebarScrolling.cpp:
        * TestWebKitAPI/Tests/WebKit2/WKPreferences.cpp:
        * TestWebKitAPI/Tests/WebKit2/WKStringJSString.cpp:
        * TestWebKitAPI/Tests/WebKit2/WebArchive.cpp:
        * TestWebKitAPI/Tests/WebKit2/WebArchive_Bundle.cpp:
        * TestWebKitAPI/Tests/WebKit2/WillLoad_Bundle.cpp:
        * TestWebKitAPI/Tests/WebKit2/WillSendSubmitEvent_Bundle.cpp:
        * TestWebKitAPI/Tests/WebKit2/efl/WKViewClientWebProcessCallbacks.cpp:
        * TestWebKitAPI/Tests/WebKit2/efl/WKViewClientWebProcessCallbacks_Bundle.cpp:
        * TestWebKitAPI/Tests/WebKit2/mac/EditorCommands.mm:
        * TestWebKitAPI/Tests/WebKit2/mac/GetBackingScaleFactor.mm:
        * TestWebKitAPI/Tests/WebKit2/mac/GetBackingScaleFactor_Bundle.mm:
        * TestWebKitAPI/Tests/WebKit2/mac/GetPIDAfterAbortedProcessLaunch.cpp:
        * TestWebKitAPI/Tests/WebKit2/mac/WeakObjCPtr.mm:
        * TestWebKitAPI/Tests/WebKit2/win/AltKeyGeneratesWMSysCommand.cpp:
        * TestWebKitAPI/Tests/WebKit2/win/DoNotCopyANullCFURLResponse.cpp:
        * TestWebKitAPI/Tests/WebKit2/win/ResizeViewWhileHidden.cpp:
        * TestWebKitAPI/Tests/WebKit2/win/TranslateMessageGeneratesWMChar.cpp:
        * TestWebKitAPI/Tests/WebKit2/win/WMCloseCallsUIClientClose.cpp:
        * TestWebKitAPI/Tests/WebKit2/win/WMPrint.cpp:
        * TestWebKitAPI/Tests/WebKit2Cocoa/Download.mm:
        * TestWebKitAPI/Tests/WebKit2ObjC/CustomProtocolsInvalidScheme.mm:
        * TestWebKitAPI/Tests/WebKit2ObjC/CustomProtocolsInvalidScheme_Bundle.cpp:
        * TestWebKitAPI/Tests/WebKit2ObjC/CustomProtocolsTest.mm:
        * TestWebKitAPI/Tests/WebKit2ObjC/PreventImageLoadWithAutoResizing.mm:
        * TestWebKitAPI/Tests/WebKit2ObjC/PreventImageLoadWithAutoResizing_Bundle.cpp:
        * TestWebKitAPI/Tests/WebKit2ObjC/UserContentTest.mm:
        * TestWebKitAPI/Tests/WebKit2ObjC/WKBrowsingContextGroupTest.mm:
        * TestWebKitAPI/Tests/WebKit2ObjC/WKBrowsingContextLoadDelegateTest.mm:
        * TestWebKitAPI/Tests/mac/DeviceScaleFactorOnBack.mm:
        * TestWebKitAPI/Tests/mac/PageVisibilityStateWithWindowChanges.mm:
        * TestWebKitAPI/config.h:
        * TestWebKitAPI/efl/PlatformWebView.cpp:
        * TestWebKitAPI/mac/JavaScriptTestMac.mm:
        * TestWebKitAPI/mac/PlatformUtilitiesMac.mm:
        * TestWebKitAPI/mac/PlatformWebViewMac.mm:
        * TestWebKitAPI/mac/TestBrowsingContextLoadDelegate.h:
        * TestWebKitAPI/mac/WebKitAgnosticTest.mm:
        * WebKitTestRunner/EventSenderProxy.h:
        * WebKitTestRunner/GeolocationProviderMock.cpp:
        * WebKitTestRunner/GeolocationProviderMock.h:
        * WebKitTestRunner/InjectedBundle/AccessibilityController.cpp:
        * WebKitTestRunner/InjectedBundle/EventSendingController.cpp:
        * WebKitTestRunner/InjectedBundle/EventSendingController.h:
        * WebKitTestRunner/InjectedBundle/GCController.cpp:
        * WebKitTestRunner/InjectedBundle/InjectedBundle.cpp:
        * WebKitTestRunner/InjectedBundle/InjectedBundle.h:
        * WebKitTestRunner/InjectedBundle/InjectedBundleMain.cpp:
        * WebKitTestRunner/InjectedBundle/InjectedBundlePage.cpp:
        * WebKitTestRunner/InjectedBundle/InjectedBundlePage.h:
        * WebKitTestRunner/InjectedBundle/TestRunner.cpp:
        * WebKitTestRunner/InjectedBundle/TestRunner.h:
        * WebKitTestRunner/InjectedBundle/TextInputController.cpp:
        * WebKitTestRunner/InjectedBundle/atk/AccessibilityControllerAtk.cpp:
        * WebKitTestRunner/InjectedBundle/atk/AccessibilityNotificationHandlerAtk.cpp:
        * WebKitTestRunner/InjectedBundle/atk/AccessibilityUIElementAtk.cpp:
        * WebKitTestRunner/InjectedBundle/cocoa/InjectedBundlePageCocoa.mm:
        * WebKitTestRunner/InjectedBundle/ios/AccessibilityControllerIOS.mm:
        * WebKitTestRunner/InjectedBundle/ios/EventSenderProxyIOS.mm:
        * WebKitTestRunner/InjectedBundle/mac/AccessibilityControllerMac.mm:
        * WebKitTestRunner/InjectedBundle/mac/AccessibilityNotificationHandler.mm:
        * WebKitTestRunner/InjectedBundle/mac/AccessibilityUIElementMac.mm:
        * WebKitTestRunner/PlatformWebView.h:
        * WebKitTestRunner/StringFunctions.h:
        * WebKitTestRunner/TestController.cpp:
        * WebKitTestRunner/TestController.h:
        * WebKitTestRunner/TestInvocation.cpp:
        * WebKitTestRunner/TestInvocation.h:
        * WebKitTestRunner/WebKitTestRunnerPrefix.h:
        * WebKitTestRunner/WebNotificationProvider.cpp:
        * WebKitTestRunner/WebNotificationProvider.h:
        * WebKitTestRunner/WorkQueueManager.cpp:
        * WebKitTestRunner/cairo/TestInvocationCairo.cpp:
        * WebKitTestRunner/cg/TestInvocationCG.cpp:
        * WebKitTestRunner/cocoa/CrashReporterInfo.mm:
        * WebKitTestRunner/config.h:
        * WebKitTestRunner/efl/PlatformWebViewEfl.cpp:
        * WebKitTestRunner/gtk/PlatformWebViewGtk.cpp:
        * WebKitTestRunner/ios/PlatformWebViewIOS.mm:
        * WebKitTestRunner/ios/TestControllerIOS.mm:
        * WebKitTestRunner/mac/EventSenderProxy.mm:
        * WebKitTestRunner/mac/PlatformWebViewMac.mm:
        * WebKitTestRunner/mac/TestControllerMac.mm:

2014-05-15  Gyuyoung Kim  <gyuyoung.kim@samsung.com>

        [EFL][WK2] Skip failing unit tests
        https://bugs.webkit.org/show_bug.cgi?id=132979

        Reviewed by Daniel Bates.

        * TestWebKitAPI/PlatformEfl.cmake: Skip failing unit tests for now.

2014-05-15  David Kilzer  <ddkilzer@apple.com>

        [iOS] Support TestWebKitAPI in the iOS Simulator
        <http://webkit.org/b/129535>
        <rdar://problem/16203529>

        Reviewed by Daniel Bates.

        * Scripts/run-api-tests:
        (runTest):
        (listAllTests):
        - Extract common arguments into local variable.
        - Use xcrun to find the sim tool in order to invoke
        TestWebKitAPI properly in the iOS Simulator. 

        * Scripts/webkitdirs.pm:
        (argumentsForConfiguration): Set --device or --sim as
        appropriate to fix buildTestTool() in run-api-tests.

2014-05-15  Tim Horton  <timothy_horton@apple.com>

        Fix a logging typo in copy-webkitlibraries-to-product-directory

        Reviewed by Dean Jackson.

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

2014-05-15  David Kilzer  <ddkilzer@apple.com>

        TestWebKitAPI: URLExtras.mm should be a shared test for iOS and Mac
        <http://webkit.org/b/132959>

        Reviewed by Dan Bernstein.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj: Add
        Cocoa directory to project and move URLExtras.mm into it.
        * TestWebKitAPI/Tests/Cocoa/URLExtras.mm: Renamed from Tools/TestWebKitAPI/Tests/mac/URLExtras.mm.

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

        [GTK] Compile all installed resources as GResources
        https://bugs.webkit.org/show_bug.cgi?id=131099

        Reviewed by Philippe Normand.

        * Scripts/webkitpy/port/gtk.py:
        (GtkPort.setup_environ_for_server): Removed now unneeded
        AUDIO_RESOURCES_PATH env var.

2014-05-14  Tibor Meszaros  <tmeszaros.u-szeged@partner.samsung.com>

        Remove CSS_STICKY_POSITION guards
        https://bugs.webkit.org/show_bug.cgi?id=132676

        Reviewed by Simon Fraser.

        * Scripts/webkitperl/FeatureList.pm:

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

        REGRESSION(CMAKE): [GTK] InputMethodFilter unit test is not built
        https://bugs.webkit.org/show_bug.cgi?id=132686

        Reviewed by Philippe Normand.

        Bring back InputMethodFilter test to the build and compile it into
        a single binary TestWebCore with the other WebCore tests. Also
        move it from TestWebKitAPI/gtk/ to TestWebKitAPI/Tests/WebCore/gtk/.

        * Scripts/run-gtk-tests:
        (TestRunner): Remove WebCoreGtk from the list of test directories.
        * TestWebKitAPI/PlatformGTK.cmake:
        * TestWebKitAPI/Tests/WebCore/gtk/InputMethodFilter.cpp: Renamed from Tools/TestWebKitAPI/Tests/gtk/InputMethodFilter.cpp.

2014-05-14  Zsolt Borbely  <zsborbely.u-szeged@partner.samsung.com>

        [EFL] Make XVFBDriver optional
        https://bugs.webkit.org/show_bug.cgi?id=131036

        Reviewed by Gyuyoung Kim.

        * Scripts/webkitpy/port/efl.py:
        (EflPort._driver_class):

2014-05-13  Carlos Alberto Lopez Perez  <clopez@igalia.com>

        Flakiness dashboard contains outdated list of bots on builders.jsonp
        https://bugs.webkit.org/show_bug.cgi?id=132874

        Reviewed by Darin Adler.

        * TestResultServer/static-dashboards/builders.jsonp: Regenerate this
        file by changing to the directory Tools/TestResultServer and executing
        the script generate_builders_json.py

2014-05-11  Anders Carlsson  <andersca@apple.com>

        Replace WKContextSetLocalStorageDirectory with a context configuration getter/setter
        https://bugs.webkit.org/show_bug.cgi?id=132809

        Reviewed by Dan Bernstein.

        * WebKitTestRunner/TestController.cpp:
        (WTR::TestController::initialize):
        Set the local storage directory using WKContextConfigurationSetLocalStorageDirectory.

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

        REGRESSION(CMAKE): [GTK] JavaScriptCore API tests are not built anymore
        https://bugs.webkit.org/show_bug.cgi?id=132739

        Reviewed Anders Carlsson.

        * TestWebKitAPI/CMakeLists.txt: Add missing includes required by
        the JSC unit tests.
        * TestWebKitAPI/PlatformGTK.cmake: Bring back JavaScriptCore unit tests.

2014-05-11  Anders Carlsson  <andersca@apple.com>

        Add a WKContextConfigurationRef object and make the injected bundle path part of the configuration
        https://bugs.webkit.org/show_bug.cgi?id=132806

        Reviewed by Beth Dakin.

        Migrate to WKContextConfiguration.

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

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

        REGRESSION(CMAKE): [GTK] WebKit2 C API tests are not longer built in the same binary
        https://bugs.webkit.org/show_bug.cgi?id=132685

        Reviewed by Martin Robinson.

        Use a single TestWebKit2 binary for all WebKit2 C API tests.

        * TestWebKitAPI/PlatformGTK.cmake:

2014-05-09  Benjamin Poulain  <benjamin@webkit.org>

        [iOS] Switch geolocation to an explicit authorization query model
        https://bugs.webkit.org/show_bug.cgi?id=132717

        Reviewed by Sam Weinig.

        * DumpRenderTree/mac/MockGeolocationProvider.mm:
        (-[MockGeolocationProvider initializeGeolocationForWebView:listener:]):
        (-[MockGeolocationProvider cancelWarmUpForWebView:]): Deleted.

2014-05-09  David Farler  <dfarler@apple.com>

        com.apple.iphonesimulator.startSession needs to pass "RuntimeIdentifier"
        https://bugs.webkit.org/show_bug.cgi?id=132718

        Reviewed by David Kilzer.

        The simulator may not be able to look up runtimes by SDK paths
        and instead will map SDK versions to runtimes instead. In
        com.apple.iphonesimulator.startSession notifications,
        'runtimeIdentifier' (SDK version string) is preferred over
        'sdkRoot' (SDK path) anyway. Include the 'runtimeIdentifier' key
        when creating a new DRT or WKTR simulator session.

        IPhoneSimulatorNotification.pm filters out keys for this
        notification's userInfo with a hard-coded list. There's no harm
        in including extra key-value pairs in an NSNotification userInfo
        dictionary anyway and the simulator may again change its
        userInfo schema for this notification.

        * DumpRenderTree/ios/PerlSupport/IPhoneSimulatorNotification/lib/IPhoneSimulatorNotification.pm:
        (postStartSessionNotification):
        * Scripts/old-run-webkit-tests:
        (installAndLaunchDumpToolAppUsingNotification):

2014-05-09  Anders Carlsson  <andersca@apple.com>

        Another build fix.

        * Scripts/build-webkit:
        WebKit2 should always be built for OS X and iOS.

2014-05-09  Anders Carlsson  <andersca@apple.com>

        Follow-up build fix.

        * Scripts/build-webkit:
        WebKit2 should no longer be built before WebKit.

2014-05-09  Anders Carlsson  <andersca@apple.com>

        Rename WebKit2.framework to WebKit.framework
        https://bugs.webkit.org/show_bug.cgi?id=132743
        <rdar://problem/15920046>

        Reviewed by Dan Bernstein.

        * Scripts/check-for-inappropriate-files-in-framework:
        Use PRODUCT_NAME instead of PROJECT_NAME when matching frameworks.
        Change WebKit2 to WebKit.

        * Scripts/check-for-webkit-framework-include-consistency:
        Change WebKit to WebKitLegacy.

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

        Remove GTK+ WK1 EWS from build.webkit.org/dashboard
        https://bugs.webkit.org/show_bug.cgi?id=132732

        Reviewed by Alexey Proskuryakov.

        GTK+ WK1 EWS was removed in r166427, so it shouldn't appear in the dashboard.

        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Scripts/EWS.js:
        (EWS): Remove GTK+ WK1 EWS.

2014-05-09  Eva Balazsfalvi  <evab.u-szeged@partner.samsung.com>

        Add new u-szeged contributors.

        Reviewed by Csaba Osztrogonác.

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

2014-05-09  Carlos Garcia Campos  <cgarcia@igalia.com>

        REGRESSION(CMAKE): [GTK] run-gtk-tests doesn't set the right injected bundle path
        https://bugs.webkit.org/show_bug.cgi?id=132736

        Reviewed by Philippe Normand.

        There are two problems, the path returned by common.library_build_path() is wrong when
        common.binary_build_path() has previously been called, and the test is still looking for
        the .la instead of .so

        * TestWebKitAPI/gtk/PlatformUtilitiesGtk.cpp:
        (TestWebKitAPI::Util::createInjectedBundlePath): Use .so instead
        of .la as extension of the injected bundle library.
        * gtk/common.py:
        (binary_build_path): Remove unused global variable and add a new
        one for binary_build_dir instead of sharing the same global
        variable for library_build_path and binary_build_path.

2014-05-08  Praveen R Jadhav  <praveen.j@samsung.com>

        [EFL] Enable MEDIA_STREAM for EFL port
        https://bugs.webkit.org/show_bug.cgi?id=132648

        Reviewed by Gyuyoung Kim.

        Script modified to enable MEDIA_STREAM for EFL build.

        * Scripts/webkitperl/FeatureList.pm: 

2014-05-08  David Farler  <dfarler@apple.com>

        old-run-webkit-tests: update strings for simulator devices and app name
        https://bugs.webkit.org/show_bug.cgi?id=132687

        Reviewed by Darin Adler.

        iPhone Retina (4-inch) -> iPhone 5
        iPhone Retina (4-inch 64-bit) -> iPhone 5s

        * Scripts/old-run-webkit-tests:
        (installAndLaunchDumpToolAppUsingNotification):
        (openIPhoneSimulator):
        (quitIPhoneSimulator):
        quit iOS Simulator, not iPhone Simulator.

2014-05-08  Carlos Alberto Lopez Perez  <clopez@igalia.com>

        REGRESSION(r168471): Update the builder names on the scheduler list.
        https://bugs.webkit.org/show_bug.cgi?id=132699

        Reviewed by Martin Robinson.

        On r168471 I missed to update the builder names for the GTK build
        bots on the AnyBranchScheduler type scheduler list of bots.

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

2014-05-08  Brady Eidson  <beidson@apple.com>

        "shouldKeepCurrentBackForwardListItemInList" API should pass clientInfo to the callback
        <rdar://problem/16855357> and https://bugs.webkit.org/show_bug.cgi?id=132692

        Reviewed by Tim Horton.

        * TestWebKitAPI/Tests/WebKit2/ShouldKeepCurrentBackForwardListItemInList.cpp:
        (TestWebKitAPI::shouldKeepCurrentBackForwardListItemInList):

2014-05-08  Carlos Alberto Lopez Perez  <clopez@igalia.com>

        REGRESSION(r168471): Duplicate builddirs broke the build master.
        https://bugs.webkit.org/show_bug.cgi?id=132688

        Reviewed by Carlos Garcia Campos.

        Rename the builddirs of the new GTK bots introduced on r168471 to
        be unique. Otherwise the master will break.

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

2014-05-08  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] webkitdom script assumes mkdir only fails because the directory already exists
        https://bugs.webkit.org/show_bug.cgi?id=132674

        Reviewed by Philippe Normand.

        Only ignore mkdir failure when exception is raised because the
        file already exists and it's a directory.

        * gtk/webkitdom.py:
        (write_doc_files):

2014-05-08  Carlos Alberto Lopez Perez  <clopez@igalia.com>

        [WK2][GTK] Split the 64-bit GTK buildbots in Build and Test.
        https://bugs.webkit.org/show_bug.cgi?id=131358

        Reviewed by Carlos Garcia Campos.

        Current 64-bit GTK build bots (Release and Debug) not only test
        the build, but run all tests. Split each one of the bots in
        BuildOnly and TestWebKit2.

        This will allow us to have a better overview of the status of
        the GTK port.

        Original patch from Sergio Villar Senin <svillar@igalia.com>

        * BuildSlaveSupport/build.webkit.org-config/config.json:
        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/scripts/config.js:
        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Scripts/WebKitBuildbot.js:
        (WebKitBuildbot):
        * Scripts/webkitpy/port/builders.py:
        * Scripts/webkitpy/tool/commands/rebaseline_unittest.py:
        (TestRebaselineTest.test_baseline_directory):
        * TestResultServer/static-dashboards/builders.jsonp:
        * TestResultServer/static-dashboards/flakiness_dashboard_unittests.js:
        (resetGlobals):
        * TestResultServer/static-dashboards/loader_unittests.js:

2014-05-07  Gyuyoung Kim  <gyuyoung.kim@samsung.com>

        [CoordinatedGraphics][WK2] Scale factor and scroll position is not being restored properly in a back/forward load
        https://bugs.webkit.org/show_bug.cgi?id=126022

        Reviewed by Benjamin Poulain.

        Original author : Thiago de Barros Lacerda, and finished by Gyuyoung Kim.

        Added an unit test case to check if scroll position and scale are restored properly.

        * TestWebKitAPI/PlatformEfl.cmake:
        * TestWebKitAPI/Tests/WebKit2/CoordinatedGraphics/WKViewRestoreZoomAndScrollBackForward.cpp: Added.
        (TestWebKitAPI::didFinishLoadForFrame):
        (TestWebKitAPI::didChangeContentsPosition):
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/WebKit2/CoordinatedGraphics/backforward1.html: Added.
        * TestWebKitAPI/Tests/WebKit2/CoordinatedGraphics/backforward2.html: Added.

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

        WebKit1 is flashy when compositing layers come and go
        https://bugs.webkit.org/show_bug.cgi?id=132655
        <rdar://problem/16830981&16788846>

        Reviewed by Sam Weinig.
        
        Revert the change from r166117.

        * DumpRenderTree/mac/DumpRenderTree.mm:
        (updateDisplay):

2014-05-07  Chris Fleizach  <cfleizach@apple.com>

        AX: AXSelectTextWithCriteria should support capitalize/lowercase/uppercase
        https://bugs.webkit.org/show_bug.cgi?id=132622

        Reviewed by Mario Sanchez Prada.

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

2014-05-07  Carlos Garcia Campos  <cgarcia@igalia.com>

        [SOUP] TLSErrors do not cause page load to fail when not ignored
        https://bugs.webkit.org/show_bug.cgi?id=121548

        Reviewed by Sergio Villar Senin.

        Add unit tests to check that the load fails with TLS errors in
        case of a redirection.

        * TestWebKitAPI/Tests/WebKit2Gtk/TestSSL.cpp:
        (testTLSErrorsRedirect):
        (httpsServerCallback):
        (beforeAll):

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

        [CSS Grid Layout] Remove runtime feature
        https://bugs.webkit.org/show_bug.cgi?id=132382

        Reviewed by Benjamin Poulain.

        Remove cssGridLayoutEnabled setting usage.

        * DumpRenderTree/efl/DumpRenderTreeChrome.cpp:
        (DumpRenderTreeChrome::resetDefaultsToConsistentValues):
        * DumpRenderTree/efl/TestRunnerEfl.cpp:
        (TestRunner::overridePreference):
        * DumpRenderTree/mac/DumpRenderTree.mm:
        (resetWebPreferencesToConsistentValues):

2014-05-06  David Kilzer  <ddkilzer@apple.com>

        Add Makefile targets for copying static libraries (LLVM and WKSI)
        <http://webkit.org/b/132619>

        Reviewed by Mark Rowe.

        * Scripts/copy-webkitlibraries-to-product-directory: Set a
        sensible default for product directory if not specified on
        either the command-line or in the environment (by Xcode) by
        calling productDir() in webkitdirs.pm.

2014-05-06  Brady Eidson  <beidson@apple.com>

        Add WK2 SPI to prevent the previous back/forward item from remaining in the list
        <rdar://problem/16248710> and https://bugs.webkit.org/show_bug.cgi?id=132636

        Reviewed by Sam Weinig.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:

        * TestWebKitAPI/Tests/WebKit2/ShouldKeepCurrentBackForwardListItemInList.cpp: Added.
        (TestWebKitAPI::itemURLLastComponentIsString):
        (TestWebKitAPI::didFinishLoadForFrame):
        (TestWebKitAPI::willGoToBackForwardListItem):
        (TestWebKitAPI::shouldKeepCurrentBackForwardListItemInList):
        (TestWebKitAPI::setPageLoaderClient):
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/WebKit2/simple2.html: Added.
        * TestWebKitAPI/Tests/WebKit2/simple3.html: Added.

        * WebKitTestRunner/TestController.cpp:
        (WTR::TestController::createWebViewWithOptions): Update for new client layout.

2014-05-06  Darin Adler  <darin@apple.com>

        Try to fix iOS build.

        * DumpRenderTree/mac/TestRunnerMac.mm:
        (-[APITestDelegateIPhone initWithTestRunner:utf8Data:baseURL:]):
        Updated since I changed testRunner into a pointer instead of a reference.
        Updated argument names to avoid conflict with field names.
        (-[APITestDelegateIPhone run]): Ditto.
        (-[APITestDelegateIPhone _cleanUp]): Ditto.

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

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

        Broke the build (Requested by KaL on #webkit).

        Reverted changeset:

        "[GTK][CMake] Unable to do make install"
        https://bugs.webkit.org/show_bug.cgi?id=130188
        http://trac.webkit.org/changeset/168304

2014-05-04  Darin Adler  <darin@apple.com>

        RetainPtr: Use adoptCF function instead of AdoptCF constructor argument
        https://bugs.webkit.org/show_bug.cgi?id=80222

        Reviewed by Alexey Proskuryakov.

        * DumpRenderTree/mac/TestRunnerMac.mm:
        (-[APITestDelegateIPhone initWithTestRunner:utf8Data:baseURL:]): Updated to
        do more work here so we don't use RetainPtr local variables.
        (-[APITestDelegateIPhone dealloc]): Added.
        (-[APITestDelegateIPhone run]): Added an early exit if the web view is already
        created. Updated for changes to member names and types.
        (-[APITestDelegateIPhone _cleanUp]): Added code to set webView to nil and
        updated for changes to member names and types. Changed to two word spelling.
        (-[APITestDelegateIPhone webView:didFailLoadWithError:forFrame:]): Updated
        name of _cleanUp method.
        (-[APITestDelegateIPhone webView:didFailProvisionalLoadWithError:forFrame:]):
        Ditto.
        (-[APITestDelegateIPhone webView:didFinishLoadForFrame:]): Ditto.

2014-05-05  Benjamin Poulain  <benjamin@webkit.org>

        Clean up Image Document and tweak the layout and viewport
        https://bugs.webkit.org/show_bug.cgi?id=132552

        Reviewed by Anders Carlsson.

        * DumpRenderTree/mac/DumpRenderTree.mm:
        (resetWebPreferencesToConsistentValues):
        Update the default settings to have something consistent with WebKit2.

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

        [GTK][CMake] Unable to do make install
        https://bugs.webkit.org/show_bug.cgi?id=130188

        Reviewed by Carlos Garcia Campos.

        * Scripts/webkitdirs.pm:
        (buildCMakeGeneratedProject): Always build gtkdoc-no-html for WebKitGTK+. This
        will give an early signal that a change has broken the documentation.

2014-05-05  Pratik Solanki  <psolanki@apple.com>

        Update framework locations in package-root
        https://bugs.webkit.org/show_bug.cgi?id=132571

        Reviewed by Simon Fraser.

        * Scripts/package-root:

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

        [EFL][WK2] Refactor favicon database APIs
        https://bugs.webkit.org/show_bug.cgi?id=132519

        Reviewed by Gyuyoung Kim.

        * MiniBrowser/efl/main.c: Use ewk_favicon_database_icon_get instead of ewk_view_favicon_get.
        (update_view_favicon):
        (on_icon_changed_cb):
        (window_free):
        (on_url_changed):
        (window_create):
        (on_view_favicon_changed): Deleted.

2014-05-02  Mark Rowe  <mrowe@apple.com>

        <https://webkit.org/b/132505> Make it possible to tell copy-webkitlibraries-to-product-directory which OS X version to copy for

        Reviewed by Dan Bernstein.

        * Scripts/copy-webkitlibraries-to-product-directory: Add an --osx-version argument and use the passed value
        when determining which LLVM archive to extract.

2014-05-02  Jeremy Jones  <jeremyj@apple.com>

        Add Jeremy as a committer.
        https://bugs.webkit.org/show_bug.cgi?id=132492

        Reviewed by Jer Noble.

        Add myself as a committer.

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

2014-05-02  Jeremy Jones  <jeremyj@apple.com>

        Add Jeremy as a committer.
        https://bugs.webkit.org/show_bug.cgi?id=132492

        Reviewed by Jer Noble.

        Add Jeremy Jones to the committers file.

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

2014-05-02  Brian J. Burg  <burg@cs.washington.edu>

        Hard to figure out how to run a single test with run-api-tests
        https://bugs.webkit.org/show_bug.cgi?id=116332

        Reviewed by Alexey Proskuryakov.

        * Scripts/run-api-tests: add two examples to the help message.

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

        Fix several memory leaks found by code inspection
        https://bugs.webkit.org/show_bug.cgi?id=132472

        Reviewed by Geoffrey Garen.
        
        Fix memory leaks.

        * TestWebKitAPI/Tests/mac/WillSendSubmitEvent.mm:
        (TestWebKitAPI::TEST):
        * WebKitTestRunner/InjectedBundle/InjectedBundlePage.cpp:
        (WTR::InjectedBundlePage::willSendRequestForFrame):
        * WebKitTestRunner/mac/PlatformWebViewMac.mm:
        (WTR::PlatformWebView::changeWindowScaleIfNeeded):

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

        DFGAbstractInterpreter should not claim Int52 arithmetic creates Int52s
        https://bugs.webkit.org/show_bug.cgi?id=132446

        Reviewed by Mark Hahnenberg.
        
        Test the FTL by default now that it's enabled by default.

        * Scripts/run-javascriptcore-tests:

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

        [EFL][WK1] Drop ewk_view_setting_tiled_backingstore APIs
        https://bugs.webkit.org/show_bug.cgi?id=132240

        Reviewed by Anders Carlsson.

        Removed ewk_view_setting_tiled_backingstore related code.

        * DumpRenderTree/efl/DumpRenderTreeChrome.cpp:
        (DumpRenderTreeChrome::createView):
        (shouldUseTiledBackingStore): Deleted.
        * EWebLauncher/main.c:
        (windowCreate):
        (parseUserArguments):

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

        window.testRunner.keepWebHistory() should update the UI process state
        https://bugs.webkit.org/show_bug.cgi?id=132440

        Reviewed by Dan Bernstein.

        * WebKitTestRunner/InjectedBundle/InjectedBundle.cpp:
        (WTR::InjectedBundle::postSetAddsVisitedLinks):
        * WebKitTestRunner/InjectedBundle/InjectedBundle.h:
        * WebKitTestRunner/InjectedBundle/TestRunner.cpp:
        (WTR::TestRunner::keepWebHistory):
        * WebKitTestRunner/TestInvocation.cpp:
        (WTR::TestInvocation::invoke):
        (WTR::TestInvocation::didReceiveMessageFromInjectedBundle):

2014-05-01  David Kilzer  <ddkilzer@apple.com>

        Really remove ENABLE_PLUGIN_PROXY_FOR_VIDEO
        <http://webkit.org/b/132432>

        Reviewed by Tim Horton.

        * Scripts/webkitperl/FeatureList.pm: Remove support for
        --plugin-proxy-for-video switch.

2014-04-30  Carlos Alberto Lopez Perez  <clopez@igalia.com>

        Kernel sysctl interface hw.activecpu don't exists on Linux.
        https://bugs.webkit.org/show_bug.cgi?id=132286

        Reviewed by Filip Pizlo.

        * Scripts/run-jsc-stress-tests: Redirect stderr to null when
        calling sysctl over hw.activecpu

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

        Move the legacy WebKit API into WebKitLegacy.framework and move it inside WebKit.framework
        https://bugs.webkit.org/show_bug.cgi?id=132399
        <rdar://problem/15920046>

        Reviewed by Dan Bernstein.

        * Scripts/check-for-webkit-framework-include-consistency:
        Allos WAK headers in WebKitLegacy as well as WebKit.

        * TestWebKitAPI/Tests/WebKit2Cocoa/Download.mm:
        * TestWebKitAPI/Tests/WebKit2Cocoa/Navigation.mm:
        Update header imports.

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

        [iOS WK2] Add test URL to crash reports for the UI process, clean up project
        https://bugs.webkit.org/show_bug.cgi?id=131954

        Reviewed by Darin Adler.
        
        WebKitTestRunner was adding application-specific information to crash reports
        to log the test path, but only in the web process. Fix it to also do this
        for the UI process, for both iOS and OS X.
        
        Moved InjectedBundlePageMac.mm to InjectedBundlePageCocoa.mm and compile it for
        both iOS and OS X.
        
        Factored crash reprorter-related code into CrashReporterInfo, and call it from
        a new TestController::platformWillRunTest() function on Mac and iOS.
        
        Also remove Xcode-added unit test junk from the project.

        * WebKitTestRunner/InjectedBundle/cocoa/InjectedBundlePageCocoa.mm: Copied from Tools/WebKitTestRunner/InjectedBundle/ios/InjectedBundlePageIOS.mm.
        (WTR::InjectedBundlePage::platformDidStartProvisionalLoadForFrame):
        * WebKitTestRunner/TestController.cpp:
        (WTR::TestController::runTest):
        * WebKitTestRunner/TestController.h:
        * WebKitTestRunner/TestInvocation.cpp:
        (WTR::TestInvocation::url):
        * WebKitTestRunner/TestInvocation.h:
        * WebKitTestRunner/WebKitTestRunner.xcodeproj/project.pbxproj:
        * WebKitTestRunner/WebKitTestRunnerAppTests/WebKitTestRunnerAppTests-Info.plist: Removed.
        * WebKitTestRunner/WebKitTestRunnerAppTests/WebKitTestRunnerAppTests.m: Removed.
        * WebKitTestRunner/WebKitTestRunnerAppTests/en.lproj/InfoPlist.strings: Removed.
        * WebKitTestRunner/cocoa/CrashReporterInfo.h: Renamed from Tools/WebKitTestRunner/InjectedBundle/ios/InjectedBundlePageIOS.mm.
        * WebKitTestRunner/cocoa/CrashReporterInfo.mm: Renamed from Tools/WebKitTestRunner/InjectedBundle/mac/InjectedBundlePageMac.mm.
        (WTR::testPathFromURL):
        (WTR::setCrashReportApplicationSpecificInformationToURL):
        * WebKitTestRunner/efl/TestControllerEfl.cpp:
        (WTR::TestController::platformWillRunTest):
        * WebKitTestRunner/gtk/TestControllerGtk.cpp:
        (WTR::TestController::platformWillRunTest):
        * WebKitTestRunner/ios/TestControllerIOS.mm:
        (WTR::TestController::platformWillRunTest):
        (WTR::TestController::setHidden):
        * WebKitTestRunner/mac/TestControllerMac.mm:
        (WTR::TestController::platformWillRunTest):

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

        Fix DRT assertion about mock scrollbars, which doesn't apply to iOS.

        Reviewed by Tim Horton.

        * DumpRenderTree/mac/DumpRenderTree.mm:
        (resetWebPreferencesToConsistentValues):
        (prepareConsistentTestingEnvironment):

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

        check-for-inappropriate-macros-in-external-headers should get the product name, not the project name
        https://bugs.webkit.org/show_bug.cgi?id=132397

        Reviewed by Dan Bernstein.

        * Scripts/check-for-inappropriate-macros-in-external-headers:

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

        [GTK] Make it easier to run CMake for downstreams
        https://bugs.webkit.org/show_bug.cgi?id=132370

        Reviewed by Carlos Garcia Campos.

        * Scripts/webkitdirs.pm:
        (generateBuildSystemFromCMakeProject): Pass -DDEVELOPER_MODE when building
        the GTK+ port.

2014-04-29  Stephanie Lewis  <slewis@apple.com>

        <rdar://problem/16765765> Use JSON::PP in perl scripts instead of JSON.
        
        Rubber stamped by Jessie Berlin.

        JSON.pm was removed from our tools setup.

        * Scripts/generate-coverage-data:

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

        Use LLVM as a backend for the fourth-tier DFG JIT (a.k.a. the FTL JIT)
        https://bugs.webkit.org/show_bug.cgi?id=112840

        Rubber stamped by Geoffrey Garen.

        * Scripts/build-jsc: Enable it on Mac.
        * Scripts/build-webkit: Enable it on Mac.
        * Scripts/export-llvm-build: Make it slightly easier to export the build if you've done a "make install".

2014-04-28  Sam Weinig  <sam@webkit.org>

        REGRESSION (r167751): svn-create-patch is very slow
        https://bugs.webkit.org/show_bug.cgi?id=132300

        Reviewed by Alexey Proskuryakov.

        * Scripts/svn-create-patch:
        Change default behavior of svn-create-patch to no longer run the style checker. It can still be run
        by calling `svn-create-patch --style`.

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

        Generate Eclipse project + ninja build for GTK+ if Eclipse in available in the PATH
        https://bugs.webkit.org/show_bug.cgi?id=132190

        Reviewed by Gustavo Noronha Silva.

        * Scripts/webkitdirs.pm:
        (canUseEclipse): Test if Eclipse is in the path. This is the same method used to test
            if ninja is in the path.
        (generateBuildSystemFromCMakeProject): Use the eclipse generator if possible, fallback
            to the previous ninja generator if not.

2014-04-29  Jozsef Berta  <jberta.u-szeged@partner.samsung.com>

        check-webkit-style should understand --git-index
        https://bugs.webkit.org/show_bug.cgi?id=125364

        Reviewed by Csaba Osztrogonác.

        * Scripts/webkitpy/common/checkout/scm/git.py:
        (Git.create_patch): The command now supports the --cached option.
        * Scripts/webkitpy/style/main.py:
        (CheckWebKitStyle.main): Passing the --git-index option.
        * Scripts/webkitpy/style/optparser.py:
        (CommandOptionValues.__init__): The git-index option is switched off by default.
        (CommandOptionValues.__eq__): Equality check for the new option.
        (ArgumentParser._create_option_parser):Adding the --git-index option
        (ArgumentParser.parse):
        * Scripts/webkitpy/style/optparser_unittest.py: New tests for the --git-index option
        (CommandOptionValuesTest.test_init): 
        (CommandOptionValuesTest.test_eq):

2014-04-28  Michael Saboff  <msaboff@apple.com>

        Crash in platform/mac/accessibility/table-visible-rows.html
        https://bugs.webkit.org/show_bug.cgi?id=132146

        Reviewed by Filip Pizlo.

        Instead of creating a local JSValueRef array on the stack and passing that to
        JSObjectMakeArray(), changed to create an empty JSArray and then populate the
        values using the JSObjectSetPropertyAtIndex() API.

        * DumpRenderTree/AccessibilityUIElement.cpp:
        (elementsForRangeCallback):
        (convertElementsToObjectArray):
        * DumpRenderTree/mac/TestRunnerMac.mm:
        (originsArrayToJS):
        * WebKitTestRunner/InjectedBundle/EventSendingController.cpp:
        (WTR::EventSendingController::contextClick):
        * WebKitTestRunner/InjectedBundle/TestRunner.cpp:
        (WTR::stringArrayToJS):
        * WebKitTestRunner/InjectedBundle/mac/AccessibilityUIElementMac.mm:
        (WTR::convertElementsToObjectArray):

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

        Make sure that the coverage of our tests doesn't change much if we change the thresholds now and in the future, but making
        "no-cjit" runs force the old-school threshold.

        Rubber stamped by Mark Hahnenberg.

        * Scripts/run-jsc-stress-tests:

2014-04-28  Carlos Alberto Lopez Perez  <clopez@igalia.com>

        [GTK] install-dependencies should also install ruby-json and ruby-highline
        https://bugs.webkit.org/show_bug.cgi?id=132292

        Reviewed by Philippe Normand.

        * gtk/install-dependencies: Install ruby json and highline packages.

2014-04-27  Joonghun Park  <jh718.park@samsung.com>

        [EFL] Remove indexedDB's dependency on leveldb and disable indexedDB
        https://bugs.webkit.org/show_bug.cgi?id=132176

        Reviewed by Gyuyoung Kim.

        EFL port will use sqlite to support indexedDB. So, this patch removes levelDB dependency
        and turn off indexedDB feature until the sqlite implementation is introduced.

        * Scripts/webkitperl/FeatureList.pm:

2014-04-25  James Craig  <jcraig@apple.com>

        Set prepare-Changelog flag so that it no longer runs check-webkit-style by default
        https://bugs.webkit.org/show_bug.cgi?id=132209

        Reviewed by Daniel Bates.

        Set default to --no-style to avoid additional spew from false positives in check-webkit-style.
        Run check-webkit-style before generating changelogs to avoid additional spurious errors.

        * Scripts/prepare-ChangeLog:
        (main): 

2014-04-25  Michael Saboff  <msaboff@apple.com>

        Crash in platform/mac/accessibility/table-visible-rows.html
        https://bugs.webkit.org/show_bug.cgi?id=132146

        Reviewed by Mark Lam.

        Changed to use a local JSValueRef array temporary instead of a
        std::make_unique<JSValueRef[]> when making an array of JSValues so that the temporary
        JSValues are visited during garbage collection when the stack is scanned.  Otherwise,
        the temporary values could be collected.

        * DumpRenderTree/AccessibilityUIElement.cpp:
        (convertElementsToObjectArray):
        * WebKitTestRunner/InjectedBundle/EventSendingController.cpp:
        (WTR::EventSendingController::contextClick):
        * WebKitTestRunner/InjectedBundle/mac/AccessibilityUIElementMac.mm:
        (WTR::convertElementsToObjectArray):

2014-04-24  Eduardo Lima Mitev  <elima@igalia.com>

        Unreviewed GTK gardening

        * Scripts/run-gtk-tests: Skips one flaky accesibility test in WK2API suite
        (TestRunner):

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

        prepare-ChangeLog reports as deleted methods that has not been removed.
        https://bugs.webkit.org/show_bug.cgi?id=131733

        Reviewed by Ryosuke Niwa.

        * Scripts/prepare-ChangeLog:
        (originalFile): Set merge base to origin/master by default.

2014-04-23  James Craig  <jcraig@apple.com>

        prepare-Changelog and svn-create-patch should optionally run check-webkit-style.
        https://bugs.webkit.org/show_bug.cgi?id=131115

        Reviewed by Daniel Bates.

        Added [--[no-]style] param to run check-webkit-style as part of prepare-Changelog and svn-create-patch.

        * Scripts/commit-log-editor: Added --no-style.
        * Scripts/prepare-ChangeLog: Primary patch.
        (main): Primary patch.
        (createPatchCommand): Added --no-style.
        * Scripts/svn-create-patch: Primary patch.
        * Scripts/webkit-tools-completion.sh: Added --style and --no-style.
        * Scripts/webkitpy/common/checkout/scm/svn.py: Added --no-style.
        (SVN.create_patch): Added --no-style.

2014-04-23  Anders Carlsson  <andersca@apple.com>

        Try to fix iOS build.

        * DumpRenderTree/mac/DumpRenderTree.mm:

2014-04-23  Alexey Proskuryakov  <ap@apple.com>

        Eliminate internals.setMockScrollbarsEnabled()
        https://bugs.webkit.org/show_bug.cgi?id=132085

        Reviewed by Tim Horton.

        * DumpRenderTree/mac/DumpRenderTree.mm: (resetWebPreferencesToConsistentValues):
        No need to reset the preference, there is no way it can change.

2014-04-23  James Craig  <jcraig@apple.com>

        Unreviewed. Moving myself from Contributors to Committers list.

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

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

        Mock scrollbars don't always work in DumpRenderTree
        https://bugs.webkit.org/show_bug.cgi?id=132082

        Reviewed by Alexey Proskuryakov.

        * DumpRenderTree/mac/DumpRenderTree.mm:
        (prepareConsistentTestingEnvironment):
        Set the mock scrollbar setting before creating the WebView, as this setting
        cannot be dynamically changed, so any scrollbars that are created during
        WebView initialization and are not replaced before snapshotting will end
        up being platform scrollbars instead of mock ones.
        WebKitTestRunner already sets this preference before creating WKViews,
        so we're just matching its behavior.

2014-04-23  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] ShadowRoot API was removed in r164131
        https://bugs.webkit.org/show_bug.cgi?id=132059

        Reviewed by Gustavo Noronha Silva.

        Add WebKitDOMShadowRoot to the list of deleted classes to generate
        the API docs.

        * gtk/webkitdom.py:
        (WebKitDOMDocGenerator):

2014-04-23  Lorenzo Tilve  <ltilve@igalia.com>

        [GTK] run-webkit-tests script is failing to invoke run-launcher
        https://bugs.webkit.org/show_bug.cgi?id=132051

        Reviewed by Philippe Normand.

        After the WK1 support was dropped, if run-webkit-tests is executed
        without --no-show-results parameter, the launcher is being called
        using a -2 parameter that is it causing the run-launcher to break.

        * Scripts/webkitpy/port/gtk.py:
        (GtkPort.show_results_html_file):

2014-04-22  Tim Horton  <timothy_horton@apple.com>

        DumpRenderTree generates black snapshots on some platforms
        https://bugs.webkit.org/show_bug.cgi?id=132029
        <rdar://problem/16679363>

        Reviewed by Simon Fraser.

        * DumpRenderTree/mac/PixelDumpSupportMac.mm:
        (createBitmapContextFromWebView):
        DRT checks with the WebView to determine whether it can use the window's
        backing store directly or (because of compositing) needs to take a WindowServer
        snapshot. However, on some platforms and in some situations, the window can
        be layer backed without the WebView necessarily currently being composited.
        We should check with the window in addition to the WebView before going
        ahead and using its backing store.

2014-04-22  Tim Horton  <timothy_horton@apple.com>

        DumpRenderTree generates white snapshots on some platforms
        https://bugs.webkit.org/show_bug.cgi?id=132026
        <rdar://problem/16679363>

        Reviewed by Simon Fraser.

        * DumpRenderTree/mac/Configurations/DumpRenderTree.xcconfig:
        Link DRT against QuartzCore.

        * DumpRenderTree/mac/PixelDumpSupportMac.mm:
        (createBitmapContextFromWebView):
        Force CoreAnimation to synchronously update layers in a more explicit
        way that doesn't depend on AppKit behavior. This is very similar to what
        WebKitTestRunner does (indirectly) during its force repaint.

2014-04-22  Brent Fulgham  <bfulgham@apple.com>

        [Win] Support Python 2.7 in Cygwin
        https://bugs.webkit.org/show_bug.cgi?id=132023

        Reviewed by Michael Saboff.

        * Scripts/webkitdirs.pm:
        (checkInstalledTools): Remove check for Python 2.7, since
        it now works properly.

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

        Switch the LLVMForJSC target to using the LLVM in /usr/local rather than /usr/local/LLVMForJavaScriptCore on iOS
        https://bugs.webkit.org/show_bug.cgi?id=130867
        <rdar://problem/16432456> 

        Reviewed by Mark Hahnenberg.

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

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

        [GTK] Fails to build documentation when output is redirected
        https://bugs.webkit.org/show_bug.cgi?id=131178

        Reviewed by Martin Robinson.

        * gtk/generate-gtkdoc: set the output for stdout and stderr to UTF-8
        explicitly to avoid encoding issues when they are redirected.

2014-04-22  ChangSeok Oh  <changseok.oh@collabora.com>

        [GTK] YCM choose a newer compile_commands.json in between Release or Debug
        https://bugs.webkit.org/show_bug.cgi?id=131911

        Reviewed by Martin Robinson.

        common.get_build_path returns release path even though Debug configuration
        is newer than Release. So YouCompleteMe is used to refer old build setup inadvertently.

        * gtk/ycm_extra_conf.py:
        (get_build_path): Compare modified time of Release and Debug. And return a recent modified path.
        (FlagsForFile):

2014-04-21  Brent Fulgham  <bfulgham@apple.com>

        Unreviewed build fix.

        * DumpRenderTree/mac/EventSendingController.mm:
        (-[EventSendingController mouseScrollByX:andY:withWheel:andMomentumPhases:]):
        Correct a typo that prevented tests from working properly.

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

        [GTK] Should have the ability to output composited contents during layout testing
        https://bugs.webkit.org/show_bug.cgi?id=131864

        Reviewed by Philippe Normand.

        * WebKitTestRunner/cairo/TestInvocationCairo.cpp:
        (WTR::TestInvocation::dumpPixelsAndCompareWithExpected): Add a path that paints the widget contents
        to an image surface. We run the main loop a bit to match the implementation from WebKit1 and EFL.
        * WebKitTestRunner/gtk/PlatformWebViewGtk.cpp:
        (WTR::PlatformWebView::windowSnapshotImage): Use the new UI-process path on GTK+.

2014-04-21  Sam Weinig  <sam@webkit.org>

        Attempt to fix the tests.

        * TestWebKitAPI/Tests/WebKit2Cocoa/Navigation.mm:
        (-[DidFailProvisionalNavigationDelegate webView:decidePolicyForNavigationAction:decisionHandler:]):
        Add policy handler to override the new default of denying loads that NSURLConnection cannot handle.

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

        Unreviewed test gardening, make no-eager runs run everything except eager (as opposed to
        being the same as a "quick run", which is meant for genuinely slow tests).

        * Scripts/run-jsc-stress-tests:

2014-04-21  Darin Adler  <darin@apple.com>

        Add HashSet::takeAny
        https://bugs.webkit.org/show_bug.cgi?id=131928

        Reviewed by Benjamin Poulain.

        * TestWebKitAPI/Tests/WTF/HashSet.cpp: Added a test for takeAny.

2014-04-20  Dan Bernstein  <mitz@apple.com>

        Fixed a test timing out after r167572.

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

2014-04-20  Commit Queue  <commit-queue@webkit.org>

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

        broke GTK Debug bot (Requested by philn on #webkit).

        Reverted changeset:

        "[GTK] Add llvmpipe (Mesa) to the JHBuild moduleset and force
        it when running layout tests"
        https://bugs.webkit.org/show_bug.cgi?id=131472
        http://trac.webkit.org/changeset/167510

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

        [GTK] Add llvmpipe (Mesa) to the JHBuild moduleset and force it when running layout tests
        https://bugs.webkit.org/show_bug.cgi?id=131472

        Reviewed by Philippe Normand.

        * Scripts/webkitpy/port/gtk.py:
        (GtkPort.setup_environ_for_server): Use the LLVMPIPE_LIBGL_PATH to set the LD_LIBRARY_PATH
        when running WebKitTestRunner with run-webkit-tests.
        * gtk/jhbuild.modules: Add Mesa to the modulelist so that the llvmpipe libGL is build, but not
        installed.
        * gtk/jhbuildrc: Set the LLVMPIPE_LIBGL_PATH environment variable so that the test driver knows
        how to properly set the LD_LIBRARY_PATH variable. We do this because it is much easier to
        calculate the path in the jhbuildrc than in the test driver code. This simplifies things a great
        deal.

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

        DownloadDecideDestinationCrash API test uses an incorrect value for path
        https://bugs.webkit.org/show_bug.cgi?id=131845
        <rdar://problem/15925560>

        Reviewed by Enrica Casucci.

        * TestWebKitAPI/Tests/WebKit2/DownloadDecideDestinationCrash.cpp:
        (TestWebKitAPI::decideDestinationWithSuggestedFilename):

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

        [Mac] AttributedStringTest API tests fail with async text input
        https://bugs.webkit.org/show_bug.cgi?id=131833

        Reviewed by Enrica Casucci.

        Don't run sync NSTextInputClient tests where we don't implement these calls.

        * TestWebKitAPI/Tests/mac/AttributedString.mm:
        (TestWebKitAPI::AttributedStringTest_CustomFont::didLoadURL):
        (TestWebKitAPI::AttributedStringTest_CustomFont::runSyncTest):
        (TestWebKitAPI::AttributedStringTest_Strikethrough::didLoadURL):
        (TestWebKitAPI::AttributedStringTest_Strikethrough::runSyncTest):
        (TestWebKitAPI::AttributedStringTest_CustomFont::runTest): Deleted.
        (TestWebKitAPI::AttributedStringTest_Strikethrough::runTest): Deleted.

2014-04-18  Philippe Normand  <pnormand@igalia.com>

        Remove NETWORK_INFO support
        https://bugs.webkit.org/show_bug.cgi?id=131841

        Reviewed by Gyuyoung Kim.

        * Scripts/webkitperl/FeatureList.pm:

2014-04-17  ChangSeok Oh  <changseok.oh@collabora.com>

        [GTK] YouCompleteMe doesn't work for cmake build system.
        https://bugs.webkit.org/show_bug.cgi?id=131591

        Reviewed by Martin Robinson.

        Add cmake build system support for YouCompleteMe. It should work regardless of
        using make or ninja. In addition, autotools related code is removed since it's
        not used anymore in WebKit.

        * Scripts/webkitdirs.pm:
        (generateBuildSystemFromCMakeProject):
        * gtk/ycm_extra_conf.py:
        (transform_relative_paths_to_absolute_paths):
        (FlagsForFile):

2014-04-17  Anders Carlsson  <andersca@apple.com>

        Fix build.

        * TestWebKitAPI/Tests/WebKit2Cocoa/Download.mm:
        (-[DownloadNavigationDelegate webView:decidePolicyForNavigationAction:decisionHandler:]):
        (-[ConvertResponseToDownloadNavigationDelegate webView:decidePolicyForNavigationResponse:decisionHandler:]):

2014-04-17  Anders Carlsson  <andersca@apple.com>

        Remove unused API enums
        https://bugs.webkit.org/show_bug.cgi?id=131836

        Reviewed by Tim Horton.

        * MiniBrowser/mac/WK2BrowserWindowController.m:
        (-[WK2BrowserWindowController webView:decidePolicyForNavigationResponse:decisionHandler:]):

2014-04-16  Brent Fulgham  <bfulgham@apple.com>

        [Win] A few final cleanups to the DataObject classes.
        https://bugs.webkit.org/show_bug.cgi?id=131784

        Reviewed by Anders Carlsson.

        * DumpRenderTree/win/DRTDataObject.cpp:
        (DRTDataObject::clearData): Use 'last()' method.
        * DumpRenderTree/win/UIDelegate.cpp:
        (DRTUndoStack::pop): Use 'takeLast()' method.

2014-04-17  Andres Gomez  <agomez@igalia.com>

        [Win] cygwin to keep installing curl 7.33.0-1 and subversion 1.7.14-1
        https://bugs.webkit.org/show_bug.cgi?id=131365

        Reviewed by Brent Fulgham.

        The cygwin installer is now downloading the wanted versions for
        the local installation given to the setup wizard.

        * CygwinDownloader/cygwin-downloader.py:
        * CygwinDownloader/cygwin-downloader.zip:

2014-04-17  Adrian Perez de Castro  <aperez@igalia.com>

        [GTK] Make run-webkit-tests always use WKTR
        https://bugs.webkit.org/show_bug.cgi?id=131737

        Reviewed by Darin Adler.

        Now that the GTK+ port only has support for WebKit2, instruct
        run-webkit-tests to always use WKTR. This avoids needing to pass
        flag "-2" every time.

        * Scripts/webkitpy/layout_tests/run_webkit_tests.py: 
        (_set_up_derived_options): Always set webkit_test_runner when
        the platform is GTK+.

2014-04-17  Brendan Long  <b.long@cablelabs.com>

        [Gtk] Install ninja-build in Tools/gtk/install-dependencies
        https://bugs.webkit.org/show_bug.cgi?id=131760

        Reviewed by Philippe Normand.

        * gtk/install-dependencies: Install ninja-build when it's available.

2014-04-16  peavo@outlook.com  <peavo@outlook.com>

        [Win] run-javascriptcore-tests fails to run.
        https://bugs.webkit.org/show_bug.cgi?id=131761

        Reviewed by Brent Fulgham.

        * Scripts/build-jsc: For now, don't try to build bmalloc on Windows.

2014-04-16  Andres Gomez  <agomez@igalia.com>

        [Win] Pass default parameters to cygwin setup wizard
        https://bugs.webkit.org/show_bug.cgi?id=131361

        Reviewed by Brent Fulgham.

        Added some parameters to the cygwin setup wizard so the user
        doesn't really have to do any interaction.

        * CygwinDownloader/cygwin-downloader.py:
        * CygwinDownloader/cygwin-downloader.zip:

2014-04-15  Brent Fulgham  <bfulgham@apple.com>

        [Win] Eliminate use of deleteAllValues in Windows Files
        https://bugs.webkit.org/show_bug.cgi?id=131631

        Reviewed by Darin Adler.

        Switch to std::unique_ptr for memory lifetime. Get rid of
        deleteAllValues now that it is no longer needed. Use ranged
        for loops where possible.

        * DumpRenderTree/win/DRTDataObject.cpp:
        (WCEnumFormatEtc::WCEnumFormatEtc):
        (DRTDataObject::~DRTDataObject):
        (DRTDataObject::GetData):
        (DRTDataObject::QueryGetData):
        (DRTDataObject::SetData):
        (DRTDataObject::clearData):
        * DumpRenderTree/win/DRTDataObject.h:
        * DumpRenderTree/win/UIDelegate.cpp:
        (DRTUndoObject::DRTUndoObject):
        (DRTUndoObject::~DRTUndoObject):
        (DRTUndoStack::~DRTUndoStack):
        (DRTUndoStack::clear):
        (DRTUndoStack::pop):
        (DRTUndoManager::DRTUndoManager):
        (DRTUndoManager::redo):
        (DRTUndoManager::undo):
        (UIDelegate::UIDelegate):
        (UIDelegate::resetUndoManager):
        * DumpRenderTree/win/UIDelegate.h:

2014-04-16  Carlos Alberto Lopez Perez  <clopez@igalia.com>

        [GTK] Unreviewed GTK gardening.

        Update list of skipped unit tests:

          Skip test: WebKit2Gtk/TestWebKitWebView:/webkit2/WebKitWebView/page-visibility

          Unskip tests: WebKit2/TestWebKit2:WebKit2.ResizeReversePaginatedWebView
          and WebKit2/TestWebKit2:WebKit2.ScrollPinningBehaviors

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

2014-04-16  Tim Horton  <timothy_horton@apple.com>

        check-webkit-style doesn't check code style in .mm or .m files
        https://bugs.webkit.org/show_bug.cgi?id=131708

        Reviewed by Darin Adler.

        * Scripts/webkitpy/style/checker.py:
        * Scripts/webkitpy/style/checker_unittest.py:
        (CheckerDispatcherDispatchTest.test_cpp_paths):
        (CheckerDispatcherDispatchTest.test_text_paths):
        Check .mm and .m files as C++.

        * Scripts/webkitpy/style/checkers/cpp.py:
        (check_spacing):
        Add an override for our ordinary "missing spaces around =" for @synthesize,
        which should look like "@synthesize propertyName=_varName;"

        Add an override for "missing space before {" for blocks' "^{".

        Don't follow the "extra space before [" rule for Objective-C, because
        it breaks this rule in a multitude of ways because of method calls.

        (check_braces):
        Don't complain about { not being on the end of the previous line if
        the previous line starts with "- (" or "+ (", which would indicate a
        Objective-C method definition.

2014-04-16  Darin Adler  <darin@apple.com>

        Make Vector::takeLast work with move-only types (and optimize for types where move is faster)
        https://bugs.webkit.org/show_bug.cgi?id=131735

        Reviewed by Alexey Proskuryakov.

        * TestWebKitAPI/Tests/WTF/Vector.cpp: Added a test for Vector::takeLast with move only types.
        Fixed invocations of EXPECT macros so the expected value is on the left, and the test result
        is on the right. This can be confusing since our JavaScript test framework does it the opposite
        way, but gtest works better this way.

2014-04-15  Hyowon Kim  <hw1008.kim@samsung.com>

        [EFL] Fix problems with the pixel dump.
        https://bugs.webkit.org/show_bug.cgi?id=131265

        Reviewed by Gyuyoung Kim.

        Painting and compositing paths of WebKit-EFL were totally modified from r166768.
        However pixel dump codes still call deprecated functions like ewk_view_paint(),
        which causes that nothing is drawn.

        This patch adds new member functions to AcceleratedCompositingContext to support pixel dump.
        One of new functions is AcceleratedCompositingContext::extractImageData(),
        which replaces deprecated function calls. Besides the extractImageData() is invoked by
        ewk_view_screenshot_contents_get() in order to take the visible content displayed on the EFL webview.

        * DumpRenderTree/efl/PixelDumpSupportEfl.cpp:
        (createBitmapContextFromWebView): Add to call DumpRenderTreeSupportEfl::forcePaint().

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

        Update LLVM export scrpt to handle the build directory being different from the
        source directory.

        Rubber stamped by Geoffrey Garen.

        * Scripts/export-llvm-build:

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

        Update the hyperlink to waterfall views of perf bots on build.webkit.org
        https://bugs.webkit.org/show_bug.cgi?id=131695

        Reviewed by Antti Koivisto.

        Updated.

        * BuildSlaveSupport/build.webkit.org-config/templates/root.html:

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

        [GTK] Reduce the binary size by compressing the text based web inspector resources
        https://bugs.webkit.org/show_bug.cgi?id=121545

        Reviewed by Gustavo Noronha Silva.

        Compress text based files when compiling inspector resources. It
        reduces the binary size in 3MB.

        * gtk/generate-inspector-gresource-manifest.py:
        (find_all_files_in_directory):
        (is_compressible):

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

        Remove Gtk WebKit1 tester.

        Gtk WebKit1 port no longer exists, and dashboard was trying to load its tester
        results over and over as fast as it could.

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

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

        Wrong link for webkitpy tests results in dashboard popover
        https://bugs.webkit.org/show_bug.cgi?id=131664

        Reviewed by Timothy Hatcher.

        * BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Scripts/BuildbotTesterQueueView.js:
        (BuildbotTesterQueueView.prototype._presentPopoverForMultipleFailureKinds):
        Use a correct link.

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

        Update webkitpy regression test result that started to fail after http://trac.webkit.org/r167243

        I'm not sure whether the changes are desirable, but am not suspicious enough to roll out.

        * Scripts/webkitpy/common/checkout/checkout_unittest.py:
        (CommitMessageForThisCommitTest):

2014-04-14  Jozsef Berta  <jberta.u-szeged@partner.samsung.com>

        Fix commit-log-editor bug revealed by r165447
        https://bugs.webkit.org/show_bug.cgi?id=130676

        Reviewed by Csaba Osztrogonác.

        * Scripts/commit-log-editor:
        (createCommitMessage): Omitting empty Source/JavaScriptCore:... blocks.
        Add \n before the first block too, because the longest common prefix now ends with only one newline.
        (removeLongestCommonPrefixEndingInNewline): The longest common prefix ends with only one newline,
        now the last block of the common prefix isn't duplicated below. Changing the function name accordingly.

2014-04-13  Darin Adler  <darin@apple.com>

        userVisibleString should not try to "encode" host names
        https://bugs.webkit.org/show_bug.cgi?id=131587
        rdar://problem/14686849

        Reviewed by Alexey Proskuryakov.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj: Added URLExtras.mm.

        * TestWebKitAPI/Tests/mac/URLExtras.mm: Added. A few tests for WebCoreNSURLExtras.
        Coverage is tiny at this point; we could add a lot more cases!

2014-04-13  Jaehun Lim  <ljaehun.lim@samsung.com>

        Use #include instead of #import
        https://bugs.webkit.org/show_bug.cgi?id=131604

        Reviewed by Darin Adler.

        Fix "warning: #import is a deprecated GCC extension [-Wdeprecated]".

        * TestWebKitAPI/Tests/WTF/StringView.cpp:

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

        Make slow-stress tests run faster by running fewer VM variants.

        Rubber stamped by Geoffrey Garen.

        * Scripts/run-javascriptcore-tests:
        * Scripts/run-jsc-stress-tests:

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

        [CMake] Add missing WTF unit tests
        https://bugs.webkit.org/show_bug.cgi?id=131459

        Reviewed by Martin Robinson.

        * TestWebKitAPI/CMakeLists.txt: Add a few missing source files
        that should be compiled into the TestWTF binary.

2014-04-10  Brendan Long  <b.long@cablelabs.com>

        [Gtk] run-launcher doesn't work by default
        https://bugs.webkit.org/show_bug.cgi?id=131494

        Reviewed by Philippe Normand.

        * Scripts/run-launcher: Always use MiniBrowser for WebKitGTK.
        * Scripts/webkitdirs.pm:
        (launcherName): Same.
        * Scripts/webkitpy/style/checker.py: Remove reference to GtkLauncher.
        * gtk/common.py:
        (get_build_path.is_valid_build_directory): Same.
        * gtk/manifest.txt: Same.

2014-04-09  Commit Queue  <commit-queue@webkit.org>

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

        Caused 300+ failures on Mavericks WK1 tester (Requested by ap
        on #webkit).

        Reverted changeset:

        "Remove "System Font" from whitelisted DRT fonts and char
        width calculations"
        https://bugs.webkit.org/show_bug.cgi?id=131411
        http://trac.webkit.org/changeset/167046

2014-04-09  Myles C. Maxfield  <mmaxfield@apple.com>

        Remove "System Font" from whitelisted DRT fonts and char width calculations
        https://bugs.webkit.org/show_bug.cgi?id=131411

        Reviewed by Tim Horton.

        Covered by existing tests.

        * DumpRenderTree/mac/DumpRenderTree.mm:
        (allowedFontFamilySet):

2014-04-09  Myles C. Maxfield  <mmaxfield@apple.com>

        systemHiddenFontFamilySet in DRT is unnecessary
        https://bugs.webkit.org/show_bug.cgi?id=131414

        Reviewed by Tim Horton.

        It doesn't seem to affect test results on my machine.

        * DumpRenderTree/mac/DumpRenderTree.mm:
        (drt_NSFontManager_availableFonts):
        (systemHiddenFontFamilySet): Deleted.

2014-04-09  Brent Fulgham  <bfulgham@apple.com>

        [Win] Unreviewed test fix: Don't double-release BSTR.

        * DumpRenderTree/win/DumpRenderTree.cpp:
        (dump): Remove unneeded call to SysFreeString now that we are
        using _bstr_t for this variable.

2014-04-09  Brent Fulgham  <bfulgham@apple.com>

        [Win] Various DumpRenderTree Fixes.
        https://bugs.webkit.org/show_bug.cgi?id=131446.

        Reviewed by Tim Horton.

        * DumpRenderTree/win/AccessibilityUIElementWin.cpp:
        (AccessibilityUIElement::title): Switch to _bstr_t. Use JSStringCreateWithBSTR.
        (AccessibilityUIElement::description): Ditto.
        (AccessibilityUIElement::helpText): Ditto.
        (AccessibilityUIElement::intValue): Ditto.
        (AccessibilityUIElement::isPressActionSupported): Ditto.
        (AccessibilityUIElement::accessibilityValue): Ditto.
        * DumpRenderTree/win/DRTDesktopNotificationPresenter.cpp:
        (DRTDesktopNotificationPresenter::QueryInterface): Get rid of uneeded STDMETHODCALLTYPE declaration.
        (DRTDesktopNotificationPresenter::AddRef): Ditto.
        (DRTDesktopNotificationPresenter::Release): Ditto.
        (DRTDesktopNotificationPresenter::showDesktopNotification): Switch to _bstr_t. Use JSStringCreateWithBSTR.
        (DRTDesktopNotificationPresenter::cancelDesktopNotification): Ditto.
        (DRTDesktopNotificationPresenter::notificationDestroyed): Ditto.
        (DRTDesktopNotificationPresenter::checkNotificationPermission): Ditto.
        (DRTDesktopNotificationPresenter::requestNotificationPermission): Ditto.
        * DumpRenderTree/win/DRTDesktopNotificationPresenter.h:
        * DumpRenderTree/win/DumpRenderTree.cpp:
        (dumpFrameScrollPosition): Ditto.
        (dumpFramesAsText): Ditto.
        (compareHistoryItems): Ditto.
        (dumpHistoryItem): Ditto.
        (dump): Ditto.
        (resetDefaultsToConsistentValues): Ditto.
        (resetWebViewToConsistentStateBeforeTesting): Ditto.
        (runTest): Ditto.
        (createWebViewAndOffscreenWindow): Ditto.
        * DumpRenderTree/win/EditingDelegate.cpp:
        (EditingDelegate::QueryInterface): Get rid of uneeded STDMETHODCALLTYPE declaration.
        (EditingDelegate::AddRef): Ditto.
        (EditingDelegate::Release): Ditto.
        (dumpPath): Switch to _bstr_t. Use JSStringCreateWithBSTR
        (EditingDelegate::shouldBeginEditingInDOMRange): Get rid of uneeded STDMETHODCALLTYPE declaration.
        (EditingDelegate::shouldEndEditingInDOMRange): Ditto.
        (EditingDelegate::shouldInsertNode): Ditto.
        (EditingDelegate::shouldInsertText): Ditto.
        (EditingDelegate::shouldDeleteDOMRange): Ditto.
        (EditingDelegate::shouldChangeSelectedDOMRange): Ditto.
        (EditingDelegate::shouldApplyStyle): Ditto.
        (EditingDelegate::shouldChangeTypingStyle): Ditto.
        (EditingDelegate::doPlatformCommand): Ditto.
        (EditingDelegate::webViewDidBeginEditing): Switch to _bstr_t. Use JSStringCreateWithBSTR.
        (EditingDelegate::webViewDidChange): Ditto.
        (EditingDelegate::webViewDidEndEditing): Ditto.
        (EditingDelegate::webViewDidChangeTypingStyle): Ditto.
        (EditingDelegate::webViewDidChangeSelection): Ditto.
        (EditingDelegate::checkSpellingOfString): Ditto.
        * DumpRenderTree/win/FrameLoadDelegate.cpp:
        (descriptionSuitableForTestResult): Switch to _bstr_t. Use JSStringCreateWithBSTR.
        (FrameLoadDelegate::FrameLoadDelegate): Ditto.
        (FrameLoadDelegate::QueryInterface): Get rid of uneeded STDMETHODCALLTYPE declaration.
        (FrameLoadDelegate::AddRef): Ditto.
        (FrameLoadDelegate::Release): Ditto.
        (FrameLoadDelegate::didStartProvisionalLoadForFrame): Switch to _bstr_t. Use JSStringCreateWithBSTR.
        (FrameLoadDelegate::didReceiveServerRedirectForProvisionalLoadForFrame): Ditto.
        (FrameLoadDelegate::didFailProvisionalLoadWithError): Ditto.
        (FrameLoadDelegate::didCommitLoadForFrame): Ditto.
        (FrameLoadDelegate::didReceiveTitle): Ditto.
        (FrameLoadDelegate::didChangeIcons): Ditto.
        (delegatesWithDelayedWork): Ditto.
        (FrameLoadDelegate::didFinishLoadForFrame): Ditto.
        (FrameLoadDelegate::didFailLoadWithError): Ditto.
        (FrameLoadDelegate::willPerformClientRedirectToURL): Ditto.
        (FrameLoadDelegate::didCancelClientRedirectForFrame): Ditto.
        (FrameLoadDelegate::willCloseFrame): Ditto.
        (FrameLoadDelegate::didFinishDocumentLoadForFrame): Ditto.
        (FrameLoadDelegate::didHandleOnloadEventsForFrame): Ditto.
        (FrameLoadDelegate::didFirstVisuallyNonEmptyLayoutInFrame): Ditto.
        (FrameLoadDelegate::didDisplayInsecureContent): Ditto.
        (FrameLoadDelegate::didRunInsecureContent): Ditto.
        * DumpRenderTree/win/FrameLoadDelegate.h:
        * DumpRenderTree/win/HistoryDelegate.cpp:
        (HistoryDelegate::didNavigateWithNavigationData): Switch to _bstr_t. Use JSStringCreateWithBSTR.
        (HistoryDelegate::updateHistoryTitle): Ditto.
        (HistoryDelegate::populateVisitedLinksForWebView): Ditto.
        * DumpRenderTree/win/PolicyDelegate.cpp:
        (dumpPath):
        (PolicyDelegate::QueryInterface): Get rid of uneeded STDMETHODCALLTYPE declaration.
        (PolicyDelegate::AddRef): Ditto.
        (PolicyDelegate::Release): Ditto.
        (PolicyDelegate::decidePolicyForNavigationAction): Switch to _bstr_t. Use JSStringCreateWithBSTR.
        (PolicyDelegate::unableToImplementPolicyWithError): Ditto.
        * DumpRenderTree/win/ResourceLoadDelegate.cpp:
        (ResourceLoadDelegate::descriptionSuitableForTestResult): Switch to _bstr_t. Use JSStringCreateWithBSTR.
        (ResourceLoadDelegate::QueryInterface): Get rid of uneeded STDMETHODCALLTYPE declaration.
        (ResourceLoadDelegate::AddRef): Ditto.
        (ResourceLoadDelegate::Release): Ditto.
        (ResourceLoadDelegate::identifierForInitialRequest): Switch to _bstr_t. Use JSStringCreateWithBSTR.
        (ResourceLoadDelegate::removeIdentifierForRequest): Ditto.
        (ResourceLoadDelegate::willSendRequest): Ditto.
        (ResourceLoadDelegate::didReceiveAuthenticationChallenge): Ditto.
        (ResourceLoadDelegate::didReceiveResponse): Ditto.
        (ResourceLoadDelegate::didFinishLoadingFromDataSource): Ditto.
        (ResourceLoadDelegate::didFailLoadingWithError): Ditto.
        * DumpRenderTree/win/TestRunnerWin.cpp: Ditto.
        (TestRunner::queueLoad): Switch to _bstr_t. Use JSStringCreateWithBSTR.
        (TestRunner::setUserStyleSheetLocation): Ditto.
        (TestRunner::execCommand): Ditto.
        (TestRunner::overridePreference): Ditto.
        (TestRunner::evaluateScriptInIsolatedWorld): Ditto.
        * DumpRenderTree/win/TextInputControllerWin.cpp: Ditto.
        (TextInputController::setMarkedText): Switch to _bstr_t. Use JSStringCreateWithBSTR.
        (TextInputController::insertText): Ditto.
        * DumpRenderTree/win/UIDelegate.cpp:
        (UIDelegate::QueryInterface): Get rid of uneeded STDMETHODCALLTYPE declaration.
        (UIDelegate::AddRef): Ditto.
        (UIDelegate::Release): Ditto.
        (UIDelegate::hasCustomMenuImplementation): Switch to _bstr_t. Use JSStringCreateWithBSTR.
        (UIDelegate::trackCustomPopupMenu): Ditto.
        (UIDelegate::registerUndoWithTarget): Ditto.
        (UIDelegate::removeAllActionsWithTarget): Ditto.
        (UIDelegate::setActionTitle): Ditto.
        (UIDelegate::undo): Ditto.
        (UIDelegate::redo): Ditto.
        (UIDelegate::canUndo): Ditto.
        (UIDelegate::canRedo): Ditto.
        (UIDelegate::printFrame): Ditto.
        (UIDelegate::ftpDirectoryTemplatePath): Ditto.
        (UIDelegate::webViewHeaderHeight): Ditto.
        (UIDelegate::webViewFooterHeight): Ditto.
        (UIDelegate::drawHeaderInRect): Ditto.
        (UIDelegate::drawFooterInRect): Ditto.
        (UIDelegate::webViewPrintingMarginRect): Ditto.
        (UIDelegate::canRunModal): Ditto.
        (UIDelegate::createModalDialog): Ditto.
        (UIDelegate::runModal): Ditto.
        (UIDelegate::isMenuBarVisible): Ditto.
        (UIDelegate::setMenuBarVisible): Ditto.
        (UIDelegate::runDatabaseSizeLimitPrompt): Ditto.
        (UIDelegate::paintCustomScrollbar): Ditto.
        (UIDelegate::paintCustomScrollCorner): Ditto.
        (UIDelegate::setFrame): Ditto.
        (UIDelegate::webViewFrame): Ditto.
        (UIDelegate::runJavaScriptAlertPanelWithMessage): Ditto.
        (UIDelegate::runJavaScriptConfirmPanelWithMessage): Ditto.
        (UIDelegate::runJavaScriptTextInputPanelWithPrompt): Ditto.
        (UIDelegate::runBeforeUnloadConfirmPanelWithMessage): Ditto.
        (UIDelegate::webViewAddMessageToConsole): Ditto.
        (UIDelegate::doDragDrop): Ditto.
        (UIDelegate::webViewGetDlgCode): Ditto.
        (UIDelegate::createWebViewWithRequest): Ditto.
        (UIDelegate::webViewClose): Ditto.
        (UIDelegate::webViewFocus): Ditto.
        (UIDelegate::webViewUnfocus): Ditto.
        (UIDelegate::webViewPainted): Ditto.
        (UIDelegate::exceededDatabaseQuota): Ditto.
        (UIDelegate::embeddedViewWithArguments): Ditto.
        (UIDelegate::webViewClosing): Ditto.
        (UIDelegate::webViewSetCursor): Ditto.
        (UIDelegate::webViewDidInvalidate): Ditto.
        (UIDelegate::setStatusText): Ditto.
        (UIDelegate::desktopNotificationsDelegate): Ditto.
        (UIDelegate::drawBackground): Ditto.
        (UIDelegate::decidePolicyForGeolocationRequest): Ditto.
        (UIDelegate::didPressMissingPluginButton): Ditto.
        * DumpRenderTree/win/WorkQueueItemWin.cpp: Ditto.
        (LoadItem::invoke):  Switch to _bstr_t. Use JSStringCreateWithBSTR.
        (LoadHTMLStringItem::invoke): Ditto.
        (ScriptItem::invoke): Ditto.

2014-04-09  Gergo Balogh  <gbalogh.u-szeged@partner.samsung.com>

        Stylechecker: False positive on inline asm code.
        https://bugs.webkit.org/show_bug.cgi?id=130570

        Reviewed by Csaba Osztrogonác.

        Disable stylechecking in asm blocks.

        * Scripts/webkitpy/style/checkers/cpp.py:
        (process_line):
        (_InlineASMState):
        (_InlineASMState.__init__):
        (_InlineASMState.process_line):
        (_InlineASMState.isInside):
        (_process_lines):
        * Scripts/webkitpy/style/checkers/cpp_unittest.py:
        (WebKitStyleTest.test_member_initialization_list):

2014-04-09  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] Move WebKit1 unit tests resources used by WebKit2 unit tests to WebKit2 resources dir
        https://bugs.webkit.org/show_bug.cgi?id=131029

        Reviewed by Philippe Normand.

        Add blank.ico and test.pdf to resources dir of WebKit2Gtk unit
        tests and remove the getWebKit1TestResoucesDir() method.

        * TestWebKitAPI/Tests/WebKit2Gtk/TestDownloads.cpp:
        (testDownloadLocalFile): Use Test::getResourcesDir().
        (testDownloadLocalFileError): Ditto.
        (serverCallback): Ditto.
        * TestWebKitAPI/Tests/WebKit2Gtk/TestResources.cpp:
        (serverCallback): Ditto.
        * TestWebKitAPI/Tests/WebKit2Gtk/TestSSL.cpp:
        (httpServerCallback): Ditto.
        * TestWebKitAPI/Tests/WebKit2Gtk/TestWebKitFaviconDatabase.cpp:
        (serverCallback): Ditto.
        * TestWebKitAPI/Tests/WebKit2Gtk/resources/blank.ico: Added.
        * TestWebKitAPI/Tests/WebKit2Gtk/resources/test.pdf: Added.
        * TestWebKitAPI/gtk/WebKit2Gtk/TestMain.h:
        (Test::getWebKit1TestResoucesDir): Deleted.

2014-04-09  Alexey Proskuryakov  <ap@apple.com>

        [WK2] HTTP authentication regression tests fail
        https://bugs.webkit.org/show_bug.cgi?id=81627
        <rdar://problem/11079296>

        Reviewed by Anders Carlsson.

        * WebKitTestRunner/TestController.h:
        * WebKitTestRunner/TestController.cpp:
        (WTR::TestController::createWebViewWithOptions): Added canAuthenticateAgainstProtectionSpaceInFrame
        to pageLoaderClient structure.
        (WTR::TestController::canAuthenticateAgainstProtectionSpaceInFrame): Return true
        for password based authentication (we do get server trust challenges on some tests,
        which WKTR can't handle).
        When this client call is not implemented or returns false, didReceiveAuthenticationChallengeInFrame
        calls won't be made, at least on CFNetwork based platforms.
        (WTR::TestController::didReceiveAuthenticationChallengeInFrame): Changed the output
        to omit <unknown>. The resource is always unknown with WK2, and it doesn't really
        make sense to associate auth requests with individual resources - there can be
        multiple resources loading at once from the same protection space, so WebKit1 API
        that had a resource identifier was inherently racy.

2014-04-09  Ryuan Choi  <ryuan.choi@samsung.com>

        [EFL] Change font path for DumpRenderTree and WebKitTestRunner
        https://bugs.webkit.org/show_bug.cgi?id=131427

        Reviewed by Gyuyoung Kim.

        Since r166973, font path was changed.

        * DumpRenderTree/PlatformEfl.cmake:
        * WebKitTestRunner/PlatformEfl.cmake:

2014-04-08  Geoffrey Garen  <ggaren@apple.com>

        Fix the build-jsc build
        https://bugs.webkit.org/show_bug.cgi?id=131410

        Reviewed by Michael Saboff.

        * Scripts/build-jsc: Make sure to build bmalloc before WTF, since
        WTF depends on it.

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

        [GTK] Remove WebKit1 unit tests
        https://bugs.webkit.org/show_bug.cgi?id=131359

        Reviewed by Anders Carlsson.

        Remove all WebKit1 GTK+ unit tests, in preparation for removing the WebKit1 port
        entirely. We also remove the list of skipped WebKi1 tests from run-gtk-tests, as
        they were inadvertently left in http://trac.webkit.org/changeset/166504.

        * CMakeLists.txt: No longer load the WebKit1 unit test CMakeLists.txt file.
        * Scripts/run-gtk-tests: Remove skipped WebKit1 unit tests.
        * TestWebKitAPI/Tests/WebKitGtk/CMakeLists.txt: Removed.
        * TestWebKitAPI/Tests/WebKitGtk/resources/blank.ico: Removed.
        * TestWebKitAPI/Tests/WebKitGtk/resources/test.html: Removed.
        * TestWebKitAPI/Tests/WebKitGtk/resources/test.ogg: Removed.
        * TestWebKitAPI/Tests/WebKitGtk/resources/test.pdf: Removed.
        * TestWebKitAPI/Tests/WebKitGtk/resources/test.txt: Removed.
        * TestWebKitAPI/Tests/WebKitGtk/test_utils.c: Removed.
        * TestWebKitAPI/Tests/WebKitGtk/test_utils.h: Removed.
        * TestWebKitAPI/Tests/WebKitGtk/testapplicationcache.c: Removed.
        * TestWebKitAPI/Tests/WebKitGtk/testatk.c: Removed.
        * TestWebKitAPI/Tests/WebKitGtk/testatkroles.c: Removed.
        * TestWebKitAPI/Tests/WebKitGtk/testcontextmenu.c: Removed.
        * TestWebKitAPI/Tests/WebKitGtk/testcopyandpaste.c: Removed.
        * TestWebKitAPI/Tests/WebKitGtk/testdomdocument.c: Removed.
        * TestWebKitAPI/Tests/WebKitGtk/testdomdomwindow.c: Removed.
        * TestWebKitAPI/Tests/WebKitGtk/testdomnode.c: Removed.
        * TestWebKitAPI/Tests/WebKitGtk/testdownload.c: Removed.
        * TestWebKitAPI/Tests/WebKitGtk/testfavicondatabase.c: Removed.
        * TestWebKitAPI/Tests/WebKitGtk/testglobals.c: Removed.
        * TestWebKitAPI/Tests/WebKitGtk/testhittestresult.c: Removed.
        * TestWebKitAPI/Tests/WebKitGtk/testhttpbackend.c: Removed.
        * TestWebKitAPI/Tests/WebKitGtk/testkeyevents.c: Removed.
        * TestWebKitAPI/Tests/WebKitGtk/testloading.c: Removed.
        * TestWebKitAPI/Tests/WebKitGtk/testmimehandling.c: Removed.
        * TestWebKitAPI/Tests/WebKitGtk/testnetworkrequest.c: Removed.
        * TestWebKitAPI/Tests/WebKitGtk/testnetworkresponse.c: Removed.
        * TestWebKitAPI/Tests/WebKitGtk/testwebbackforwardlist.c: Removed.
        * TestWebKitAPI/Tests/WebKitGtk/testwebdatasource.c: Removed.
        * TestWebKitAPI/Tests/WebKitGtk/testwebframe.c: Removed.
        * TestWebKitAPI/Tests/WebKitGtk/testwebhistoryitem.c: Removed.
        * TestWebKitAPI/Tests/WebKitGtk/testwebinspector.c: Removed.
        * TestWebKitAPI/Tests/WebKitGtk/testwebplugindatabase.c: Removed.
        * TestWebKitAPI/Tests/WebKitGtk/testwebresource.c: Removed.
        * TestWebKitAPI/Tests/WebKitGtk/testwebsettings.c: Removed.
        * TestWebKitAPI/Tests/WebKitGtk/testwebview.c: Removed.
        * TestWebKitAPI/Tests/WebKitGtk/testwindow.c: Removed.

2014-04-08  Brent Fulgham  <bfulgham@apple.com>

        Unreviewed gardening (Take 2): Prevent users from attempting
        to build with known invalid cURL. 

        * Scripts/webkitdirs.pm:
        (checkInstalledTools): Check for 7.34.0 (the broken version), not
        7.33.0 (the known good version).

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

        [GTK] Remove DumpRenderTree and GtkLauncher
        https://bugs.webkit.org/show_bug.cgi?id=131373

        Reviewed by Andreas Kling.

        Remove the GTK+ port of DumpRenderTree and GtkLauncher. These tools are
        no longer necessary now that WebKit1 GTK+ will be removed.

        * CMakeLists.txt:
        * DumpRenderTree/PlatformGTK.cmake: Removed.
        * DumpRenderTree/gtk/AccessibilityControllerGtk.cpp: Removed.
        * DumpRenderTree/gtk/DumpRenderTree.cpp: Removed.
        * DumpRenderTree/gtk/DumpRenderTreeGtk.h: Removed.
        * DumpRenderTree/gtk/EditingCallbacks.cpp: Removed.
        * DumpRenderTree/gtk/EditingCallbacks.h: Removed.
        * DumpRenderTree/gtk/EventSender.cpp: Removed.
        * DumpRenderTree/gtk/EventSender.h: Removed.
        * DumpRenderTree/gtk/GCControllerGtk.cpp: Removed.
        * DumpRenderTree/gtk/PixelDumpSupportGtk.cpp: Removed.
        * DumpRenderTree/gtk/SelfScrollingWebKitWebView.cpp: Removed.
        * DumpRenderTree/gtk/SelfScrollingWebKitWebView.h: Removed.
        * DumpRenderTree/gtk/TestRunnerGtk.cpp: Removed.
        * DumpRenderTree/gtk/TextInputController.cpp: Removed.
        * DumpRenderTree/gtk/TextInputController.h: Removed.
        * DumpRenderTree/gtk/WorkQueueItemGtk.cpp: Removed.
        * GtkLauncher/CMakeLists.txt: Removed.
        * GtkLauncher/LauncherInspectorWindow.c: Removed.
        * GtkLauncher/LauncherInspectorWindow.h: Removed.
        * GtkLauncher/main.c: Removed.
        * GtkLauncher/simple.svg: Removed.
        * GtkLauncher/text.html: Removed.
        * WebKitTestRunner/PlatformGTK.cmake:
        * WebKitTestRunner/gtk/fonts/AHEM____.TTF: Renamed from Tools/DumpRenderTree/gtk/fonts/AHEM____.TTF.
        * WebKitTestRunner/gtk/fonts/FontWithNoValidEncoding.fon: Renamed from Tools/DumpRenderTree/gtk/fonts/FontWithNoValidEncoding.fon.
        * WebKitTestRunner/gtk/fonts/fonts.conf: Renamed from Tools/DumpRenderTree/gtk/fonts/fonts.conf.

2014-04-08  Mark Rowe  <mrowe@apple.com>

        XPC services launched by Safari have wrong DYLD_FRAMEWORK_PATH set when launched via run-safari / debug-safari
        <https://webkit.org/b/131388> / <rdar://problem/16291687>

        Reviewed by Alexey Proskuryakov.

        * Scripts/webkitdirs.pm:
        (runMacWebKitApp): Set __XPC_DYLD_FRAMEWORK_PATH to the absolute path to the built products directory.
        (execMacWebKitAppForDebugging): Ditto.

2014-04-08  Geoffrey Garen  <ggaren@apple.com>

        Build bmalloc on iOS too
        https://bugs.webkit.org/show_bug.cgi?id=131381

        Reviewed by Andreas Kling.

        * Scripts/build-webkit:

2014-04-08  Brent Fulgham  <bfulgham@apple.com>

        Unreviewed gardening: Prevent users from attempting
        to build with known invalid cURL.

        * Scripts/webkitdirs.pm:
        (checkInstalledTools): Block build attempts with bad
        Cygwin tool set.

2014-04-07  Geoffrey Garen  <ggaren@apple.com>

        Build bmalloc on Mac
        https://bugs.webkit.org/show_bug.cgi?id=131333

        Reviewed by Mark Rowe.

        * Scripts/build-webkit: Add the bmalloc target if we're on Mac.
        (Note: Just testing Mac is not good enough because in this
        script 'Mac' means 'Mac or iOS'.)

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

        Move slow JSRegress tests out of the way so that they don't show up in run-jsc-benchmarks runs and also skip tests that are extremely long-running
        https://bugs.webkit.org/show_bug.cgi?id=130951

        Reviewed by Geoffrey Garen.

        * Scripts/run-javascriptcore-tests:

2014-04-06  Darin Adler  <darin@apple.com>

        Rework CSS calc logic, fixing some reference count mistakes in Length
        https://bugs.webkit.org/show_bug.cgi?id=131280

        Reviewed by Andreas Kling.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj: Added CalculationValue.cpp.
        * TestWebKitAPI/Tests/WebCore/CalculationValue.cpp: Added.

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

        Enable WEB_REPLAY for PLATFORM(MAC)
        https://bugs.webkit.org/show_bug.cgi?id=130700

        Reviewed by Timothy Hatcher.

        * Scripts/webkitperl/FeatureList.pm: Set the default for WEB_REPLAY for OS X engineering builds.

2014-04-05  Raphael Kubo da Costa  <raphael.kubo.da.costa@intel.com>

        [CMake] Include X11's include dirs in TestNetscapePlugin
        https://bugs.webkit.org/show_bug.cgi?id=131270

        Reviewed by Martin Robinson.

        * DumpRenderTree/TestNetscapePlugIn/CMakeLists.txt: Include X11_INCLUDE_DIR since
        TestNetscapePlugin includes WebCore code that includes X headers.

2014-04-05  David Kilzer  <ddkilzer@apple.com>

        REGRESSION (r166529): Fix build after renaming TileCache to LegacyTileCache
        <http://webkit.org/b/130986>

        * Scripts/check-for-inappropriate-objc-class-names: Add 'Legacy'
        prefix to TileCache class names in exception list.

2014-04-04  Carlos Alberto Lopez Perez  <clopez@igalia.com>

        [GTK] kill-old-processes should kill dbus-daemon processes
        https://bugs.webkit.org/show_bug.cgi?id=127352

        Reviewed by Martin Robinson.

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

2014-04-04  Andres Gomez  <agomez@igalia.com>

        [Win] Update obsolete packages in cygwin
        https://bugs.webkit.org/show_bug.cgi?id=126264

        Reviewed by Brent Fulgham.

        Removed "apache" and "minires" as the first has been replaced by
        "lighttpd" and the second is now integrated into
        "cygwin". Replaced the transitional and now obsolete "gcc" package
        with "gcc-g++" and ensure that "python" stays at version "2.6.8"
        since the newer version available is "2.7.3" which breaks the
        build due to some funniness with environment variable handling.

        * CygwinDownloader/cygwin-downloader.py:
        * CygwinDownloader/cygwin-downloader.zip:

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

        check-webkit-style: Improve warnings on Objective-C @property syntax
        https://bugs.webkit.org/show_bug.cgi?id=131200

        Reviewed by Dan Bernstein.

        * Scripts/webkitpy/style/checkers/cpp.py:
        (check_spacing):
        (CppChecker):
        * Scripts/webkitpy/style/checkers/cpp_unittest.py:
        (CppStyleTest.test_spacing_in_objective_c_properties):

2014-04-03  Santosh Mahto  <santoshbit2007@gmail.com>

        Unreviewed. Moving my name to commiter section

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

2014-04-03  Santosh Mahto  <santoshbit2007@gmail.com>

        Unreviewed. Add myself as a committer.

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

2014-04-03  Andrzej Badowski  <a.badowski@samsung.com>

        [EFL][WK2] Replacing zoom functionality of MiniBrowser from scale_set to page_zoom_set.
        https://bugs.webkit.org/show_bug.cgi?id=130391

        Reviewed by Gyuyoung Kim.

        Change the implementation of the zoom functionality from ewk_view_scale_set
        to ewk_view_page_zoom_set.

        * MiniBrowser/efl/main.c:

2014-04-03  Manuel Rego Casasnovas  <rego@igalia.com>

        [webkitpy] perf profiler does not understand --call-graph argument
        https://bugs.webkit.org/show_bug.cgi?id=131132

        Reviewed by Ryosuke Niwa.

        New versions of perf profiler have changed the argument from --call-graph to -g.

        * Scripts/webkitpy/common/system/profiler.py:
        (Perf.wrapper_arguments): Use -g instead of --call-graph.
        * Scripts/webkitpy/port/driver_unittest.py:
        (DriverTest.test_profiler_as_wrapper): Update test accordingly.

2014-04-03  Zsolt Borbely  <zsborbely.u-szeged@partner.samsung.com>

        Add EFL WK2 performance bot to build.webkit.org
        https://bugs.webkit.org/show_bug.cgi?id=131034

        Fix after r166707, use "Perf" instead of "perf" for consistency.

        Reviewed by Csaba Osztrogonác.

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

2014-04-03  Zsolt Borbely  <zsborbely.u-szeged@partner.samsung.com>

        Add EFL WK2 performance bot to build.webkit.org
        https://bugs.webkit.org/show_bug.cgi?id=131034

        Reviewed by Csaba Osztrogonác.

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

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

        [EFL][WK1] Use Evas_Touch_Point_State instead of Ewk_Touch_Point_Type
        https://bugs.webkit.org/show_bug.cgi?id=131151

        Reviewed by Gyuyoung Kim.

        * DumpRenderTree/efl/EventSender.cpp: Replace Ewk_Touch_Point_Type to Evas_Touch_Point_State.
        (TouchEventInfo::TouchEventInfo):
        (sendTouchEvent):
        (addTouchPointCallback):
        (updateTouchPointCallback):
        (cancelTouchPointCallback):
        (releaseTouchPointCallback):

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

        filter-build-webkit: Ignore xcodebuild warnings when compiling with newer builds of clang
        <http://webkit.org/b/131045>

        Reviewed by Daniel Bates.

        * Scripts/filter-build-webkit:
        (shouldIgnoreLine): Ignore DVTAssertions related to new builds
        of clang, plus debug data for all DVTAssertions.

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

        Load Media Controls js/css from bundle
        https://bugs.webkit.org/show_bug.cgi?id=131086

        Reviewed by Eric Carlson.

        We're now putting CSS files into the bundle, so remove the test for them.

        * Scripts/check-for-inappropriate-files-in-framework:

2014-04-02  Martin Hock  <mhock@apple.com>

        Unify private browsing with sessions.
        https://bugs.webkit.org/show_bug.cgi?id=130099

        Reviewed by Alexey Proskuryakov.

        Add an API test for ephemeral sessions similar to PrivateBrowsingPushStateNoHistoryCallback.
        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WebKit2/EphemeralSessionPushStateNoHistoryCallback.cpp:
        (TestWebKitAPI::didNavigateWithNavigationData):
        (TestWebKitAPI::didSameDocumentNavigationForFrame):
        (TestWebKitAPI::TEST):

        * TestWebKitAPI/Tests/WebKit2/PrivateBrowsingPushStateNoHistoryCallback.cpp: Also test to make sure private browsing can be disabled.
        (TestWebKitAPI::didNavigateWithoutNavigationData):
        (TestWebKitAPI::didNavigateWithNavigationData):
        (TestWebKitAPI::didSameDocumentNavigationForFrame):
        (TestWebKitAPI::TEST):

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

        REGRESSION(r165704): [GTK] Inspector resources not correctly generated
        https://bugs.webkit.org/show_bug.cgi?id=130343

        Reviewed by Gustavo Noronha Silva.

        * gtk/generate-inspector-gresource-manifest.py: Instead of hard-coding the file list, accept a list
        of directories on the command line and look for all appropriate files in those directories for the
        GResource archive. Also make archive paths relative to those directories.
        (find_all_files_in_directory): This helper looks for all the appropriate files in a given directory.
        (find_all_files_in_directory.select_file): Whether or not to add the file to the archive.

2014-04-02  Eva Balazsfalvi  <evab.u-szeged@partner.samsung.com>

        [webkitpy] Avoid multiple "Preparing rollout for bug" log messages
        https://bugs.webkit.org/show_bug.cgi?id=131106

        Reviewed by Csaba Osztrogonác.

        * Scripts/webkitpy/tool/commands/download.py:
        (AbstractRolloutPrepCommand._prepare_state):
        * Scripts/webkitpy/tool/commands/download_unittest.py:
        (test_prepare_rollout):
        (test_create_rollout):
        (test_create_rollout_resolved):
        (test_rollout):

2014-04-02  Krzysztof Wolanski  <k.wolanski@samsung.com>

        [EFL] Add option to use separate web process for new window in MiniBrowser
        https://bugs.webkit.org/show_bug.cgi?id=130190

        Reviewed by Gyuyoung Kim.

        New created window (CTRL + n) will be open in separated web process.
        This option is enabled by adding a flag (S/separate-process) with launching
        MiniBrowser.

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

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

        [GTK] Move NEWS file to a new location
        https://bugs.webkit.org/show_bug.cgi?id=130901

        Reviewed by Brent Fulgham.

        * gtk/manifest.txt: Update the NEWS file path.

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

        Fix build.

        * MiniBrowser/mac/WK2BrowserWindowController.m:
        (-[WK2BrowserWindowController awakeFromNib]):
        (-[WK2BrowserWindowController dealloc]):
        (-[WK2BrowserWindowController observeValueForKeyPath:ofObject:change:context:]):

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

        Unreviewed test gardening.

        * Scripts/webkitpy/port/base_unittest.py:
        (PortTest.test_build_path): Handle the Debug case so we don't get webkitpy-test failures on our test bots.

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

        [CSS Exclusions] Remove exclusions parsing support
        https://bugs.webkit.org/show_bug.cgi?id=131046

        Reviewed by David Hyatt.

        * Scripts/webkitperl/FeatureList.pm:

2014-04-01  Manuel Rego Casasnovas  <rego@igalia.com>

        [GTK] Remove last reference to GTK+ WK1 EWS
        https://bugs.webkit.org/show_bug.cgi?id=131058

        Reviewed by Martin Robinson.

        In r166427 WK1 GTK+ bots and EWS where removed, but this file was missing.

        * QueueStatusServer/config/queues.py: Remove reference to GTK+ WK1 EWS.

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

        Add a 32bit JSC builder/tester.
        https://bugs.webkit.org/show_bug.cgi?id=131054
        
        Reviewed by Michael Saboff.

        * BuildSlaveSupport/build.webkit.org-config/config.json:
        * BuildSlaveSupport/build.webkit.org-config/master.cfg:
        (Compile32bitJSC):
        (Run32bitJSCTests):
        (Run32bitJSCTests.countFailures):
        (BuildAndTest32bitJSCFactory):
        (BuildAndTest32bitJSCFactory.__init__):

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

        [GTK] No longer build WebKit1 gtkdoc
        https://bugs.webkit.org/show_bug.cgi?id=130970

        Reviewed by Anders Carlsson.

        * gtk/common.py:
        (gtk_version_of_pkg_config_file): Deleted.
        * gtk/generate-gtkdoc:
        (get_gtkdoc_module_paths): We no longer need to worry about GTK+ 2, since it
        was only applicable for WebKit1.
        (get_generator_for_config): No longer look for the WebKit1 configuration file.

2014-04-01  Mario Sanchez Prada  <mario.prada@samsung.com>

        [GTK] Running minibrowser with url crashes in debug build
        https://bugs.webkit.org/show_bug.cgi?id=130492

        Reviewed by Martin Robinson.

        Update "uri-scheme" test not to use invalid URIs in it, so we
        don't get a mistmatch when comparing the original URI stored in
        the test class with the one returned by the WebKitWebView.

        * TestWebKitAPI/Tests/WebKit2Gtk/TestWebKitWebContext.cpp:
        (testWebContextURIScheme): Update the test.

2014-04-01  Mihai Tica  <mitica@adobe.com>

        Unreviewed: Add myself as a commiter to the contributors list.

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

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

        [EFL][WK2] Extract the control of page background out of color_set
        https://bugs.webkit.org/show_bug.cgi?id=127539

        Reviewed by Gyuyoung Kim.

        Added an option(C) to change background color.

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

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

        Unreviewed build fix on the EFL port with latest EFL libraries since r166149

        * ImageDiff/PlatformEfl.cmake: Added ECORE_IMF_INCLUDE_DIRS to include dirs

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

        Unreviewed test correction after r166530.

        * DumpRenderTree/mac/DumpRenderTree.mm:
        (setDefaultsToConsistentValuesForTesting): No need to change preference for all tests. We set the proper
        fine-grained setting for swipe tests. This prevents existing tests from breaking.

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

        Remove the trigger for webkit1 tests on the gtk-linux-64-release bot
        https://bugs.webkit.org/show_bug.cgi?id=130987

        r166427 removed the WebKit1 GTK+ bots, so we don't longer need to
        trigger the webkit1 bot tests on the gtk-linux-64-release bot.

        Reviewed by Martin Robinson.

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

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

        Remove WEB_ANIMATIONS
        https://bugs.webkit.org/show_bug.cgi?id=130989

        Reviewed by Simon Fraser.

        Remove this feature flag until we plan to implement.

        * Scripts/webkitperl/FeatureList.pm:

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

        Reduced Latched Scroll Test Flakiness
        https://bugs.webkit.org/show_bug.cgi?id=130983

        Reviewed by Darin Adler.

        * DumpRenderTree/mac/DumpRenderTree.mm:
        (setDefaultsToConsistentValuesForTesting): Test user should have 'high resolution' scrolling.
        * DumpRenderTree/mac/EventSendingController.mm:
        (-[EventSendingController mouseScrollByX:andY:withWheel:andMomentumPhases:]): Generate mouse wheel events
        with high resolution flags turned on.
        * WebKitTestRunner/mac/EventSenderProxy.mm:
        (WTR::EventSenderProxy::mouseScrollByWithWheelAndMomentumPhases): Ditto.

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

        run-webkit-tests should have a --no-timeout option
        https://bugs.webkit.org/show_bug.cgi?id=128286

        Reviewed by Joseph Pecoraro.

        * Scripts/webkitpy/layout_tests/controllers/layout_test_runner.py:
        (Worker._run_test): Renaming _run_test_with_timeout()
        (Worker._run_test_with_or_without_timeout): Renaming _run_test_with_timeout(), because tests can now run without timeout.
        (Worker._run_test_in_another_thread): Passing the --no-timeout option to the driver
        (Worker._run_test_in_this_thread):
        (Worker._run_test_with_timeout): Deleted.
        * Scripts/webkitpy/layout_tests/run_webkit_tests.py:
        (parse_args): Added the --no-timeout option

2014-03-31  Samuel White  <samuel_white@apple.com>

        AX: Need ability to get line range for text marker.
        https://bugs.webkit.org/show_bug.cgi?id=130906

        Reviewed by Chris Fleizach.

        Added a new function in DRT and TestRunner to test that AXLineTextMarkerRangeForTextMarker works as expected.

        * DumpRenderTree/AccessibilityUIElement.cpp:
        (lineTextMarkerRangeForTextMarkerCallback):
        (AccessibilityUIElement::lineTextMarkerRangeForTextMarker):
        (AccessibilityUIElement::getJSClass):
        * DumpRenderTree/AccessibilityUIElement.h:
        * DumpRenderTree/mac/AccessibilityUIElementMac.mm:
        (AccessibilityUIElement::lineTextMarkerRangeForTextMarker):
        * WebKitTestRunner/InjectedBundle/AccessibilityUIElement.cpp:
        (WTR::AccessibilityUIElement::lineTextMarkerRangeForTextMarker):
        * WebKitTestRunner/InjectedBundle/AccessibilityUIElement.h:
        * WebKitTestRunner/InjectedBundle/Bindings/AccessibilityUIElement.idl:
        * WebKitTestRunner/InjectedBundle/atk/AccessibilityUIElementAtk.cpp:
        (WTR::AccessibilityUIElement::lineTextMarkerRangeForTextMarker):
        * WebKitTestRunner/InjectedBundle/ios/AccessibilityUIElementIOS.mm:
        (WTR::AccessibilityUIElement::lineTextMarkerRangeForTextMarker):
        * WebKitTestRunner/InjectedBundle/mac/AccessibilityUIElementMac.mm:
        (WTR::AccessibilityUIElement::lineTextMarkerRangeForTextMarker):

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

        More validation for FTL inline caches
        https://bugs.webkit.org/show_bug.cgi?id=130948

        Reviewed by Geoffrey Garen.

        * Scripts/run-jsc-stress-tests:

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

        [GTK] Do not run WebKit1 unit tests by default
        https://bugs.webkit.org/show_bug.cgi?id=130968

        Reviewed by Martin Robinson.

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

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

        [GTK] Remove scripts code only applicable to autotools
        https://bugs.webkit.org/show_bug.cgi?id=130841

        Reviewed by Anders Carlsson.

        * BuildSlaveSupport/build.webkit.org-config/wkbuild.py:
        (_should_file_trigger_build): Update file list to reflect GTK+ CMake port.
        * Scripts/webkitpy/common/config/watchlist: Remove the GTK+ build watchlist.
        * Scripts/webkitpy/style/checker.py: The GNUmakefile doesn't exist any longer.
        * gtk/find-make-dist-errors: Removed.
        * gtk/generate-feature-defines-files: Removed.
        * gtk/manifest.txt: No longer need to consider autotools files.

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

        Fix two failing layout tests on Mountain Lion after r166466.

        * TestWebKitAPI/Tests/WebKit2Cocoa/Download.mm:
        (-[DownloadDelegate _downloadDidStart:]):

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

        [Cocoa] Add an originatingWebView property to _WKDownload
        https://bugs.webkit.org/show_bug.cgi?id=130945

        Reviewed by Anders Carlsson.

        * TestWebKitAPI/Tests/WebKit2Cocoa/Download.mm:
        (-[DownloadDelegate _downloadDidStart:]):
        (-[OriginatingWebViewDownloadDelegate initWithWebView:]):
        (-[OriginatingWebViewDownloadDelegate _downloadDidStart:]):
        (TEST):

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

        Land the stackmap register liveness glue with the uses of the liveness disabled
        https://bugs.webkit.org/show_bug.cgi?id=130924

        Reviewed by Oliver Hunt.

        * Scripts/run-jsc-stress-tests:

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

        Update WebKit1.StringTruncator for Mountain Lion.

        * TestWebKitAPI/Tests/mac/StringTruncator.mm: Looks like one subtest was failing
        due to different font metrics on 10.8.

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

        Fix recently-introduced off-by-one error in centerTruncateToBuffer
        https://bugs.webkit.org/show_bug.cgi?id=130889

        Reviewed by Alexey Proskuryakov.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj: Added StringTruncator.mm.
        * TestWebKitAPI/Tests/mac/StringTruncator.mm: Added. One test for each of the
        WebStringTruncator methods; should be good for a start. These are dependent on the
        metrics of Helvetica 12, but I am hoping that will be consistent across OS X machines.

2014-03-28  Martin Hock  <mhock@apple.com>

        Unreviewed. Add myself as a committer.

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

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

        Remove WebKit1 GTK+ bots
        https://bugs.webkit.org/show_bug.cgi?id=130904

        Reviewed by Anders Carlsson.

        * BuildSlaveSupport/build.webkit.org-config/config.json: Remove references to GTK+ WebKit1 test bot and ensure
        all bots are testing WebKit2 only.
        * Scripts/webkitpy/common/config/ews.json: Remove references to GTK+ WK1 EWS.
        * Scripts/webkitpy/common/config/ports.py: Remove references to GTK+ WK1 bots.
        * Scripts/webkitpy/common/config/ports_unittest.py: Ditto.
        * Scripts/webkitpy/port/builders.py: Ditto.
        * Scripts/webkitpy/tool/commands/rebaseline_unittest.py: Ditto.
        * TestResultServer/static-dashboards/builders.jsonp: Ditto.

2014-03-28  Timothy Hatcher  <timothy@apple.com>

        Remove Brian Burg's apple.com email address.

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

2014-03-28  David Kilzer  <ddkilzer@apple.com>

        bisect-builds should print Trac 'changeset' URL if only one build is detected
        <http://webkit.org/b/130903>

        Reviewed by Dan Bernstein.

        * Scripts/bisect-builds:
        (printTracLink): Print a direct link to the Trac 'changeset'
        URL if there is only one revision in the range.

2014-03-28  Gyuyoung Kim  <gyuyoung.kim@samsung.com>

        [EFL] Bump glib version from 2.36 to 2.38 
        https://bugs.webkit.org/show_bug.cgi?id=130886

        Reviewed by Csaba Osztrogonác.

        There is a build break on EFL port when using glib 2.36 ver. To fix it,
        we need to bump glib version up to 2.38 as gtk port.

        * efl/jhbuild.modules:

2014-03-27  Mikhail Pozdnyakov  <mikhail.pozdnyakov@intel.com>

        <https://webkit.org/b/42704> WebKitTestRunner needs to print history delegate information

        Provide an implementation of WKContextHistoryClient that logs when called for tests in
        the globalhistory directory.

        Reviewed by Sam Weinig.

        * WebKitTestRunner/TestController.cpp:
        (WTR::TestController::TestController):
        (WTR::TestController::initialize): Set the history client.
        (WTR::TestController::resetStateToConsistentValues): Disable logging of history client callbacks.
        (WTR::TestController::didNavigateWithNavigationData): Log information about the navigation. Some portions
        of the output are hard-coded to match WebKit1's results for now since they're fixed in our existing tests
        and we don't yet have API to access the data in question.
        (WTR::TestController::didPerformClientRedirect):
        (WTR::TestController::didPerformServerRedirect):
        (WTR::TestController::didUpdateHistoryTitle):
        * WebKitTestRunner/TestController.h:
        (WTR::TestController::setShouldLogHistoryClientCallbacks):
        * WebKitTestRunner/TestInvocation.cpp:
        (WTR::shouldLogHistoryClientCallbacks): Log history client callbacks for tests in a globalhistory directory.
        (WTR::TestInvocation::invoke):

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

        Revert http://trac.webkit.org/changeset/166386 because it broke builds.

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

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

        Switch the LLVMForJSC target to using the LLVM in /usr/local rather than /usr/local/LLVMForJavaScriptCore on iOS
        https://bugs.webkit.org/show_bug.cgi?id=130867
        <rdar://problem/16432456> 

        Reviewed by Mark Hahnenberg.

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

2014-03-26  Andy Estes  <aestes@apple.com>

        [Cocoa] Expose DownloadClient::didFail() and DownloadClient::didCancel()
        https://bugs.webkit.org/show_bug.cgi?id=130805

        Reviewed by Dan Bernstein.

        * TestWebKitAPI/Tests/WebKit2Cocoa/Download.mm:
        (-[DownloadDelegate _download:didReceiveResponse:]):
        (-[DownloadDelegate _downloadDidFinish:]):
        (runTest):
        (TEST):
        (-[FailingDownloadDelegate _downloadDidFinish:]):
        (-[FailingDownloadDelegate _download:didFailWithError:]):
        (-[FailingDownloadDelegate _downloadDidCancel:]):
        (-[CancelledDownloadDelegate _downloadDidStart:]):
        (-[CancelledDownloadDelegate _downloadDidFinish:]):
        (-[CancelledDownloadDelegate _download:didFailWithError:]):
        (-[CancelledDownloadDelegate _downloadDidCancel:]):
        (-[DownloadDelegate initWithSourceURL:]): Deleted.
        (-[DownloadDelegate sourceURL]): Deleted.
        (runTestWithNavigationDelegate): Deleted.

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

        Change MiniBrowser to hold on to window controllers instead of windows
        https://bugs.webkit.org/show_bug.cgi?id=130797

        Reviewed by Oliver Hunt.

        * MiniBrowser/mac/AppDelegate.h:
        * MiniBrowser/mac/AppDelegate.m:
        (-[BrowserAppDelegate init]):
        (-[BrowserAppDelegate newWindow:]):
        (-[BrowserAppDelegate browserWindowWillClose:]):
        (-[BrowserAppDelegate applicationWillTerminate:]):
        (-[BrowserAppDelegate frontmostBrowserWindowController]):

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

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

        Broke some window.opener tests for WK2 Mavericks (Requested by
        brrian__ on #webkit).

        Reverted changeset:

        "Web Replay: resource unique identifiers should be unique-per-
        frame, not globally"
        https://bugs.webkit.org/show_bug.cgi?id=130632
        http://trac.webkit.org/changeset/166264

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

        [CSS Shapes] Remove shape-inside support
        https://bugs.webkit.org/show_bug.cgi?id=130698

        Reviewed by David Hyatt.

        * Scripts/webkitperl/FeatureList.pm:

2014-02-27  Gurpreet Kaur  <k.gurpreet@samsung.com>

        Unreviewed. Add myself as a committer.

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

2014-03-26  Tomas Popela  <tpopela@redhat.com>

        run-launcher is Perl script so use elsif and not elif
        https://bugs.webkit.org/show_bug.cgi?id=130771

        Reviewed by Carlos Garcia Campos.

        * Scripts/run-launcher:

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

        [ATK] Utilize new AtkValue interface coming in ATK 2.11.92
        https://bugs.webkit.org/show_bug.cgi?id=130575

        Reviewed by Mario Sanchez Prada.

        Change ATK version to 2.11.92. Adjust current implementation.

        * DumpRenderTree/atk/AccessibilityUIElementAtk.cpp:
        (AccessibilityUIElement::intValue):
        (AccessibilityUIElement::minValue):
        (AccessibilityUIElement::maxValue):
        * WebKitTestRunner/InjectedBundle/atk/AccessibilityUIElementAtk.cpp:
        (WTR::AccessibilityUIElement::intValue):
        (WTR::AccessibilityUIElement::minValue):
        (WTR::AccessibilityUIElement::maxValue):
        * efl/jhbuild.modules:
        * gtk/jhbuild.modules:

2014-03-12  Philippe Normand  <pnormand@igalia.com>

        [GTK] The gnumake package is no longer needed in jhbuild
        https://bugs.webkit.org/show_bug.cgi?id=130121

        Reviewed by Martin Robinson.

        For GTK build-webkit now relies on cmake and ninja/gnumake. Even
        for a debug build cmake/system-gnumake worked just fine for me.

        * gtk/jhbuild.modules: Removed gnumake.
        * gtk/patches/make-3.82-arg-list-length.patch: Removed.
        * gtk/patches/make-3.82-parallel-build.patch: Removed.

2014-03-25  Andy Estes  <aestes@apple.com>

        Fix a failing API test on Mountain Lion and remove temporary debug logging.

        * TestWebKitAPI/Tests/WebKit2Cocoa/Download.mm:
        (-[DownloadDelegate _download:didReceiveData:]):
        (-[DownloadDelegate _downloadDidFinish:]):

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

        Web Replay: resource unique identifiers should be unique-per-frame, not globally
        https://bugs.webkit.org/show_bug.cgi?id=130623

        Reviewed by Timothy Hatcher.

        The resource loader callback dumping routines assumed that resource identifiers
        were globally unique. Its map of resource identifiers to URLs must also track the
        frame associated with the resource.

        * WebKitTestRunner/InjectedBundle/InjectedBundlePage.cpp:
        (WTR::dumpResourceURL): Additionally take a WKBundleFrameRef argument, and use the
        opaque pointer as part of the key for assignedUrlsCache. The frame pointer is
        stable as long as the frame is valid.
        (WTR::InjectedBundlePage::didInitiateLoadForResource):
        (WTR::InjectedBundlePage::willSendRequestForFrame):
        (WTR::InjectedBundlePage::didReceiveResponseForResource):
        (WTR::InjectedBundlePage::didFinishLoadForResource):
        (WTR::InjectedBundlePage::didFailLoadForResource):

2014-03-25  Andy Estes  <aestes@apple.com>

        Fix one API test expectation failure on Mountain Lion, and add additional logging to help diagnose another.

        * TestWebKitAPI/Tests/WebKit2Cocoa/Download.mm:
        (-[DownloadDelegate _download:didReceiveResponse:]):
        (-[DownloadDelegate _download:didReceiveData:]):

2014-03-25  Andy Estes  <aestes@apple.com>

        Add some debug logging to an API test that's failing on Mountain Lion.

        * TestWebKitAPI/Tests/WebKit2Cocoa/Download.mm:
        (-[DownloadDelegate _download:didReceiveResponse:]):
        (-[DownloadDelegate _downloadDidFinish:]):

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

        Add goBack: and goForward: IBActions and move stopLoading: to a new WKIBActions category on WKWebView
        https://bugs.webkit.org/show_bug.cgi?id=130732

        Reviewed by Tim Horton.

        * MiniBrowser/mac/WK2BrowserWindowController.m:
        (-[WK2BrowserWindowController validateUserInterfaceItem:]):

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

        [GTK] Remove the autotools build
        https://bugs.webkit.org/show_bug.cgi?id=130717

        Reviewed by Anders Carlsson.

        * DumpRenderTree/config.h: Remove references to the autotools configure file.
        * GNUmakefile.am: Removed.
        * GtkLauncher/GNUmakefile.am: Removed.
        * GtkLauncher/main.c: Remove references to the autotools configure file.
        * MiniBrowser/gtk/BrowserDownloadsBar.c: Ditto.
        * MiniBrowser/gtk/BrowserSearchBar.c: Ditto.
        * MiniBrowser/gtk/BrowserWindow.c: Ditto.
        * MiniBrowser/gtk/GNUmakefile.am: Removed.
        * MiniBrowser/gtk/main.c: Remove references to the autotools configure file.
        * Scripts/build-webkit: No longer handle autotools.
        * Scripts/run-gtk-tests: Ditto.
        (TestRunner._setup_testing_environment):
        * Scripts/run-launcher: Ditto.
        * Scripts/webkitdirs.pm: Ditto.
        * Scripts/webkitpy/common/config/contributionareas.py: Remove autotools as a contribution area.
        * Scripts/webkitpy/common/config/contributors.json: Ditto.
        * Scripts/webkitpy/port/gtk.py: No longer handle autotools.
        * Scripts/webkitpy/style/checker.py:
        * TestWebKitAPI/GNUmakefile.am: Removed.
        * TestWebKitAPI/config.h: Remove references to the autotools configure file.
        * WebKitTestRunner/GNUmakefile.am: Removed.
        * WebKitTestRunner/WebKitTestRunnerPrefix.h: Ditto.
        * gtk/GNUmakefile.am: Removed.
        * gtk/common.py: Remove checks for the autotools build.
        * gtk/symbols.filter: Renamed from Source/autotools/symbols.filter.

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

        prepare-ChangeLog throws false positive warnings for modified files.
        https://bugs.webkit.org/show_bug.cgi?id=130687

        Reviewed by Darin Adler.

        * Scripts/prepare-ChangeLog:
        (originalFile): Ignore git commit paremeter.
        We don't need this to get the unmodified file.
        (extractLineRangeBeforeChange):
        Simplify the if statement. Follow-up after r166189.

2014-03-25  Gabor Rapcsanyi  <rgabor@webkit.org>

        [EFL] Add ARM64 build support
        https://bugs.webkit.org/show_bug.cgi?id=130506

        Rubber stamped by Gyuyoung Kim.

        * Scripts/webkitdirs.pm:
        (isARM): Detect aarch64 as ARM.

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

        [webkitpy] Improve _parse_bug_description to recognize more descriptions
        https://bugs.webkit.org/show_bug.cgi?id=130137

        Reviewed by Csaba Osztrogonác.

        * Scripts/webkitpy/common/checkout/changelog.py:
        (ChangeLogEntry._parse_bug_description):
        * Scripts/webkitpy/common/checkout/changelog_unittest.py:
        (test_parse_log_entries_from_changelog):
        * Scripts/webkitpy/common/checkout/checkout_unittest.py:
        (CheckoutTest.test_commit_info_for_revision):

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

        Fix the iOS build of TestWebKitAPI.

        * TestWebKitAPI/Configurations/Base.xcconfig:
        * TestWebKitAPI/PlatformUtilities.h:

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

        Fix prepare-ChangeLog after r166156.
        https://bugs.webkit.org/show_bug.cgi?id=130674

        Reviewed by Darin Adler.

        * Scripts/prepare-ChangeLog:
        (generateFunctionLists):
        (extractLineRangeBeforeChange):

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

        [iOS] Download support by CFURLDownloadRef under USE(CFNETWORK).
        https://bugs.webkit.org/show_bug.cgi?id=129322

        Reviewed by Anders Carlsson.

        Add an API test suite for _WKDownload.

        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
        * TestWebKitAPI/Tests/WebKit2Cocoa/Download.mm: Added.
        (-[DownloadDelegate initWithSourceURL:]):
        (-[DownloadDelegate sourceURL]):
        (-[DownloadDelegate _downloadDidStart:]):
        (-[DownloadDelegate _download:didReceiveResponse:]):
        (-[DownloadDelegate _download:didReceiveData:]):
        (-[DownloadDelegate _download:decideDestinationWithSuggestedFilename:allowOverwrite:]):
        (-[DownloadDelegate _downloadDidFinish:]):
        (TEST):
        (runTestWithNavigationDelegate):
        (-[DownloadNavigationDelegate webView:decidePolicyForNavigationAction:decisionHandler:]):
        (-[ConvertResponseToDownloadNavigationDelegate webView:decidePolicyForNavigationResponse:decisionHandler:]):

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

        filter-build-webkit: reduce unfiltered output
        https://bugs.webkit.org/show_bug.cgi?id=130485

        Reviewed by Brent Fulgham.

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

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

        prepare-ChangeLog should list functions that have been removed too.
        https://bugs.webkit.org/show_bug.cgi?id=130508

        Reviewed by Darin Adler.

        The prepare-ChangeLog does not list the deleted functions in the Changelog.
        We have to read the functions and the line ranges of them from the source
        before the change, then search for overlaps between them and the changed
        line ranges from diff.

        * Scripts/prepare-ChangeLog:
        (originalFile): Get original source command.
        (generateFunctionLists): Collect deleted functions too.
        (generateFunctionListsByRanges): Duplicated code is moved to a separate subroutine.
        (extractLineRangeBeforeChange): Extract line ranges from the original source to get
        deleted functions ranges too.
        (extractLineRange): Renamed to extractLineRangeAfterChange.

2014-03-23  Hyowon Kim  <hw1008.kim@samsung.com>

        Move all EFL typedefs into EflTypedefs.h.
        https://bugs.webkit.org/show_bug.cgi?id=130511

        Reviewed by Gyuyoung Kim.

        * TestWebKitAPI/PlatformWebView.h: Remove EFL typedefs.
        * WebKitTestRunner/InjectedBundle/TestRunner.h: Ditto.
        * WebKitTestRunner/PlatformWebView.h: Ditto.

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

        Don't flush compositing layers within FrameView::willPaintContents()
        https://bugs.webkit.org/show_bug.cgi?id=130627
        <rdar://problem/16368869>

        Reviewed by Sam Weinig.
        
        Fix DRT to correctly render tests with layers now that FrameView::paintContents
        does not flush.
        
        Move the -[WebView displayIfNeeded] from -[FrameLoadDelegate webView:didFinishLoadForFrame:]
        into an explicit function called before dumping. 
        
        Then explicitly call _flushCompositingChanges to ensure that GraphicsLayer changes
        are flushed to CA. They will be pushed to the window by snapshotting.

        * DumpRenderTree/DumpRenderTree.xcodeproj/project.pbxproj:
        Fix weird path to IOKit.framework.
        * DumpRenderTree/mac/DumpRenderTree.mm:
        (updateDisplay):
        (dump):
        * DumpRenderTree/mac/FrameLoadDelegate.mm:
        (-[FrameLoadDelegate webView:locationChangeDone:forDataSource:]): Fix parameter name.
        (-[FrameLoadDelegate webView:didFinishLoadForFrame:]): Remove display call.

2014-03-21  David Kilzer  <ddkilzer@apple.com>

        fix-blink-patch: tool to fix up renamed directory paths in Blink
        <http://webkit.org/b/130609>

        Reviewed by Ryosuke Niwa.

        Usage: cat blink.patch | fix-blink-patch | svn-apply

        * Scripts/fix-blink-patch: Added.

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

        Remove use of deprecatedCharacters in WebKit API tests
        https://bugs.webkit.org/show_bug.cgi?id=130602

        Reviewed by Antti Koivisto.

        * TestWebKitAPI/Tests/WTF/StringBuilder.cpp:
        (TestWebKitAPI::expectBuilderContent): Use characters8/16 instead of deprecatedCharacters.
        (TestWebKitAPI::expectEmpty): Use characters8.
        (TestWebKitAPI::TEST): Use characters8 instead of deprecatedCharacters in most cases.

        * TestWebKitAPI/Tests/WTF/StringImpl.cpp:
        Removed the test that is entirely about 16-bit conversion since that's basically a test of
        the deprecatedCharacters function itself, which we are about to delete.

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

        [webkitpy] Fix has_valid_reviewer()
        https://bugs.webkit.org/show_bug.cgi?id=130589

        Reviewed by Csaba Osztrogonác.

        * Scripts/webkitpy/common/checkout/changelog.py:
        (ChangeLogEntry.has_valid_reviewer):
        * Scripts/webkitpy/common/checkout/changelog_unittest.py:
        (test_has_valid_reviewer):
        * Scripts/webkitpy/common/config/committers.py:
        (CommitterList._reviewer_only):
        (CommitterList.committer_by_name):
        (CommitterList.reviewer_by_email):
        (CommitterList):
        (CommitterList.reviewer_by_name):

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

        Add cache support for jhbuild
        https://bugs.webkit.org/show_bug.cgi?id=130588

        Reviewed by Csaba Osztrogonác.

        * jhbuild/jhbuildrc_common.py:
        (init): Jhbuild can now save the dependencies locally, if the JHBUILD_MIRROR environment variable is set.

2014-03-21  Xabier Rodriguez Calvar  <calvaris@igalia.com>

        [CMake] Add support for MAX_CPU_LOAD translated to -l in ninja and make
        https://bugs.webkit.org/show_bug.cgi?id=130504

        Reviewed by Martin Robinson.

        * Scripts/build-webkit: Add the maxCPULoad() to the makeArgs in
        CMake if not specified.
        * Scripts/webkitdirs.pm:
        (determineMaxCPULoad): Read MAX_CPU_LOAD as maxCPULoad.
        (maxCPULoad): determineMaxCPULoad and return maxCPULoad.

2014-03-21  Andreas Kling  <akling@apple.com>

        RetainPtr API test should use CFArray instead of CFString for testing.
        <rdar://problem/16384899>

        Unreviewed bot fix.

        * TestWebKitAPI/Tests/WTF/cf/RetainPtr.cpp:
        (TestWebKitAPI::TEST):
        * TestWebKitAPI/Tests/WTF/cf/RetainPtrHashing.cpp:
        (TestWebKitAPI::TEST):

2014-03-20  Hyowon Kim  <hw1008.kim@samsung.com>

        Move to using std::unique_ptr for EFL objects.
        https://bugs.webkit.org/show_bug.cgi?id=129853

        Reviewed by Gyuyoung Kim.

        EflUniquePtr is a template alias of std::unique_ptr
        with a custom deleter for each Efl Objects, which is motivated by GUniquePtr.
        This patch replaces uses of OwnPtr and PassOwnPtr for Efl objects with EflUniquePtr.

        * DumpRenderTree/efl/DumpRenderTree.cpp:
        (main):
        * ImageDiff/efl/ImageDiff.cpp:
        (initEfl):
        (main):

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

        Unreviewed buildfix after r165983 for non Cocoa platforms

        Renamed WKPreferencesPrivate.h to WKPreferencesRefPrivate.h

        * TestWebKitAPI/Tests/WebKit2/ScrollPinningBehaviors.cpp:
        * TestWebKitAPI/Tests/WebKit2/WKPreferences.cpp:
        * WebKitTestRunner/TestController.cpp:

2014-03-20  Zan Dobersek  <zdobersek@igalia.com>

        [GTK][CMake] Add support for building with Clang
        https://bugs.webkit.org/show_bug.cgi?id=130260

        Reviewed by Martin Robinson.

        * TestWebKitAPI/CMakeLists.txt: When building with Clang TestWebKitAPI should be
        built with GTEST_HAS_TR1_TUPLE defined to 0 to avoid build failures occuring in the
        included GTest framework headers.
        * gtk/generate-gtkdoc:
        (prepare_environment_for_gtkdoc_generation): Don't modify the CFLAGS env anymore
        in case of using Clang since that is now set by the CMake rule.

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

        Expose text and page zoom in WK2 SPI, and hook them up in MiniBrowser
        https://bugs.webkit.org/show_bug.cgi?id=130476

        Reviewed by Anders Carlsson.
        
        Hook up page/text zoom in MiniBrowser, make reload work, remove some logging.

        * MiniBrowser/mac/WK1BrowserWindowController.m:
        (-[WK1BrowserWindowController webView:decidePolicyForNavigationAction:request:frame:decisionListener:]):
        Remove log.
        * MiniBrowser/mac/WK2BrowserWindowController.m:
        (-[WK2BrowserWindowController awakeFromNib]):
        (-[WK2BrowserWindowController validateMenuItem:]):
        (-[WK2BrowserWindowController reload:]):
        Hook up reload.
        (-[WK2BrowserWindowController toggleZoomMode:]):
        (-[WK2BrowserWindowController resetZoom:]):
        (-[WK2BrowserWindowController canResetZoom]):
        (-[WK2BrowserWindowController currentZoomFactor]):
        (-[WK2BrowserWindowController setCurrentZoomFactor:]):
        (-[WK2BrowserWindowController canZoomIn]):
        (-[WK2BrowserWindowController canZoomOut]):

2014-03-19  Alexey Proskuryakov  <ap@apple.com>

        REGRESSION (OS X 10.9.2): PageVisibilityStateWithWindowChanges.WebKit2 API test fails
        https://bugs.webkit.org/show_bug.cgi?id=130463

        * TestWebKitAPI/Tests/mac/PageVisibilityStateWithWindowChanges.mm: Disable the test.

2014-03-18  Samuel White  <samuel_white@apple.com>

        AX: Not able to use arrow keys to read text with VoiceOver before selection is set someplace (anyplace).
        https://bugs.webkit.org/show_bug.cgi?id=130250

        Reviewed by Chris Fleizach.

        Added ability to toggle enhanced accessibility on and off to support tests that require it.

        * DumpRenderTree/AccessibilityController.cpp:
        (enableEnhancedAccessibilityCallback):
        (getEnhancedAccessibilityEnabledCallback):
        (AccessibilityController::getJSClass):
        * DumpRenderTree/AccessibilityController.h:
        * DumpRenderTree/atk/AccessibilityControllerAtk.cpp:
        (AccessibilityController::enableEnhancedAccessibility):
        (AccessibilityController::enhancedAccessibilityEnabled):
        * DumpRenderTree/ios/AccessibilityControllerIOS.mm:
        (AccessibilityController::enableEnhancedAccessibility):
        (AccessibilityController::enhancedAccessibilityEnabled):
        * DumpRenderTree/mac/AccessibilityControllerMac.mm:
        (AccessibilityController::enableEnhancedAccessibility):
        (AccessibilityController::enhancedAccessibilityEnabled):
        * DumpRenderTree/win/AccessibilityControllerWin.cpp:
        (AccessibilityController::enableEnhancedAccessibility):
        (AccessibilityController::enhancedAccessibilityEnabled):
        * WebKitTestRunner/InjectedBundle/AccessibilityController.cpp:
        (WTR::AccessibilityController::enableEnhancedAccessibility):
        (WTR::AccessibilityController::enhancedAccessibilityEnabled):
        * WebKitTestRunner/InjectedBundle/AccessibilityController.h:
        * WebKitTestRunner/InjectedBundle/Bindings/AccessibilityController.idl:

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

        Unreviewed, add some contributors, and fix Nadav's entry (he's not really a reviewer
        yet).

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

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

        Web Inspector: Remove stale ReportMemoryUsagePlugin
        https://bugs.webkit.org/show_bug.cgi?id=130405

        Reviewed by Andreas Kling.

        This clang plugin looks like it was used for the old Inspector memory
        instrumentation that was removed. So the tool can be removed.

        * clang/ReportMemoryUsagePlugin/CMakeLists.txt: Removed.
        * clang/ReportMemoryUsagePlugin/Makefile: Removed.
        * clang/ReportMemoryUsagePlugin/ReportMemoryUsage.cpp: Removed.
        * clang/ReportMemoryUsagePlugin/tests/Source/WebCore/Test.cpp: Removed.

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

        webkit-patch land shouldn't add a reviewer for unreviewed build fixes
        https://bugs.webkit.org/show_bug.cgi?id=130220

        Reviewed by Csaba Osztrogonác.

        * Scripts/webkitpy/common/checkout/changelog.py:
        (ChangeLog.set_reviewer):
        * Scripts/webkitpy/common/checkout/changelog_unittest.py:
        (test_set_reviewer):

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

        More FTL enabling.

        Rubber stamped by Dan Bernstein.

        * Tools/Scripts/build-webkit:

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

        Renable pagination mode in WK2 MiniBrowser
        https://bugs.webkit.org/show_bug.cgi?id=130374

        Reviewed by Anders Carlsson.
        
        Put the implementation of togglePaginationMode: back, and correctly
        enable the menu item.

        * MiniBrowser/mac/WK2BrowserWindowController.m:
        (-[WK2BrowserWindowController validateMenuItem:]):
        (-[WK2BrowserWindowController isPaginated]):
        (-[WK2BrowserWindowController togglePaginationMode:]):

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

        Add --reset option to Tools/Scripts/set-webkit-configuration script
        https://bugs.webkit.org/show_bug.cgi?id=130401

        Reviewed by Csaba Osztrogonác.

        * Scripts/set-webkit-configuration:

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

        [GTK] [CMake] build-webkit-options.txt is not generated during a fresh build
        https://bugs.webkit.org/show_bug.cgi?id=130388

        Reviewed by Sergio Villar Senin.

        * Scripts/webkitdirs.pm:
        (shouldRemoveCMakeCache): make sure that the build directory
        exists before attempting to create a file in it.

2014-03-18  Robert Plociennik  <r.plociennik@samsung.com>

        [EFL] fontconfig-2.8.0 is not compliant with C++11 leading to a build break
        https://bugs.webkit.org/show_bug.cgi?id=130336

        Reviewed by Gyuyoung Kim.

        Compilation with gcc 4.8.x results in 'invalid suffix on literal; C++11
        requires a space between literal and string macro [-Wliteral-suffix]'
        warning treated as error.

        This patch applies a solution from r162448 to the EFL port.

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

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

        webkitpy test rebaseline.

        * Scripts/webkitpy/performance_tests/perftestsrunner_unittest.py:
        (MainTest.test_default_args):

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

        --profile should imply --test-runner-count=1 in run-perf-tests
        https://bugs.webkit.org/show_bug.cgi?id=130375

        Reviewed by Benjamin Poulain.

        Use the test runner count of 1 when --profile is specified but not --test-runner-count.

        * Scripts/webkitpy/performance_tests/perftestsrunner.py:
        (PerfTestsRunner._parse_args): Use -1 as the default value.
        (PerfTestsRunner._collect_tests): If --test-runner-count is set (i.e. it's a positive value),
        then use that value. Otherwise, if it's never set and --profile is present, test-runner-count
        should be 1.

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

        Address some style nits.

        * MiniBrowser/mac/WK2BrowserWindowController.m:

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

        Add transparent window support back into MiniBrowser
        https://bugs.webkit.org/show_bug.cgi?id=130363

        Reviewed by Anders Carlsson.
        
        Re-enable transparent window support for WK2.

        * MiniBrowser/mac/WK2BrowserWindowController.m:
        (-[WK2BrowserWindowController validateMenuItem:]):
        (-[WK2BrowserWindowController toggleTransparentWindow:]):

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

        Fix the 32-bit build; make the open panel make a WK1 window.

        * MiniBrowser/mac/AppDelegate.m:
        (-[BrowserAppDelegate openDocument:]):

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

        Convert MiniBrowser to use WKWebView API
        https://bugs.webkit.org/show_bug.cgi?id=130061

        Reviewed by Anders Carlsson.
        
        Convert the MiniBrowser WK2 window to use WebKit2 API as much
        as possible.
        
        Some functionality was removed temporarily:
            - text zoom, page zoom
            - reload
            - pagination mode
            - transparent window
            - dumping source
            - window.open support
            - beforeUnload panel
            - find in page

        * MiniBrowser/mac/AppDelegate.h:
        * MiniBrowser/mac/AppDelegate.m:
        (-[BrowserAppDelegate init]):
        (-[BrowserAppDelegate newWindow:]):
        (-[BrowserAppDelegate applicationWillTerminate:]):
        (-[BrowserAppDelegate openDocument:]):
        * MiniBrowser/mac/WK2BrowserWindowController.h:
        * MiniBrowser/mac/WK2BrowserWindowController.m:
        (-[WK2BrowserWindowController awakeFromNib]):
        (-[WK2BrowserWindowController dealloc]):
        (-[WK2BrowserWindowController fetch:]):
        (-[WK2BrowserWindowController validateMenuItem:]):
        (-[WK2BrowserWindowController reload:]):
        (-[WK2BrowserWindowController goBack:]):
        (-[WK2BrowserWindowController goForward:]):
        (-[WK2BrowserWindowController toggleZoomMode:]):
        (-[WK2BrowserWindowController resetZoom:]):
        (-[WK2BrowserWindowController canResetZoom]):
        (-[WK2BrowserWindowController dumpSourceToConsole:]):
        (-[WK2BrowserWindowController togglePaginationMode:]):
        (-[WK2BrowserWindowController validateUserInterfaceItem:]):
        (-[WK2BrowserWindowController windowShouldClose:]):
        (-[WK2BrowserWindowController applicationTerminating]):
        (-[WK2BrowserWindowController currentZoomFactor]):
        (-[WK2BrowserWindowController setCurrentZoomFactor:]):
        (-[WK2BrowserWindowController toggleTransparentWindow:]):
        (-[WK2BrowserWindowController observeValueForKeyPath:ofObject:change:context:]):
        (-[WK2BrowserWindowController webView:runJavaScriptAlertPanelWithMessage:initiatedByFrame:completionHandler:]):
        (-[WK2BrowserWindowController webView:runJavaScriptConfirmPanelWithMessage:initiatedByFrame:completionHandler:]):
        (-[WK2BrowserWindowController webView:runJavaScriptTextInputPanelWithPrompt:defaultText:initiatedByFrame:completionHandler:]):
        (-[WK2BrowserWindowController find:]):
        (-[WK2BrowserWindowController webView:decidePolicyForNavigationResponse:decisionHandler:]):
        (-[WK2BrowserWindowController webView:didStartProvisionalNavigation:]):
        (-[WK2BrowserWindowController webView:didReceiveServerRedirectForProvisionalNavigation:]):
        (-[WK2BrowserWindowController webView:didFailProvisionalNavigation:withError:]):
        (-[WK2BrowserWindowController webView:didCommitNavigation:]):
        (-[WK2BrowserWindowController webView:didFinishLoadingNavigation:]):
        (-[WK2BrowserWindowController webView:didFailNavigation:withError:]):
        * WebKitTestRunner/PlatformWebView.h:
        * WebKitTestRunner/ios/PlatformWebViewIOS.mm:
        * WebKitTestRunner/mac/PlatformWebViewMac.mm:

2014-03-17  Zan Dobersek  <zdobersek@igalia.com>

        Use RunLoop objects through references instead of pointers
        https://bugs.webkit.org/show_bug.cgi?id=130313

        Reviewed by Andreas Kling.

        Adjust the code accordingly now that RunLoop::current() and RunLoop::main()
        return RunLoop reference instead of a pointer.

        * TestWebKitAPI/Tests/WebKit2Gtk/DOMDOMWindowTest.cpp:
        (loadedCallback):
        (clickedCallback):

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

        sort-export-file --help doesn't work (missing 'use')
        https://bugs.webkit.org/show_bug.cgi?id=130338

        Reviewed by Anders Carlsson.

        * Scripts/sort-export-file:
        Add a missing 'use', and fix a typo in an error message.

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

        [GTK][CMake] Ensure that HAVE_GTK_UNIX_PRINTING is defined when appropriate
        https://bugs.webkit.org/show_bug.cgi?id=130155

        Reviewed by Philippe Normand.

        * TestWebKitAPI/Tests/WebKit2Gtk/CMakeLists.txt: Add GTK_UNIX_PRINT flags to the build.

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

        [GTK] MiniBrowser fails to load injected bundle lib
        https://bugs.webkit.org/show_bug.cgi?id=130332

        Reviewed by Anders Carlsson.

        This is because WEBKIT_INJECTED_BUNDLE_PATH env var is set too late.

        * MiniBrowser/gtk/main.c:
        (main): Make sure WEBKIT_INJECTED_BUNDLE_PATH is set before a web
        process is spawn.

2014-03-16  Kim Byung Jun  <bj1987.kim@samsung.com>

        [EFL] Enable TOUCH_SLIDER macro
        https://bugs.webkit.org/show_bug.cgi?id=130185

        Reviewed by Gyuyoung Kim.

        * Scripts/webkitperl/FeatureList.pm:

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

        [GTK][CMake] Build with -fno-rtti
        https://bugs.webkit.org/show_bug.cgi?id=130261

        Reviewed by Martin Robinson.

        * TestWebKitAPI/CMakeLists.txt: Build TestWebKitAPI with GTEST_HAS_RTTI macro
        defined to 0 to prevent typeid use in included GTest headers.

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

        Web Inspector: vended backend commands file should be generated as part of the build
        https://bugs.webkit.org/show_bug.cgi?id=130110

        Reviewed by Timothy Hatcher.

        * Scripts/build-webkit: build WebInspectorUI after WebCore but before WebKit.

2014-03-16  Diego Pino García  <dpino@igalia.com>

        [GTK] Minibrowser: Add shortcuts for reloading page and reloading page ignoring cache
        https://bugs.webkit.org/show_bug.cgi?id=128999

        Reviewed by Philippe Normand.

        * MiniBrowser/gtk/BrowserWindow.c:
        (reloadPage):
        (reloadPageIgnoringCache):
        (browser_window_init):

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

        [GTK] Improve ninja detection in webkitdirs.pm
        https://bugs.webkit.org/show_bug.cgi?id=129902

        Reviewed by Daniel Bates.

        * Scripts/webkitdirs.pm:
        (canUseNinja): Use which instead of trying to invoke ninja directly. This also allows
        us to look for ninja-build as well.

2014-03-14  Maciej Stachowiak  <mjs@apple.com>

        Replace "Apple Computer, Inc." with "Apple Inc." in copyright headers
        https://bugs.webkit.org/show_bug.cgi?id=130276
        <rdar://problem/16266927>
        
        Reviewed by Simon Fraser.

        * BuildSlaveSupport/build-launcher-app:
        * BuildSlaveSupport/build-launcher-dmg:
        * DumpRenderTree/DumpRenderTree.h:
        * DumpRenderTree/DumpRenderTreePrefix.h:
        * DumpRenderTree/GCController.cpp:
        * DumpRenderTree/GCController.h:
        * DumpRenderTree/JavaScriptThreading.cpp:
        * DumpRenderTree/JavaScriptThreading.h:
        * DumpRenderTree/PixelDumpSupport.cpp:
        * DumpRenderTree/PixelDumpSupport.h:
        * DumpRenderTree/TestNetscapePlugIn/PluginObjectMac.mm:
        * DumpRenderTree/TestRunner.cpp:
        * DumpRenderTree/TestRunner.h:
        * DumpRenderTree/WorkQueue.cpp:
        * DumpRenderTree/WorkQueue.h:
        * DumpRenderTree/WorkQueueItem.h:
        * DumpRenderTree/atk/AccessibilityCallbacks.h:
        * DumpRenderTree/atk/AccessibilityCallbacksAtk.cpp:
        * DumpRenderTree/cairo/PixelDumpSupportCairo.cpp:
        * DumpRenderTree/cairo/PixelDumpSupportCairo.h:
        * DumpRenderTree/cg/PixelDumpSupportCG.cpp:
        * DumpRenderTree/cg/PixelDumpSupportCG.h:
        * DumpRenderTree/efl/EditingCallbacks.cpp:
        * DumpRenderTree/efl/EditingCallbacks.h:
        * DumpRenderTree/efl/EventSender.cpp:
        * DumpRenderTree/efl/EventSender.h:
        * DumpRenderTree/efl/GCControllerEfl.cpp:
        * DumpRenderTree/efl/PixelDumpSupportEfl.cpp:
        * DumpRenderTree/efl/TestRunnerEfl.cpp:
        * DumpRenderTree/gtk/DumpRenderTree.cpp:
        * DumpRenderTree/gtk/DumpRenderTreeGtk.h:
        * DumpRenderTree/gtk/EditingCallbacks.cpp:
        * DumpRenderTree/gtk/EditingCallbacks.h:
        * DumpRenderTree/gtk/EventSender.cpp:
        * DumpRenderTree/gtk/EventSender.h:
        * DumpRenderTree/gtk/GCControllerGtk.cpp:
        * DumpRenderTree/gtk/PixelDumpSupportGtk.cpp:
        * DumpRenderTree/gtk/SelfScrollingWebKitWebView.cpp:
        * DumpRenderTree/gtk/SelfScrollingWebKitWebView.h:
        * DumpRenderTree/gtk/TestRunnerGtk.cpp:
        * DumpRenderTree/gtk/TextInputController.cpp:
        * DumpRenderTree/gtk/TextInputController.h:
        * DumpRenderTree/ios/PerlSupport/IPhoneSimulatorNotification/Makefile.PL:
        * DumpRenderTree/ios/PerlSupport/IPhoneSimulatorNotification/lib/IPhoneSimulatorNotification.pm:
        * DumpRenderTree/ios/PixelDumpSupportIOS.mm:
        * DumpRenderTree/mac/AppleScriptController.h:
        * DumpRenderTree/mac/AppleScriptController.m:
        * DumpRenderTree/mac/CheckedMalloc.cpp:
        * DumpRenderTree/mac/CheckedMalloc.h:
        * DumpRenderTree/mac/DumpRenderTree.mm:
        * DumpRenderTree/mac/DumpRenderTreeDraggingInfo.h:
        * DumpRenderTree/mac/DumpRenderTreeDraggingInfo.mm:
        * DumpRenderTree/mac/DumpRenderTreeMac.h:
        * DumpRenderTree/mac/DumpRenderTreePasteboard.h:
        * DumpRenderTree/mac/DumpRenderTreePasteboard.m:
        * DumpRenderTree/mac/DumpRenderTreeWindow.h:
        * DumpRenderTree/mac/DumpRenderTreeWindow.mm:
        * DumpRenderTree/mac/EditingDelegate.h:
        * DumpRenderTree/mac/EditingDelegate.mm:
        * DumpRenderTree/mac/EventSendingController.h:
        * DumpRenderTree/mac/EventSendingController.mm:
        * DumpRenderTree/mac/FrameLoadDelegate.h:
        * DumpRenderTree/mac/FrameLoadDelegate.mm:
        * DumpRenderTree/mac/GCControllerMac.mm:
        * DumpRenderTree/mac/MockWebNotificationProvider.h:
        * DumpRenderTree/mac/MockWebNotificationProvider.mm:
        * DumpRenderTree/mac/NavigationController.h:
        * DumpRenderTree/mac/NavigationController.m:
        * DumpRenderTree/mac/ObjCController.h:
        * DumpRenderTree/mac/ObjCController.m:
        * DumpRenderTree/mac/ObjCPlugin.h:
        * DumpRenderTree/mac/ObjCPlugin.m:
        * DumpRenderTree/mac/ObjCPluginFunction.h:
        * DumpRenderTree/mac/ObjCPluginFunction.m:
        * DumpRenderTree/mac/PixelDumpSupportMac.mm:
        * DumpRenderTree/mac/PolicyDelegate.h:
        * DumpRenderTree/mac/PolicyDelegate.mm:
        * DumpRenderTree/mac/ResourceLoadDelegate.h:
        * DumpRenderTree/mac/ResourceLoadDelegate.mm:
        * DumpRenderTree/mac/TestRunnerMac.mm:
        * DumpRenderTree/mac/TextInputController.h:
        * DumpRenderTree/mac/TextInputController.m:
        * DumpRenderTree/mac/UIDelegate.h:
        * DumpRenderTree/mac/UIDelegate.mm:
        * DumpRenderTree/mac/WorkQueueItemMac.mm:
        * DumpRenderTree/win/DRTDataObject.cpp:
        * DumpRenderTree/win/DRTDataObject.h:
        * DumpRenderTree/win/DRTDesktopNotificationPresenter.h:
        * DumpRenderTree/win/DRTDropSource.cpp:
        * DumpRenderTree/win/DRTDropSource.h:
        * DumpRenderTree/win/DraggingInfo.h:
        * DumpRenderTree/win/DumpRenderTree.cpp:
        * DumpRenderTree/win/DumpRenderTreeWin.h:
        * DumpRenderTree/win/EditingDelegate.cpp:
        * DumpRenderTree/win/EditingDelegate.h:
        * DumpRenderTree/win/EventSender.cpp:
        * DumpRenderTree/win/EventSender.h:
        * DumpRenderTree/win/FrameLoadDelegate.cpp:
        * DumpRenderTree/win/FrameLoadDelegate.h:
        * DumpRenderTree/win/GCControllerWin.cpp:
        * DumpRenderTree/win/HistoryDelegate.cpp:
        * DumpRenderTree/win/HistoryDelegate.h:
        * DumpRenderTree/win/MD5.cpp:
        * DumpRenderTree/win/MD5.h:
        * DumpRenderTree/win/PixelDumpSupportWin.cpp:
        * DumpRenderTree/win/PolicyDelegate.cpp:
        * DumpRenderTree/win/PolicyDelegate.h:
        * DumpRenderTree/win/ResourceLoadDelegate.cpp:
        * DumpRenderTree/win/ResourceLoadDelegate.h:
        * DumpRenderTree/win/TestRunnerWin.cpp:
        * DumpRenderTree/win/TextInputController.cpp:
        * DumpRenderTree/win/TextInputController.h:
        * DumpRenderTree/win/TextInputControllerWin.cpp:
        * DumpRenderTree/win/UIDelegate.cpp:
        * DumpRenderTree/win/UIDelegate.h:
        * DumpRenderTree/win/WorkQueueItemWin.cpp:
        * EWebLauncher/main.c:
        * GtkLauncher/main.c:
        * ImageDiff/efl/ImageDiff.cpp:
        * ImageDiff/gtk/ImageDiff.cpp:
        * MiniBrowser/gtk/main.c:
        * Scripts/SpacingHeuristics.pm:
        * Scripts/VCSUtils.pm:
        * Scripts/bisect-builds:
        * Scripts/build-dumprendertree:
        * Scripts/build-jsc:
        * Scripts/build-webkit:
        * Scripts/check-dom-results:
        * Scripts/check-for-exit-time-destructors:
        * Scripts/check-for-global-initializers:
        * Scripts/commit-log-editor:
        * Scripts/compare-timing-files:
        * Scripts/debug-minibrowser:
        * Scripts/debug-safari:
        * Scripts/do-file-rename:
        * Scripts/find-extra-includes:
        * Scripts/generate-coverage-data:
        * Scripts/make-script-test-wrappers:
        * Scripts/malloc-tree:
        * Scripts/old-run-webkit-tests:
        * Scripts/parse-malloc-history:
        * Scripts/report-include-statistics:
        * Scripts/resolve-ChangeLogs:
        * Scripts/run-bindings-tests:
        * Scripts/run-iexploder-tests:
        * Scripts/run-javascriptcore-tests:
        * Scripts/run-jsc:
        * Scripts/run-launcher:
        * Scripts/run-leaks:
        * Scripts/run-mangleme-tests:
        * Scripts/run-minibrowser:
        * Scripts/run-pageloadtest:
        * Scripts/run-regexp-tests:
        * Scripts/run-safari:
        * Scripts/run-sunspider:
        * Scripts/run-webkit-app:
        * Scripts/sampstat:
        * Scripts/set-webkit-configuration:
        * Scripts/sort-Xcode-project-file:
        * Scripts/sort-export-file:
        * Scripts/split-file-by-class:
        * Scripts/sunspider-compare-results:
        * Scripts/svn-apply:
        * Scripts/svn-create-patch:
        * Scripts/svn-unapply:
        * Scripts/test-webkit-scripts:
        * Scripts/update-javascriptcore-test-results:
        * Scripts/update-webkit:
        * Scripts/update-webkit-auxiliary-libs:
        * Scripts/update-webkit-dependency:
        * Scripts/update-webkit-localizable-strings:
        * Scripts/update-webkit-support-libs:
        * Scripts/update-webkit-wincairo-libs:
        * Scripts/webkit-build-directory:
        * Scripts/webkitdirs.pm:
        (installedSafariPath):
        * Scripts/webkitperl/VCSUtils_unittest/parseChunkRange.pl:
        * Scripts/webkitperl/VCSUtils_unittest/parseDiffHeader.pl:
        * Scripts/webkitperl/VCSUtils_unittest/parseSvnDiffFooter.pl:
        * Scripts/webkitperl/VCSUtils_unittest/parseSvnDiffHeader.pl:
        * Scripts/webkitperl/VCSUtils_unittest/parseSvnProperty.pl:
        * Scripts/webkitperl/VCSUtils_unittest/parseSvnPropertyValue.pl:
        * Scripts/webkitperl/features.pm:
        * Scripts/webkitperl/httpd.pm:
        * Scripts/webkitpy/bindings/main.py:
        * Scripts/webkitpy/to_be_moved/update_webgl_conformance_tests.py:
        * TestWebKitAPI/Tests/WTF/MediaTime.cpp:
        * TestWebKitAPI/Tests/WTF/MetaAllocator.cpp:
        * TestWebKitAPI/Tests/WTF/RedBlackTree.cpp:
        * TestWebKitAPI/Tests/WTF/cf/RetainPtr.cpp:
        * TestWebKitAPI/Tests/WTF/cf/RetainPtrHashing.cpp:
        * TestWebKitAPI/Tests/WTF/ns/RetainPtr.mm:
        * WebKitTestRunner/InjectedBundle/gtk/ActivateFontsGtk.cpp:
        * WebKitTestRunner/InjectedBundle/gtk/InjectedBundleUtilities.cpp:
        * WebKitTestRunner/InjectedBundle/gtk/InjectedBundleUtilities.h:
        * WebKitTestRunner/PixelDumpSupport.cpp:
        * WebKitTestRunner/PixelDumpSupport.h:
        * WebKitTestRunner/gtk/EventSenderProxyGtk.cpp:
        * WinLauncher/WinLauncher.cpp:
        * WinLauncher/WinLauncher.h:
        * WinLauncher/stdafx.cpp:
        * WinLauncher/stdafx.h:

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

        Sometimes we need to be explicit about the SDK when running ranlib on Darwin
        https://bugs.webkit.org/show_bug.cgi?id=130265

        Reviewed by Michael Saboff.

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

2014-03-14  Landry Breuil  <landry@openbsd.org>

        Recognize openbsd/netbsd and am64 archs in Tools/Scripts.
        Also allow to set MAKE in the environment.
        https://bugs.webkit.org/show_bug.cgi?id=129991

        Reviewed by Andreas Kling.

        * Scripts/webkitdirs.pm:
        (determineArchitecture):
        (determineNumberOfCPUs):
        (isBSD):
        (buildAutotoolsProject):
        * Scripts/webkitpy/common/system/platforminfo.py:
        (PlatformInfo.__init__):
        (PlatformInfo.is_openbsd):
        (PlatformInfo):
        (PlatformInfo.is_netbsd):
        (PlatformInfo._determine_os_name):

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

        Remove libWebKitSystemInterfaceLion.a
        https://bugs.webkit.org/show_bug.cgi?id=130254

        Reviewed by Geoffrey Garen and Andreas Kling.

        No need to copy the Lion libraries into the build.

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

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