Reviewed by Adam.

        http://bugs.webkit.org/show_bug.cgi?id=18259
        XML+XSLT pages in iframe contains document.location of a parent window

        Test: fast/xsl/subframe-location.html

        * xml/XSLTProcessor.cpp:
        (WebCore::XSLTProcessor::createDocumentFromSource): Set resulting document URL before opening
        it, so that the document loader picks a correct URL, too.



git-svn-id: http://svn.webkit.org/repository/webkit/trunk@31947 268f45cc-cd09-0410-ab3c-d52691b4dbfc
JavaScriptCore:

2008-04-16  Sam Weinig  <sam@webkit.org>

        Reviewed by Darin Adler.

        - Remove kjs_ prefix from strtod, dtoa, and freedtoa and put it
          in the KJS namespace.
        - Make strtod, dtoa, and freedtoa c++ functions instead of extern "C".
        - Remove mode switching from dtoa.  ~2% improvement on test 26. 
        - Removes all unnecessary #defines from dtoa code.

        * JavaScriptCore.exp:
        * kjs/dtoa.cpp:
        (KJS::ulp):
        (KJS::b2d):
        (KJS::d2b):
        (KJS::ratio):
        (KJS::):
        (KJS::strtod):
        (KJS::freedtoa):
        (KJS::dtoa):
        * kjs/dtoa.h:
        * kjs/function.cpp:
        (KJS::parseInt):
        * kjs/lexer.cpp:
        (KJS::Lexer::lex):
        * kjs/number_object.cpp:
        (KJS::integer_part_noexp):
        (KJS::numberProtoFuncToExponential):
        * kjs/ustring.cpp:
        (KJS::UString::from):
        (KJS::UString::toDouble):

WebCore:

2008-04-16  Sam Weinig  <sam@webkit.org>

        Reviewed by Darin Adler.

        Rename kjs_strtod to KJS::strtod.

        * platform/text/String.cpp:
        (WebCore::charactersToDouble):



git-svn-id: http://svn.webkit.org/repository/webkit/trunk@31948 268f45cc-cd09-0410-ab3c-d52691b4dbfc
2008-04-16  Kevin McCullough  <kmccullough@apple.com>

        Reviewed by Sam and Geoff.

        -<rdar://problem/5770054> JavaScript profiler (10928)
        Inital profiler prototype

        * GNUmakefile.am: Added new files to project
        * JavaScriptCore.pri: Ditto
        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj: Ditto
        * JavaScriptCore.xcodeproj/project.pbxproj: Ditto
        * JavaScriptCoreSources.bkl: Ditto
        * kjs/config.h: Put compiling flag in here.
        * kjs/function.cpp: Instrument calling the function eval().
        (KJS::eval):
        * kjs/interpreter.cpp: Instrument evaluating global scopes.
        (KJS::Interpreter::evaluate):
        * kjs/object.cpp: Instrument JS function calls.
        (KJS::JSObject::call):
        * profiler: Added.
        * profiler/FunctionCallProfile.cpp: Added.
        (KJS::FunctionCallProfile::FunctionCallProfile):
        (KJS::FunctionCallProfile::~FunctionCallProfile):
        (KJS::FunctionCallProfile::willExecute): Call right before the JS function or executing context is executed to start the profiler's timer.
        (KJS::FunctionCallProfile::didExecute): Call right after the JS function or executing context is executed to stop the profiler's timer.
        (KJS::FunctionCallProfile::addChild): Add a child to the current FunctionCallProfile if it isn't already a child of the current FunctionalCallProfile.
        (KJS::FunctionCallProfile::findChild): Return the child that matches the given name if there is one.
        (KJS::FunctionCallProfile::printDataSampleStyle): Print the current profiled information in a format that matches sample's output.
        * profiler/FunctionCallProfile.h: Added.
        (KJS::FunctionCallProfile::FunctionCallProfile):
        (KJS::FunctionCallProfile::~FunctionCallProfile):
        (KJS::FunctionCallProfile::functionName):
        (KJS::FunctionCallProfile::microSecs):
        * profiler/Profiler.cpp: Added.
        (KJS::Profiler::profiler):
        (KJS::Profiler::sharedProfiler): Return global singleton (may change due to multi-threading concerns)
        (KJS::Profiler::startProfiling): Don't start collecting profiling information until the user starts the profiler. Also don't clear old prfiled data until the profiler is restarted.
        (KJS::Profiler::stopProfiling): Stop collecting profile information.
        (KJS::Profiler::willExecute): Same as above. 
        (KJS::Profiler::didExecute): Same as above.
        (KJS::Profiler::insertStackNamesInTree): Follow the stack of the given names and if a sub-stack is not in the current tree, add it.
        (KJS::Profiler::getStackNames): Get the names from the different passed in parameters and order them as a stack.
        (KJS::Profiler::getFunctionName): Get the function name from the given parameter.
        (KJS::Profiler::printDataSampleStyle): Print the current profiled information in a format that matches sample's output.
        (KJS::Profiler::debugLog):
        * profiler/Profiler.h: Added.
        (KJS::Profiler::Profiler):



git-svn-id: http://svn.webkit.org/repository/webkit/trunk@31949 268f45cc-cd09-0410-ab3c-d52691b4dbfc
        Pass JSConsole's arguments unmodified to Console

        Part of Bug 17228: console.{log,warn,info,error} should support format
        strings, variable arguments
        <http://bugs.webkit.org/show_bug.cgi?id=17228>
        <rdar://problem/5732828>

        All of JSConsole's methods are now custom, so that we can pass the
        arguments unmodified to Console. Console now handles calling
        toString() on the first argument. Later it will pass the arguments off
        to InspectorController.

        There should be no behavioral changes caused by this patch.

        Reviewed by Darin Adler.

        * ForwardingHeaders/kjs/list.h: Added.
        * GNUmakefile.am: Added JSConsoleCustom.cpp to the project.
        * WebCore.pro: Ditto.
        * WebCore.vcproj/WebCore.vcproj: Ditto.
        * WebCore.xcodeproj/project.pbxproj: Ditto.
        * WebCoreSources.bkl: Ditto.
        * bindings/js/JSConsoleCustom.cpp: Added.
        (WebCore::JSConsole::error):
        (WebCore::JSConsole::info):
        (WebCore::JSConsole::log):
        (WebCore::JSConsole::warn):
        * page/Console.cpp: Changed all methods to take an ExecState* and a
        const List&. The first item in the List is toString()ed and passed to
        Chrome.
        (WebCore::Console::error):
        (WebCore::Console::info):
        (WebCore::Console::log):
        (WebCore::Console::warn):
        * page/Console.h:
        * page/Console.idl:


git-svn-id: http://svn.webkit.org/repository/webkit/trunk@31950 268f45cc-cd09-0410-ab3c-d52691b4dbfc
        Change calls to Chrome::addMessageToConsole to use Console::addMessage

        Part of Bug 17228: console.{log,warn,info,error} should support format
        strings, variable arguments
        <http://bugs.webkit.org/show_bug.cgi?id=17228>
        <rdar://problem/5732828>

        Console now takes care of calling ChromeClient::addMessageToConsole
        for the appropriate messages (i.e., just messages from JavaScript). If
        you ever want to add a message to the console, Console is the place to
        do it.

        Reviewed by Darin Adler.

        * WebCore.xcodeproj/project.pbxproj: Mark Console.h Private.
        * page/Chrome.cpp: Removed addMessageToConsole
        * page/Chrome.h: Moved MessageSource/MessageLevel to Console.h.
        * page/Console.cpp:
        (WebCore::Console::addMessage): Added. Calls
        ChromeClient::addMessageToConsole for JS messages, and calls
        InspectorController::addMessageToConsole for all messages.
        (WebCore::Console::error): Changed to call directly to
        InspectorController in addition to ChromeClient.
        (WebCore::Console::info): Ditto.
        (WebCore::Console::log): Ditto.
        (WebCore::Console::warn): Ditto.
        * page/Console.h: Added MessageSource/MessageLevel enums from Chrome.h.


git-svn-id: http://svn.webkit.org/repository/webkit/trunk@31951 268f45cc-cd09-0410-ab3c-d52691b4dbfc
        Pass all arguments to console.{log,warn,info,error} into the Inspector's JS

        Part of Bug 17228: console.{log,warn,info,error} should support format
        strings, variable arguments
        <http://bugs.webkit.org/show_bug.cgi?id=17228>
        <rdar://problem/5732828>

        We don't use the extra arguments yet.

        Reviewed by Tim Hatcher.

        * page/Console.cpp:
        (WebCore::Console::error): Pass the arguments list to
        InspectorController.
        (WebCore::Console::info): Ditto.
        (WebCore::Console::log): Ditto.
        (WebCore::Console::warn): Ditto.
        * page/InspectorController.cpp:
        (WebCore::ConsoleMessage::ConsoleMessage): Added a new constructor
        that takes an ExecState and a List instead of a String. We wrap and
        store the JSValues from the List in a Vector<ProtectedPtr<JSValue> >.
        (WebCore::InspectorController::addMessageToConsole): Added an overload
        that takes an ExecState and a List.
        (WebCore::InspectorController::addConsoleMessage): Moved code here
        from addMessageToConsole. Both overloads of addMessageToConsole now
        call this helper method.
        (WebCore::InspectorController::addScriptConsoleMessage): Updated for
        the new parameter order of WebInspector.ConsoleMessage. If the
        ConsoleMessage has a non-empty wrappedArguments Vector, we use that
        instead of the ConsoleMessage's message String.
        * page/InspectorController.h:
        * page/inspector/Console.js:
        (WebInspector.ConsoleMessage): Removed the explicit message parameter.
        We now get the message from the unnamed 5th parameter.
        * page/inspector/Resource.js: Updated for the change to
        WebInspector.ConsoleMessage's parameter order.


git-svn-id: http://svn.webkit.org/repository/webkit/trunk@31952 268f45cc-cd09-0410-ab3c-d52691b4dbfc
        Refactor String.vsprintf to separate tokenizing and substituting

        This will eventually be useful for the various console methods that
        take a format string.

        Reviewed by Tim Hatcher.

        * page/inspector/utilities.js:
        (String.tokenizeFormatString): Added. This uses the format parsing
        code from String.vsprintf but just returns an array of "string" and
        "specifier" tokens.
        (String.vsprintf): Now calls String.tokenizeFormatString and processes
        the tokens one at a time.


git-svn-id: http://svn.webkit.org/repository/webkit/trunk@31953 268f45cc-cd09-0410-ab3c-d52691b4dbfc
        Add String.format

        String.format is a more generic form of String.vsprintf that takes a
        set of formatter functions, one for each supported format specifier.
        Each formatter function is passed the relevant token and substitution
        value, and returns the formatted result.

        Reviewed by Tim Hatcher.

        * page/inspector/utilities.js:
        (String.standardFormatters): Added.
        (String.vsprintf): Changed to call through to String.format.
        (String.format): Added. Most of the code came from String.vsprintf,
        except that we use the passed-in formatters to format the
        substitutions rather than hard-coding how to handle each format
        specifier.


git-svn-id: http://svn.webkit.org/repository/webkit/trunk@31954 268f45cc-cd09-0410-ab3c-d52691b4dbfc
        Generalize String.format some more

        String.format now takes an initial value and an append function which
        it uses to build the result. Each time a token is processed,
        append(valueSoFar, newValue) is called.

        Reviewed by Tim Hatcher.

        * page/inspector/utilities.js:
        (String.vsprintf): Pass the empty string for the initial value, and
        a function that concatenates two strings as the append function.
        (String.format): Use initialValue and append to build the result
        instead of only working with strings.


git-svn-id: http://svn.webkit.org/repository/webkit/trunk@31955 268f45cc-cd09-0410-ab3c-d52691b4dbfc
        Make String.format return an array of unused substitutions

        String.format now returns an object with two properties:
        formattedResult and unusedSubstitutions.

        Reviewed by Tim Hatcher.

        * page/inspector/utilities.js:
        (String.vsprintf): Updated for changes to String.format. We throw away
        the array of unused substitutions.
        (String.format): Changed to keep track of which substitutions are used
        when formatting. We then return both the formatted result and the
        array of unused substitutions.


git-svn-id: http://svn.webkit.org/repository/webkit/trunk@31956 268f45cc-cd09-0410-ab3c-d52691b4dbfc
        Fix Bug 17228: console.{log,warn,info,error} should support format strings, variable arguments

        <https://bugs.webkit.org/show_bug.cgi?id=17228>
        <rdar://problem/5732828>

        Reviewed by Tim Hatcher.

        Test: manual-tests/inspector/console-log-formatting.html

        * page/inspector/Console.js:
        (WebInspector.ConsoleMessage): Pass any extra arguments down to
        _format.
        (WebInspector.ConsoleMessage._format): This method constructs
        this.formattedMessage. We treat the first parameter as a format
        string. Any parameters that have not been used after substituting into
        the format string are concatenated together, separated by spaces.
        (WebInspector.ConsoleMessage.toMessageElement): Updated to use
        this.formattedMessage.
        (WebInspector.ConsoleMessage.toString): Ditto.


git-svn-id: http://svn.webkit.org/repository/webkit/trunk@31957 268f45cc-cd09-0410-ab3c-d52691b4dbfc
2008-04-16  Anatoli Papirovski  <apapirovski@mac.com>

        Reviewed by David.

        Optimized the calculation of background-size.

        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::calculateBackgroundSize):



git-svn-id: http://svn.webkit.org/repository/webkit/trunk@31958 268f45cc-cd09-0410-ab3c-d52691b4dbfc
        Fix console-log-formatting to truly test formatting an undefined value

        Exceptions thrown by the test will also now be shown as errors.

        Reviewed by Tim Hatcher.

        * manual-tests/inspector/console-log-formatting.html:
        (test): Use console.error to report exceptions.
        (runTests): Use window.noSuchVariable instead of just noSuchVariable
        to avoid an exception.


git-svn-id: http://svn.webkit.org/repository/webkit/trunk@31959 268f45cc-cd09-0410-ab3c-d52691b4dbfc
2008-04-16  Steve Falkenburg  <sfalken@apple.com>

        Improve timer latency/resolution.
                
        The primary timing mechanism is now CreateTimerQueueTimer, with a PostMessage from
        the callback proc.  This event will be delivered sooner than if we used SetTimer(),
        since it is higher priority than other messages.
        
        If there is an input message pending, we'll use we SetTimer() based timers to avoid
        starving user input.

        Don't call PostMessage immediately on all timers < 10ms.  Only call immediately if
        timer is already expired.  This avoids the case where no timers would be processed,
        causing the timer to be re-posted via the slower SetTimer method.

        Don't call PostMessage immediately if there's a pending WM_PAINT, since
        we don't want to starve all paints when bombarded with a continuous stream of low
        duration timers.

        Removed reentrancy check, since we're now looking for specific starvation cases,
        and will typically defer non-expired timers through reateTimerQueueTimer.

        The reason Windows wouldn't starve paints in favor of timers with the old code:
        When we went to reset the timer when it fired, the timer reset code treated this as a
        reentrant timer, causing us to hit the slow SetTimer code rather than calling PostMessage,
        even for timers expiring in < 10ms. I corrected that, exposing the paint starvation problem.

        Use timeBeginPeriod/timeEndPeriod to improve resolution of system timers.
        Limit this resolution change to within 20ms of the last high resolution timer request.

        Corrected GetQueueStatus to check for specific input (and paint) messages rather than
        checking QS_ALLINPUT.  Contrary to its name, QS_ALLINPUT actually indicates interest
        in ALL queued messages, not just input messages.
        
        Fix SetTimer/KillTimer calls to pass our window handle.

        Reviewed by Brady.

        * platform/win/SharedTimerWin.cpp:
        (WebCore::):
        (WebCore::TimerWindowWndProc):
        (WebCore::queueTimerProc):
        (WebCore::setSharedTimerFireTime):
        (WebCore::stopSharedTimer):



git-svn-id: http://svn.webkit.org/repository/webkit/trunk@31960 268f45cc-cd09-0410-ab3c-d52691b4dbfc
2008-04-16  David Hyatt  <hyatt@apple.com>

        Eliminate the paintBuffer and drawImage(ImageBuffer*) methods from GraphicsContext* in favor of just
        snagging an Image* from the ImageBuffer and drawing that instead.

        Enhance canvas with a CanvasObserver so that notifications of dirtying or resizing can be tracked by
        a consumer.

        Reviewed by olliej

        * html/CanvasRenderingContext2D.cpp:
        (WebCore::CanvasRenderingContext2D::drawImage):
        * html/HTMLCanvasElement.cpp:
        (WebCore::HTMLCanvasElement::HTMLCanvasElement):
        (WebCore::HTMLCanvasElement::willDraw):
        (WebCore::HTMLCanvasElement::reset):
        (WebCore::HTMLCanvasElement::paint):
        * html/HTMLCanvasElement.h:
        (WebCore::CanvasObserver::~CanvasObserver):
        (WebCore::HTMLCanvasElement::setSize):
        (WebCore::HTMLCanvasElement::setObserver):
        * platform/graphics/GraphicsContext.cpp:
        (WebCore::GraphicsContext::drawImage):
        (WebCore::GraphicsContext::drawTiledImage):
        * platform/graphics/GraphicsContext.h:
        * platform/graphics/ImageBuffer.h:
        (WebCore::ImageBuffer::clearImage):
        * platform/graphics/cairo/GraphicsContextCairo.cpp:
        * platform/graphics/cg/GraphicsContextCG.cpp:
        * platform/graphics/cg/ImageCG.cpp:
        (WebCore::BitmapImage::draw):
        (WebCore::Image::drawPattern):
        * platform/graphics/cg/ImageSourceCG.cpp:
        (WebCore::ImageSource::createFrameAtIndex):
        * platform/graphics/qt/GraphicsContextQt.cpp:
        * platform/graphics/wx/GraphicsContextWx.cpp:



git-svn-id: http://svn.webkit.org/repository/webkit/trunk@31961 268f45cc-cd09-0410-ab3c-d52691b4dbfc
JavaScriptCore:

2008-04-16  Sam Weinig  <sam@webkit.org>

        Reviewed by Geoffrey Garen.

        - To keep the behavior of the WebKit and JavaScriptCore API's the same,
          we need to hide the fact that the global object and the window object
          are no longer the same thing, and the the global object now changes on
          navigations.  To do this, only the wrapper should ever be exposed.  This
          fixes the two remaining spots where the internal global object is exposed,
          the windowScriptObject returned from [WebFrame windowObject] and the object
          return by calling JSContextGetGlobalObject on [WebFrame globalContext].

        * API/JSContextRef.cpp:
        (JSContextGetGlobalObject):
        This is a bit of a hack, this returns the "this" representation of the globalObject
        which will be the WrapperWindow for WebCore and the globalObject for non-WebCore.

        * API/JSObjectRef.cpp:
        (JSObjectSetProperty):
        Call the new putWithAttributes method instead of relying on lower-level calls.
        This is needed so that the window wrapper can forward the calls.

        * JavaScriptCore.exp:
        * kjs/Activation.h:
        * kjs/JSGlobalObject.cpp:
        (KJS::JSGlobalObject::putWithAttributes):
        * kjs/JSGlobalObject.h:
        * kjs/JSVariableObject.h:
        (KJS::JSVariableObject::symbolTablePutWithAttributes):
        * kjs/function.cpp:
        (KJS::ActivationImp::putWithAttributes):
        * kjs/nodes.cpp:
        (KJS::ConstDeclNode::handleSlowCase):
        (KJS::ConstDeclNode::evaluateSingle):
        (KJS::EvalNode::processDeclarations):
        * kjs/object.cpp:
        (KJS::JSObject::putWithAttributes):
        * kjs/object.h:
        Rename initializeVariable to putWithAttributes and move it down to JSObject so it
        can be used for JSObjectSetProperty.

WebCore:

2008-04-16  Sam Weinig  <sam@webkit.org>

        Reviewed by Geoffrey Garen.

        - To keep the behavior of the WebKit and JavaScriptCore API's the same,
          we need to hide the fact that the global object and the window object
          are no longer the same thing, and the the global object now changes on
          navigations.  To do this, only the wrapper should ever be exposed.  This
          fixes the two remaining spots where the internal global object is exposed,
          the windowScriptObject returned from [WebFrame windowObject] and the object
          return by calling JSContextGetGlobalObject on [WebFrame globalContext]

        * bindings/js/JSDOMWindowWrapper.cpp:
        (WebCore::JSDOMWindowWrapper::putWithAttributes):
        * bindings/js/JSDOMWindowWrapper.h:
        Forward this new method so that JSObjectSetProperty doesn't set properties on the 
        wrapper.

        * page/mac/FrameMac.mm:
        (WebCore::Frame::windowScriptObject):
        Return the wrapper instead of the global object.



git-svn-id: http://svn.webkit.org/repository/webkit/trunk@31962 268f45cc-cd09-0410-ab3c-d52691b4dbfc
2008-04-16  Anders Carlsson  <andersca@apple.com>

        Reviewed by Adam.

        Generate the DOMApplicationCache JS wrapper, add JSDOMApplicationCacheCustom.cpp and 
        fix typos in the #if line.
        
        * DerivedSources.make:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * bindings/js/JSDOMApplicationCacheCustom.cpp: Added.
        * loader/appcache/ApplicationCache.cpp:
        * loader/appcache/ApplicationCache.h:
        * loader/appcache/ApplicationCacheGroup.cpp:
        * loader/appcache/ApplicationCacheGroup.h:
        * loader/appcache/ApplicationCacheResource.cpp:
        * loader/appcache/ApplicationCacheResource.h:
        * loader/appcache/DOMApplicationCache.cpp:
        * loader/appcache/DOMApplicationCache.h:
        * loader/appcache/DOMApplicationCache.idl:
        * loader/appcache/ManifestParser.cpp:
        * loader/appcache/ManifestParser.h:



git-svn-id: http://svn.webkit.org/repository/webkit/trunk@31963 268f45cc-cd09-0410-ab3c-d52691b4dbfc
WebCore:

2008-04-16  Antti Koivisto  <antti@apple.com>

        Reviewed by Alexey.
        
        Fix <rdar://problem/5863728>
        REGRESSION: Garbage character shown in temperatures in the Weather widget (encoding issue with degree symbol)
        
        Parse the encoding attribute in PreloadScanner.

        Test: fast/encoding/script-preload-encoding.html

        * html/PreloadScanner.cpp:
        (WebCore::PreloadScanner::processAttribute):
        (WebCore::PreloadScanner::emitTag):
        (WebCore::PreloadScanner::emitCSSRule):
        * html/PreloadScanner.h:
        * loader/DocLoader.cpp:
        (WebCore::DocLoader::preload):
        * loader/DocLoader.h:

LayoutTests:

2008-04-16  Antti Koivisto  <antti@apple.com>

        Reviewed by Alexey.
        
        Test for <rdar://problem/5863728>
        REGRESSION: Garbage character shown in temperatures in the Weather widget (encoding issue with degree symbol)

        * fast/encoding/resources/utf-8.css: Added.
        * fast/encoding/resources/utf-8.js: Added.
        * fast/encoding/preload-encoding-expected.txt: Added.
        * fast/encoding/preload-encoding.html: Added.



git-svn-id: http://svn.webkit.org/repository/webkit/trunk@31964 268f45cc-cd09-0410-ab3c-d52691b4dbfc
Refactors code that updates the errors and warnings count in the
resources sidebar so other functions can easily trigger updates.

Reviewed by Adam Roben.

* page/inspector/ResourcesPanel.js:
(WebInspector.ResourcesPanel.prototype.addMessageToResource): Call updateErrorsAndWarnings.
Removes code that updates the bubbleText and class names.
(WebInspector.ResourcesPanel.prototype.clearMessages): Ditto.
(WebInspector.ResourceSidebarTreeElement.prototype.updateErrorsAndWarnings):
Added. Updates the bubbleText and adds or removes the class names
depending on if the values are zero.


git-svn-id: http://svn.webkit.org/repository/webkit/trunk@31965 268f45cc-cd09-0410-ab3c-d52691b4dbfc
Adds a console formatter for Error objects. So typing a expression in the
console that ends in an exception will print meaningful info. Also calling
console.{log,error,warn,info} with an error object will output nicely.

Reviewed by Adam Roben.

* page/inspector/Console.js:
(WebInspector.Console.prototype._formaterror): Added. Formats an error
object by showing it like other exceptions, with a clickable file URL.


git-svn-id: http://svn.webkit.org/repository/webkit/trunk@31966 268f45cc-cd09-0410-ab3c-d52691b4dbfc