summaryrefslogtreecommitdiffstats
path: root/webkit/port/page
diff options
context:
space:
mode:
authordglazkov@google.com <dglazkov@google.com@0039d316-1c4b-4281-b951-d872f2087c98>2008-10-17 17:41:46 +0000
committerdglazkov@google.com <dglazkov@google.com@0039d316-1c4b-4281-b951-d872f2087c98>2008-10-17 17:41:46 +0000
commitd68e3ff53b0ff114e7e7f2035f345e76c6017567 (patch)
treec37e1e0e885dbca7496d3e64f99b705126c0828e /webkit/port/page
parentbc410f64b906bf3a5ca7721d73b3632fcccaeae2 (diff)
downloadchromium_src-d68e3ff53b0ff114e7e7f2035f345e76c6017567.zip
chromium_src-d68e3ff53b0ff114e7e7f2035f345e76c6017567.tar.gz
chromium_src-d68e3ff53b0ff114e7e7f2035f345e76c6017567.tar.bz2
Implement ScriptCallContext (3/2)This is an improved (and working!) revision of http://codereview.chromium.org/7453/For Mac and Linux build guys, here's the rundown:A webkit/port/bindings/v8/ScriptCallContextV8.cppA third_party/WebKit/WebCore/bindings/js/ScriptCallContext.cpp -- this one is for KJS build onlyA third_party/WebKit/WebCore/page/ScriptCallContext.h
Review URL: http://codereview.chromium.org/7480 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@3538 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'webkit/port/page')
-rw-r--r--webkit/port/page/Console.cpp162
-rw-r--r--webkit/port/page/inspector/Console.js2
-rw-r--r--webkit/port/page/inspector/InspectorController.cpp56
3 files changed, 57 insertions, 163 deletions
diff --git a/webkit/port/page/Console.cpp b/webkit/port/page/Console.cpp
deleted file mode 100644
index 66b53cd..0000000
--- a/webkit/port/page/Console.cpp
+++ /dev/null
@@ -1,162 +0,0 @@
-/*
- * Copyright (C) 2007 Apple Inc. All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- * 3. Neither the name of Apple Computer, Inc. ("Apple") nor the names of
- * its contributors may be used to endorse or promote products derived
- * from this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY APPLE AND ITS CONTRIBUTORS "AS IS" AND ANY
- * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
- * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED. IN NO EVENT SHALL APPLE OR ITS CONTRIBUTORS BE LIABLE FOR ANY
- * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
- * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
- * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-#include "config.h"
-#include "Console.h"
-
-#include "ChromeClient.h"
-#include "Frame.h"
-#include "FrameLoader.h"
-#include "InspectorController.h"
-#include "NotImplemented.h"
-#include "Page.h"
-
-namespace WebCore {
-
-Console::Console(Frame* frame)
- : m_frame(frame)
-{
-}
-
-void Console::disconnectFrame()
-{
- m_frame = 0;
-}
-
-void Console::debug(const String& message)
-{
- // In Firebug, console.debug has the same behavior as console.log. So we'll
- // do the same.
- log(message);
-}
-
-void Console::error(const String& message)
-{
- // TODO(erg): For all of these methods which call addMessageToConsole(), we
- // always assume the line number of the console.error(...) was called on
- // line 0. To fix this, we need to modify the V8 version of the Console
- // interface to also pass in the current line number, which will be hard
- // since it looks like that information isn't publicly accessible with the
- // current v8 interface. <http://crbug.com/2960>
- //
- // This will fix this currently broken test:
- // LayoutTests/fast/dom/Window/console-functions.html
-
- if (!m_frame)
- return;
-
- Page* page = m_frame->page();
- if (!page)
- return;
-
- const KURL& url = m_frame->loader()->url();
- String prettyURL = url.prettyURL();
-
- page->chrome()->client()->addMessageToConsole(message, 0, prettyURL);
- page->inspectorController()->addMessageToConsole(JSMessageSource, ErrorMessageLevel, message, 0, url.string());
-}
-
-void Console::info(const String& message)
-{
- if (!m_frame)
- return;
-
- Page* page = m_frame->page();
- if (!page)
- return;
-
- const KURL& url = m_frame->loader()->url();
- String prettyURL = url.prettyURL();
-
- page->chrome()->client()->addMessageToConsole(message, 0, prettyURL);
- page->inspectorController()->addMessageToConsole(JSMessageSource, LogMessageLevel, message, 0, url.string());
-}
-
-void Console::log(const String& message)
-{
- if (!m_frame)
- return;
-
- Page* page = m_frame->page();
- if (!page)
- return;
-
- const KURL& url = m_frame->loader()->url();
- String prettyURL = url.prettyURL();
-
- page->chrome()->client()->addMessageToConsole(message, 0, prettyURL);
- page->inspectorController()->addMessageToConsole(JSMessageSource, LogMessageLevel, message, 0, url.string());
-}
-
-void Console::warn(const String& message)
-{
- if (!m_frame)
- return;
-
- Page* page = m_frame->page();
- if (!page)
- return;
-
- const KURL& url = m_frame->loader()->url();
- String prettyURL = url.prettyURL();
-
- page->chrome()->client()->addMessageToConsole(message, 0, prettyURL);
- page->inspectorController()->addMessageToConsole(JSMessageSource, WarningMessageLevel, message, 0, url.string());
-}
-
-void Console::addMessage(MessageSource source, MessageLevel level, const String& message, unsigned lineNumber, const String& sourceURL)
-{
- Page* page = this->page();
- if (!page)
- return;
-
- if (source == JSMessageSource)
- page->chrome()->client()->addMessageToConsole(message, lineNumber, sourceURL);
-
- page->inspectorController()->addMessageToConsole(source, level, message, lineNumber, sourceURL);
-}
-
-void Console::time(const String& title)
-{
- notImplemented();
-}
-
-void Console::groupEnd()
-{
- notImplemented();
-}
-
-Page* Console::page() const
-{
- if (!m_frame)
- return 0;
-
- return m_frame->page();
-}
-
-} // namespace WebCore
diff --git a/webkit/port/page/inspector/Console.js b/webkit/port/page/inspector/Console.js
index 1292531..18e3537 100644
--- a/webkit/port/page/inspector/Console.js
+++ b/webkit/port/page/inspector/Console.js
@@ -494,7 +494,7 @@ WebInspector.ConsoleMessage.prototype = {
function formatForConsole(obj)
{
- return WebInspector.console._format(obj, plainText);
+ return WebInspector.console._format(obj, plaintext);
}
if (Object.type(parameters[0], InspectorController.inspectedWindow()) === "string") {
diff --git a/webkit/port/page/inspector/InspectorController.cpp b/webkit/port/page/inspector/InspectorController.cpp
index 7aa0a44..ede3b0b 100644
--- a/webkit/port/page/inspector/InspectorController.cpp
+++ b/webkit/port/page/inspector/InspectorController.cpp
@@ -66,6 +66,7 @@
#include "Range.h"
#include "ResourceRequest.h"
#include "ResourceResponse.h"
+#include "ScriptCallContext.h"
#include "ScriptController.h"
#include "Settings.h"
#include "SharedBuffer.h"
@@ -129,9 +130,39 @@ struct ConsoleMessage {
, groupLevel(g)
{
}
+
+ ConsoleMessage(MessageSource s, MessageLevel l, ScriptCallContext* context, unsigned g)
+ : source(s)
+ , level(l)
+#if USE(JSC)
+ , wrappedArguments(args.size())
+#endif
+ , line(context->lineNumber())
+ , url(context->sourceURL())
+ , groupLevel(g)
+ {
+#if USE(JSC)
+ JSLock lock(false);
+ for (unsigned i = 0; i < context->argumentCount(); ++i)
+ wrappedArguments[i] = JSInspectedObjectWrapper::wrap(context->argumentAt(i));
+#elif USE(V8)
+ // FIXME: This is not correct. The objects are being converted to
+ // string and appended to one big message. But it's better than only
+ // supporting one string argument that we had previously.
+ for (unsigned i = 0; i < context->argumentCount(); ++i) {
+ if (i)
+ message.append(", ");
+ message.append(context->argumentStringAt(i));
+ }
+#endif
+ }
+
MessageSource source;
MessageLevel level;
String message;
+#if USE(JSC)
+ Vector<ProtectedPtr<JSValue> > wrappedArguments;
+#endif
unsigned line;
String url;
unsigned groupLevel;
@@ -752,6 +783,14 @@ void InspectorController::enableTrackResources(bool trackResources)
m_resources.clear();
}
+void InspectorController::addMessageToConsole(MessageSource source, MessageLevel level, ScriptCallContext* context)
+{
+ if (!enabled())
+ return;
+
+ addConsoleMessage(new ConsoleMessage(source, level, context, m_groupLevel));
+}
+
void InspectorController::addMessageToConsole(MessageSource source, MessageLevel level, const String& message, unsigned lineNumber, const String& sourceID)
{
if (!enabled())
@@ -789,6 +828,23 @@ void InspectorController::clearConsoleMessages()
m_consoleMessages.clear();
}
+void InspectorController::startGroup(MessageSource source, ScriptCallContext* context)
+{
+ ++m_groupLevel;
+
+ addConsoleMessage(new ConsoleMessage(source, StartGroupMessageLevel, context, m_groupLevel));
+}
+
+void InspectorController::endGroup(MessageSource source, unsigned lineNumber, const String& sourceURL)
+{
+ if (m_groupLevel == 0)
+ return;
+
+ --m_groupLevel;
+
+ addConsoleMessage(new ConsoleMessage(source, EndGroupMessageLevel, String(), lineNumber, sourceURL, m_groupLevel));
+}
+
void InspectorController::attachWindow()
{
if (!enabled())