⚠ Archived content — this site is no longer maintained.   Current WebKit documentation is at docs.webkit.org.

Changeset 193620 in webkit


Ignore:
Timestamp:
Dec 7, 2015, 3:56:25 AM (11 years ago)
Author:
Carlos Garcia Campos
Message:

[GTK] Add WebKitWebPage::console-message-sent signal to Web Extensions API
​https://bugs.webkit.org/show_bug.cgi?id=79918

Reviewed by Gustavo Noronha Silva.

Source/WebKit2:

Add WebKitConsoleMessage boxed type that is passed to the
WebKitWebPage::console-message-sent signal with all the details
about the message.

  • PlatformGTK.cmake: Add new files to compilation.
  • UIProcess/API/gtk/docs/webkit2gtk-4.0-sections.txt: Add new symbols.
  • UIProcess/API/gtk/docs/webkit2gtk-4.0.types: Add webkit_console_message_get_type.
  • UIProcess/API/gtk/docs/webkit2gtk-docs.sgml: Add new section to the docs.
  • WebProcess/InjectedBundle/API/APIInjectedBundlePageUIClient.h:

(API::InjectedBundle::PageUIClient::willAddMessageToConsole): Add
paramaters for all console message details.

  • WebProcess/InjectedBundle/API/gtk/WebKitConsoleMessage.cpp: Added.

(webkit_console_message_copy):
(webkit_console_message_free):
(webkit_console_message_get_source):
(webkit_console_message_get_level):
(webkit_console_message_get_text):
(webkit_console_message_get_line):
(webkit_console_message_get_source_id):

  • WebProcess/InjectedBundle/API/gtk/WebKitConsoleMessage.h: Added.
  • WebProcess/InjectedBundle/API/gtk/WebKitConsoleMessagePrivate.h: Added.

(_WebKitConsoleMessage::_WebKitConsoleMessage):

  • WebProcess/InjectedBundle/API/gtk/WebKitWebPage.cpp:

(webkitWebPageDidSendConsoleMessage): Emit the
WebKitWebPage::console-message-sent signal.
(didReceiveResponseForResource): Generate a console message in
case of HTTP failure >= 400 for consistency with the inspector.
(didFailLoadForResource): Generate a console message in case of
resource load failure for consistency with the inspector.
(webkit_web_page_class_init): Add WebKitWebPage::console-message-sent signal.
(webkitWebPageCreate): Set custom UI client.

  • WebProcess/InjectedBundle/API/gtk/webkit-web-extension.h:
  • WebProcess/InjectedBundle/InjectedBundlePageUIClient.cpp:

(WebKit::InjectedBundlePageUIClient::willAddMessageToConsole):

  • WebProcess/InjectedBundle/InjectedBundlePageUIClient.h:
  • WebProcess/WebCoreSupport/WebChromeClient.cpp:

(WebKit::WebChromeClient::addMessageToConsole): Pass all the
console message details to the ui client.

Tools:

Add unit tests to check the different console messages.

  • TestWebKitAPI/Tests/WebKit2Gtk/CMakeLists.txt:
  • TestWebKitAPI/Tests/WebKit2Gtk/TestConsoleMessage.cpp: Added.

(ConsoleMessageTest::ConsoleMessage::operator==):
(ConsoleMessageTest::consoleMessageReceivedCallback):
(ConsoleMessageTest::ConsoleMessageTest):
(ConsoleMessageTest::~ConsoleMessageTest):
(ConsoleMessageTest::waitUntilConsoleMessageReceived):
(testWebKitConsoleMessageConsoleAPI):
(testWebKitConsoleMessageJavaScriptException):
(testWebKitConsoleMessageNetworkError):
(testWebKitConsoleMessageSecurityError):
(beforeAll):
(afterAll):

  • TestWebKitAPI/Tests/WebKit2Gtk/WebExtensionTest.cpp:

(consoleMessageSentCallback):
(pageCreatedCallback):

Location:
trunk
Files:
4 added
14 edited

Legend:

Unmodified
Added
Removed
  • trunk/Source/WebKit2/ChangeLog

    r193619 r193620  
     12015-12-07  Carlos Garcia Campos  <cgarcia@igalia.com>
     2
     3        [GTK] Add WebKitWebPage::console-message-sent signal to Web Extensions API
     4        https://bugs.webkit.org/show_bug.cgi?id=79918
     5
     6        Reviewed by Gustavo Noronha Silva.
     7
     8        Add WebKitConsoleMessage boxed type that is passed to the
     9        WebKitWebPage::console-message-sent signal with all the details
     10        about the message.
     11
     12        * PlatformGTK.cmake: Add new files to compilation.
     13        * UIProcess/API/gtk/docs/webkit2gtk-4.0-sections.txt: Add new symbols.
     14        * UIProcess/API/gtk/docs/webkit2gtk-4.0.types: Add webkit_console_message_get_type.
     15        * UIProcess/API/gtk/docs/webkit2gtk-docs.sgml: Add new section to the docs.
     16        * WebProcess/InjectedBundle/API/APIInjectedBundlePageUIClient.h:
     17        (API::InjectedBundle::PageUIClient::willAddMessageToConsole): Add
     18        paramaters for all console message details.
     19        * WebProcess/InjectedBundle/API/gtk/WebKitConsoleMessage.cpp: Added.
     20        (webkit_console_message_copy):
     21        (webkit_console_message_free):
     22        (webkit_console_message_get_source):
     23        (webkit_console_message_get_level):
     24        (webkit_console_message_get_text):
     25        (webkit_console_message_get_line):
     26        (webkit_console_message_get_source_id):
     27        * WebProcess/InjectedBundle/API/gtk/WebKitConsoleMessage.h: Added.
     28        * WebProcess/InjectedBundle/API/gtk/WebKitConsoleMessagePrivate.h: Added.
     29        (_WebKitConsoleMessage::_WebKitConsoleMessage):
     30        * WebProcess/InjectedBundle/API/gtk/WebKitWebPage.cpp:
     31        (webkitWebPageDidSendConsoleMessage): Emit the
     32        WebKitWebPage::console-message-sent signal.
     33        (didReceiveResponseForResource): Generate a console message in
     34        case of HTTP failure >= 400 for consistency with the inspector.
     35        (didFailLoadForResource): Generate a console message in case of
     36        resource load failure for consistency with the inspector.
     37        (webkit_web_page_class_init): Add WebKitWebPage::console-message-sent signal.
     38        (webkitWebPageCreate): Set custom UI client.
     39        * WebProcess/InjectedBundle/API/gtk/webkit-web-extension.h:
     40        * WebProcess/InjectedBundle/InjectedBundlePageUIClient.cpp:
     41        (WebKit::InjectedBundlePageUIClient::willAddMessageToConsole):
     42        * WebProcess/InjectedBundle/InjectedBundlePageUIClient.h:
     43        * WebProcess/WebCoreSupport/WebChromeClient.cpp:
     44        (WebKit::WebChromeClient::addMessageToConsole): Pass all the
     45        console message details to the ui client.
     46
    1472015-12-07  Ryuan Choi  <ryuan.choi@navercorp.com>
    248
  • trunk/Source/WebKit2/PlatformGTK.cmake

    r192875 r193620  
    324324    WebProcess/Cookies/soup/WebKitSoupCookieJarSqlite.cpp
    325325
     326    WebProcess/InjectedBundle/API/gtk/WebKitConsoleMessage.cpp
    326327    WebProcess/InjectedBundle/API/gtk/WebKitFrame.cpp
    327328    WebProcess/InjectedBundle/API/gtk/WebKitScriptWorld.cpp
    … …  
    434435
    435436set(WebKit2WebExtension_INSTALLED_HEADERS
     437    ${WEBKIT2_DIR}/WebProcess/InjectedBundle/API/gtk/WebKitConsoleMessage.h
    436438    ${WEBKIT2_DIR}/WebProcess/InjectedBundle/API/gtk/WebKitFrame.h
    437439    ${WEBKIT2_DIR}/WebProcess/InjectedBundle/API/gtk/WebKitScriptWorld.h
  • trunk/Source/WebKit2/UIProcess/API/gtk/docs/webkit2gtk-4.0-sections.txt

    r188121 r193620  
    13451345
    13461346<SECTION>
     1347<FILE>WebKitConsoleMessage</FILE>
     1348WebKitConsoleMessage
     1349WebKitConsoleMessageSource
     1350WebKitConsoleMessageLevel
     1351webkit_console_message_copy
     1352webkit_console_message_free
     1353webkit_console_message_get_source
     1354webkit_console_message_get_level
     1355webkit_console_message_get_text
     1356webkit_console_message_get_line
     1357webkit_console_message_get_source_id
     1358
     1359<SUBSECTION Standard>
     1360WEBKIT_TYPE_CONSOLE_MESSAGE
     1361
     1362<SUBSECTION Private>
     1363webkit_console_message_get_type
     1364</SECTION>
     1365
     1366<SECTION>
    13471367<FILE>WebKitColorChooserRequest</FILE>
    13481368WebKitColorChooserRequest
  • trunk/Source/WebKit2/UIProcess/API/gtk/docs/webkit2gtk-4.0.types

    r188121 r193620  
    3333webkit_editor_state_get_type
    3434webkit_install_missing_media_plugins_permission_request_get_type
     35webkit_console_message_get_type
  • trunk/Source/WebKit2/UIProcess/API/gtk/docs/webkit2gtk-docs.sgml

    r188121 r193620  
    6363    <xi:include href="xml/WebKitWebHitTestResult.xml"/>
    6464    <xi:include href="xml/WebKitWebEditor.xml"/>
     65    <xi:include href="xml/WebKitConsoleMessage"/>
    6566  </chapter>
    6667
    … …  
    99100  </index>
    100101
     102  <index id="api-index-2-12" role="2.12">
     103    <title>Index of new symbols in 2.12</title>
     104    <xi:include href="xml/api-index-2.12.xml"><xi:fallback /></xi:include>
     105  </index>
     106
    101107  <xi:include href="xml/annotation-glossary.xml"><xi:fallback /></xi:include>
    102108</book>
  • trunk/Source/WebKit2/WebProcess/InjectedBundle/API/APIInjectedBundlePageUIClient.h

    r191323 r193620  
    2828
    2929#include "WebEvent.h"
     30#include <runtime/ConsoleTypes.h>
    3031
    3132namespace WebCore {
    … …  
    5051    virtual ~PageUIClient() { }
    5152
    52     virtual void willAddMessageToConsole(WebKit::WebPage*, const WTF::String& message, int32_t lineNumber) { UNUSED_PARAM(message); UNUSED_PARAM(lineNumber); }
     53    virtual void willAddMessageToConsole(WebKit::WebPage*, JSC::MessageSource, JSC::MessageLevel, const WTF::String& message, unsigned lineNumber, unsigned columnNumber, const WTF::String& sourceID) { UNUSED_PARAM(message); UNUSED_PARAM(lineNumber); UNUSED_PARAM(columnNumber); UNUSED_PARAM(sourceID); }
    5354    virtual void willSetStatusbarText(WebKit::WebPage*, const WTF::String&) { }
    5455    virtual void willRunJavaScriptAlert(WebKit::WebPage*, const WTF::String&, WebKit::WebFrame*) { }
  • trunk/Source/WebKit2/WebProcess/InjectedBundle/API/gtk/WebKitWebPage.cpp

    r192247 r193620  
    2929#include "WebContextMenuItem.h"
    3030#include "WebImage.h"
     31#include "WebKitConsoleMessagePrivate.h"
    3132#include "WebKitContextMenuPrivate.h"
    3233#include "WebKitDOMDocumentPrivate.h"
    … …  
    5051#include <wtf/NeverDestroyed.h>
    5152#include <wtf/text/CString.h>
     53#include <wtf/text/StringBuilder.h>
    5254
    5355using namespace WebKit;
    … …  
    5860    SEND_REQUEST,
    5961    CONTEXT_MENU,
     62    CONSOLE_MESSAGE_SENT,
    6063
    6164    LAST_SIGNAL
    … …  
    143146    webPage->priv->uri = uri;
    144147    g_object_notify(G_OBJECT(webPage), "uri");
     148}
     149
     150static void webkitWebPageDidSendConsoleMessage(WebKitWebPage* webPage, MessageSource source, MessageLevel level, const String& message, unsigned lineNumber, const String& sourceID)
     151{
     152    WebKitConsoleMessage consoleMessage(source, level, message, lineNumber, sourceID);
     153    g_signal_emit(webPage, signals[CONSOLE_MESSAGE_SENT], 0, &consoleMessage);
    145154}
    146155
    … …  
    220229}
    221230
    222 static void didReceiveResponseForResource(WKBundlePageRef page, WKBundleFrameRef, uint64_t identifier, WKURLResponseRef response, const void*)
     231static void didReceiveResponseForResource(WKBundlePageRef page, WKBundleFrameRef, uint64_t identifier, WKURLResponseRef response, const void* clientInfo)
    223232{
    224233    API::Dictionary::MapType message;
    … …  
    227236    message.set(String::fromUTF8("Response"), toImpl(response));
    228237    WebProcess::singleton().injectedBundle()->postMessage(String::fromUTF8("WebPage.DidReceiveResponseForResource"), API::Dictionary::create(WTF::move(message)).ptr());
     238
     239    // Post on the console as well to be consistent with the inspector.
     240    const ResourceResponse& resourceResponse = toImpl(response)->resourceResponse();
     241    if (resourceResponse.httpStatusCode() >= 400) {
     242        StringBuilder errorMessage;
     243        errorMessage.appendLiteral("Failed to load resource: the server responded with a status of ");
     244        errorMessage.appendNumber(resourceResponse.httpStatusCode());
     245        errorMessage.appendLiteral(" (");
     246        errorMessage.append(resourceResponse.httpStatusText());
     247        errorMessage.append(')');
     248        webkitWebPageDidSendConsoleMessage(WEBKIT_WEB_PAGE(clientInfo), MessageSource::Network, MessageLevel::Error, errorMessage.toString(), 0, resourceResponse.url().string());
     249    }
    229250}
    230251
    … …  
    246267}
    247268
    248 static void didFailLoadForResource(WKBundlePageRef page, WKBundleFrameRef, uint64_t identifier, WKErrorRef error, const void*)
     269static void didFailLoadForResource(WKBundlePageRef page, WKBundleFrameRef, uint64_t identifier, WKErrorRef error, const void* clientInfo)
    249270{
    250271    API::Dictionary::MapType message;
    … …  
    253274    message.set(String::fromUTF8("Error"), toImpl(error));
    254275    WebProcess::singleton().injectedBundle()->postMessage(String::fromUTF8("WebPage.DidFailLoadForResource"), API::Dictionary::create(WTF::move(message)).ptr());
     276
     277    // Post on the console as well to be consistent with the inspector.
     278    const ResourceError& resourceError = toImpl(error)->platformError();
     279    if (!resourceError.isCancellation()) {
     280        StringBuilder errorMessage;
     281        errorMessage.appendLiteral("Failed to load resource");
     282        if (!resourceError.localizedDescription().isEmpty()) {
     283            errorMessage.appendLiteral(": ");
     284            errorMessage.append(resourceError.localizedDescription());
     285        }
     286        webkitWebPageDidSendConsoleMessage(WEBKIT_WEB_PAGE(clientInfo), MessageSource::Network, MessageLevel::Error, errorMessage.toString(), 0, resourceError.failingURL());
     287    }
    255288}
    256289
    … …  
    279312        webkitContextMenuPopulate(contextMenu.get(), newMenu);
    280313        return true;
     314    }
     315
     316    WebKitWebPage* m_webPage;
     317};
     318
     319class PageUIClient final : public API::InjectedBundle::PageUIClient {
     320public:
     321    explicit PageUIClient(WebKitWebPage* webPage)
     322        : m_webPage(webPage)
     323    {
     324    }
     325
     326private:
     327    void willAddMessageToConsole(WebPage*, MessageSource source, MessageLevel level, const String& message, unsigned lineNumber, unsigned /*columnNumber*/, const String& sourceID) override
     328    {
     329        webkitWebPageDidSendConsoleMessage(m_webPage, source, level, message, lineNumber, sourceID);
    281330    }
    282331
    … …  
    396445        WEBKIT_TYPE_CONTEXT_MENU,
    397446        WEBKIT_TYPE_WEB_HIT_TEST_RESULT);
     447
     448    /**
     449     * WebKitWebPage::console-message-sent:
     450     * @web_page: the #WebKitWebPage on which the signal is emitted
     451     * @console_message: the #WebKitConsoleMessage
     452     *
     453     * Emmited when a message is sent to the console. This can be a message
     454     * produced by the use of JavaScript console API, a javascript exception,
     455     * a security error or other errors, warnings, debug or log messages.
     456     * The @console_message contains information of the message.
     457     *
     458     * Since: 2.12
     459     */
     460    signals[CONSOLE_MESSAGE_SENT] = g_signal_new(
     461        "console-message-sent",
     462        G_TYPE_FROM_CLASS(klass),
     463        G_SIGNAL_RUN_LAST,
     464        0, 0, nullptr,
     465        g_cclosure_marshal_VOID__BOXED,
     466        G_TYPE_NONE, 1,
     467        WEBKIT_TYPE_CONSOLE_MESSAGE | G_SIGNAL_TYPE_STATIC_SCOPE);
    398468}
    399469
    … …  
    467537
    468538    webPage->setInjectedBundleContextMenuClient(std::make_unique<PageContextMenuClient>(page));
     539    webPage->setInjectedBundleUIClient(std::make_unique<PageUIClient>(page));
    469540
    470541    return page;
  • trunk/Source/WebKit2/WebProcess/InjectedBundle/API/gtk/webkit-web-extension.h

    r190660 r193620  
    2727#define __WEBKIT_WEB_EXTENSION_H_INSIDE__
    2828
     29#include <webkit2/WebKitConsoleMessage.h>
    2930#include <webkit2/WebKitContextMenu.h>
    3031#include <webkit2/WebKitContextMenuActions.h>
  • trunk/Source/WebKit2/WebProcess/InjectedBundle/InjectedBundlePageUIClient.cpp

    r191323 r193620  
    4545}
    4646
    47 void InjectedBundlePageUIClient::willAddMessageToConsole(WebPage* page, const String& message, int32_t lineNumber)
     47void InjectedBundlePageUIClient::willAddMessageToConsole(WebPage* page, MessageSource, MessageLevel, const String& message, unsigned lineNumber, unsigned /*columnNumber*/, const String& /*sourceID*/)
    4848{
    4949    if (m_client.willAddMessageToConsole)
  • trunk/Source/WebKit2/WebProcess/InjectedBundle/InjectedBundlePageUIClient.h

    r191323 r193620  
    4848    explicit InjectedBundlePageUIClient(const WKBundlePageUIClientBase*);
    4949
    50     void willAddMessageToConsole(WebPage*, const String& message, int32_t lineNumber) override;
     50    void willAddMessageToConsole(WebPage*, MessageSource, MessageLevel, const String& message, unsigned lineNumber, unsigned columnNumber, const String& sourceID) override;
    5151    void willSetStatusbarText(WebPage*, const String&) override;
    5252    void willRunJavaScriptAlert(WebPage*, const String&, WebFrame*) override;
  • trunk/Source/WebKit2/WebProcess/WebCoreSupport/WebChromeClient.cpp

    r192200 r193620  
    320320}
    321321
    322 void WebChromeClient::addMessageToConsole(MessageSource, MessageLevel, const String& message, unsigned lineNumber, unsigned /*columnNumber*/, const String& /*sourceID*/)
     322void WebChromeClient::addMessageToConsole(MessageSource source, MessageLevel level, const String& message, unsigned lineNumber, unsigned columnNumber, const String& sourceID)
    323323{
    324324    // Notify the bundle client.
    325     m_page->injectedBundleUIClient().willAddMessageToConsole(m_page, message, lineNumber);
    326 
    327     notImplemented();
     325    m_page->injectedBundleUIClient().willAddMessageToConsole(m_page, source, level, message, lineNumber, columnNumber, sourceID);
    328326}
    329327
  • trunk/Tools/ChangeLog

    r193619 r193620  
     12015-12-07  Carlos Garcia Campos  <cgarcia@igalia.com>
     2
     3        [GTK] Add WebKitWebPage::console-message-sent signal to Web Extensions API
     4        https://bugs.webkit.org/show_bug.cgi?id=79918
     5
     6        Reviewed by Gustavo Noronha Silva.
     7
     8        Add unit tests to check the different console messages.
     9
     10        * TestWebKitAPI/Tests/WebKit2Gtk/CMakeLists.txt:
     11        * TestWebKitAPI/Tests/WebKit2Gtk/TestConsoleMessage.cpp: Added.
     12        (ConsoleMessageTest::ConsoleMessage::operator==):
     13        (ConsoleMessageTest::consoleMessageReceivedCallback):
     14        (ConsoleMessageTest::ConsoleMessageTest):
     15        (ConsoleMessageTest::~ConsoleMessageTest):
     16        (ConsoleMessageTest::waitUntilConsoleMessageReceived):
     17        (testWebKitConsoleMessageConsoleAPI):
     18        (testWebKitConsoleMessageJavaScriptException):
     19        (testWebKitConsoleMessageNetworkError):
     20        (testWebKitConsoleMessageSecurityError):
     21        (beforeAll):
     22        (afterAll):
     23        * TestWebKitAPI/Tests/WebKit2Gtk/WebExtensionTest.cpp:
     24        (consoleMessageSentCallback):
     25        (pageCreatedCallback):
     26
    1272015-12-07  Ryuan Choi  <ryuan.choi@navercorp.com>
    228
  • trunk/Tools/TestWebKitAPI/Tests/WebKit2Gtk/CMakeLists.txt

    r193617 r193620  
    128128ADD_WK2_TEST(TestWebKitUserContentManager TestWebKitUserContentManager.cpp)
    129129ADD_WK2_TEST(TestEditor TestEditor.cpp)
     130ADD_WK2_TEST(TestConsoleMessage TestConsoleMessage.cpp)
    130131
    131132if (ATSPI_FOUND)
  • trunk/Tools/TestWebKitAPI/Tests/WebKit2Gtk/WebExtensionTest.cpp

    r188121 r193620  
    227227}
    228228
     229static void consoleMessageSentCallback(WebKitWebPage* webPage, WebKitConsoleMessage* consoleMessage)
     230{
     231    g_assert(consoleMessage);
     232    GRefPtr<GVariant> variant = g_variant_new("(uusus)", webkit_console_message_get_source(consoleMessage),
     233        webkit_console_message_get_level(consoleMessage), webkit_console_message_get_text(consoleMessage),
     234        webkit_console_message_get_line(consoleMessage), webkit_console_message_get_source_id(consoleMessage));
     235    GUniquePtr<char> messageString(g_variant_print(variant.get(), FALSE));
     236    GRefPtr<WebKitDOMDOMWindow> window = adoptGRef(webkit_dom_document_get_default_view(webkit_web_page_get_dom_document(webPage)));
     237    g_assert(WEBKIT_DOM_IS_DOM_WINDOW(window.get()));
     238    webkit_dom_dom_window_webkit_message_handlers_post_message(window.get(), "console", messageString.get());
     239}
     240
    229241static void pageCreatedCallback(WebKitWebExtension* extension, WebKitWebPage* webPage, gpointer)
    230242{
    … …  
    233245    g_signal_connect(webPage, "send-request", G_CALLBACK(sendRequestCallback), nullptr);
    234246    g_signal_connect(webPage, "context-menu", G_CALLBACK(contextMenuCallback), nullptr);
     247    g_signal_connect(webPage, "console-message-sent", G_CALLBACK(consoleMessageSentCallback), nullptr);
    235248}
    236249
Note: See TracChangeset for help on using the changeset viewer.