Changeset 149923 in webkit


Ignore:
Timestamp:
May 10, 2013 10:03:10 PM (11 years ago)
Author:
commit-queue@webkit.org
Message:

Web Inspector: Implement WK2 version of WebInspectorFrontendClient::save
https://bugs.webkit.org/show_bug.cgi?id=115564

Patch by Brian J. Burg <Brian Burg> on 2013-05-10
Reviewed by Benjamin Poulain.

Source/WebKit/mac:

Clean up save() and append() implementations.

  • WebCoreSupport/WebInspectorClient.h:
  • WebCoreSupport/WebInspectorClient.mm:

(WebInspectorFrontendClient::save):
(WebInspectorFrontendClient::append):

Source/WebKit2:

Implement InspectorFrontendHost's save() and append() methods for
Mac WebKit2. Add canSave() for all ports.

  • UIProcess/WebInspectorProxy.cpp:

(WebKit::WebInspectorProxy::save):
(WebKit):
(WebKit::WebInspectorProxy::append):

  • UIProcess/WebInspectorProxy.h:

(WebInspectorProxy):

  • UIProcess/WebInspectorProxy.messages.in:
  • UIProcess/efl/WebInspectorProxyEfl.cpp:

(WebKit::WebInspectorProxy::platformSave):
(WebKit):
(WebKit::WebInspectorProxy::platformAppend):

  • UIProcess/gtk/WebInspectorProxyGtk.cpp:

(WebKit::WebInspectorProxy::platformSave):
(WebKit):
(WebKit::WebInspectorProxy::platformAppend):

  • UIProcess/mac/WebInspectorProxyMac.mm:

(WebKit::WebInspectorProxy::platformSave):
(WebKit):
(WebKit::WebInspectorProxy::platformAppend):

  • UIProcess/qt/WebInspectorProxyQt.cpp:

(WebKit::WebInspectorProxy::platformSave):
(WebKit):
(WebKit::WebInspectorProxy::platformAppend):

  • WebProcess/WebCoreSupport/WebInspectorFrontendClient.cpp:

(WebKit::WebInspectorFrontendClient::canSave):
(WebKit):
(WebKit::WebInspectorFrontendClient::save):
(WebKit::WebInspectorFrontendClient::append):

  • WebProcess/WebCoreSupport/WebInspectorFrontendClient.h:

(WebInspectorFrontendClient):

  • WebProcess/WebPage/WebInspector.cpp:

(WebKit::WebInspector::save):
(WebKit):
(WebKit::WebInspector::append):
(WebKit::WebInspector::didSave):
(WebKit::WebInspector::didAppend):

  • WebProcess/WebPage/WebInspector.h:

(WebInspector):

  • WebProcess/WebPage/WebInspector.messages.in:
  • WebProcess/WebPage/efl/WebInspectorEfl.cpp:

(WebKit::WebInspector::canSave):
(WebKit):

  • WebProcess/WebPage/gtk/WebInspectorGtk.cpp:

(WebKit::WebInspector::canSave):
(WebKit):

  • WebProcess/WebPage/mac/WebInspectorMac.mm:

(WebKit::WebInspector::canSave):
(WebKit):

  • WebProcess/WebPage/qt/WebInspectorQt.cpp:

(WebKit::WebInspector::canSave):
(WebKit):

Location:
trunk/Source
Files:
20 edited

Legend:

Unmodified
Added
Removed
  • trunk/Source/WebKit/mac/ChangeLog

    r149922 r149923  
     12013-05-10  Brian J. Burg  <burg@cs.washington.edu>
     2
     3        Web Inspector: Implement WK2 version of WebInspectorFrontendClient::save
     4        https://bugs.webkit.org/show_bug.cgi?id=115564
     5
     6        Reviewed by Benjamin Poulain.
     7
     8        Clean up save() and append() implementations.
     9
     10        * WebCoreSupport/WebInspectorClient.h:
     11        * WebCoreSupport/WebInspectorClient.mm:
     12        (WebInspectorFrontendClient::save):
     13        (WebInspectorFrontendClient::append):
     14
    1152013-05-10  Laszlo Gombos  <l.gombos@samsung.com>
    216
  • trunk/Source/WebKit/mac/WebCoreSupport/WebInspectorClient.h

    r147482 r149923  
    124124    RetainPtr<WebInspectorWindowController> m_windowController;
    125125    String m_inspectedURL;
    126     HashMap<String, RetainPtr<NSURL>> m_saveURLs;
     126    HashMap<String, RetainPtr<NSURL>> m_suggestedToActualURLMap;
    127127};
  • trunk/Source/WebKit/mac/WebCoreSupport/WebInspectorClient.mm

    r149255 r149923  
    299299}
    300300
    301 void WebInspectorFrontendClient::save(const String& refURL, const String& refContent, bool forceSaveAs)
    302 {
    303     String url = refURL;
    304     String content = refContent;
    305     auto saveToURL = ^(NSURL *URL) {
    306         m_saveURLs.set(url, URL);
    307 
    308         [content writeToURL:URL atomically:YES encoding:NSUTF8StringEncoding error:NULL];
    309         core([m_windowController webView])->mainFrame()->script()->executeScript([NSString stringWithFormat:@"InspectorFrontendAPI.savedURL(\"%@\")", URL.absoluteString]);
     301void WebInspectorFrontendClient::save(const String& suggestedURL, const String& content, bool forceSaveDialog)
     302{
     303    ASSERT(!suggestedURL.isEmpty());
     304   
     305    NSURL *platformURL = m_suggestedToActualURLMap.get(suggestedURL).get();
     306    if (!platformURL) {
     307        platformURL = [NSURL URLWithString:suggestedURL];
     308        // The user must confirm new filenames before we can save to them.
     309        forceSaveDialog = true;
     310    }
     311   
     312    ASSERT(platformURL);
     313    if (!platformURL)
     314        return;
     315
     316    // Necessary for the block below.
     317    String suggestedURLCopy = suggestedURL;
     318    String contentCopy = content;
     319
     320    auto saveToURL = ^(NSURL *actualURL) {
     321        ASSERT(actualURL);
     322       
     323        m_suggestedToActualURLMap.set(suggestedURLCopy, actualURL);
     324        [contentCopy writeToURL:actualURL atomically:YES encoding:NSUTF8StringEncoding error:NULL];
     325        core([m_windowController webView])->mainFrame()->script()->executeScript([NSString stringWithFormat:@"InspectorFrontendAPI.savedURL(\"%@\")", actualURL.absoluteString]);
    310326    };
    311327
    312     NSURL *URL = m_saveURLs.get(url).get();
    313     if (!URL)
    314         URL = [NSURL URLWithString:url];
    315     else if (!forceSaveAs) {
    316         saveToURL(URL);
     328    if (!forceSaveDialog) {
     329        saveToURL(platformURL);
    317330        return;
    318331    }
    319 
     332   
    320333    NSSavePanel *panel = [NSSavePanel savePanel];
    321     panel.nameFieldStringValue = URL.lastPathComponent;
    322     panel.directoryURL = [URL URLByDeletingLastPathComponent];
     334    panel.nameFieldStringValue = platformURL.lastPathComponent;
     335    panel.directoryURL = [platformURL URLByDeletingLastPathComponent];
    323336
    324337    [panel beginSheetModalForWindow:[[m_windowController webView] window] completionHandler:^(NSInteger result) {
     
    330343}
    331344
    332 void WebInspectorFrontendClient::append(const String& url, const String& content)
    333 {
    334     RetainPtr<NSURL> URL = m_saveURLs.get(url);
    335     if (!URL)
    336         URL = [NSURL URLWithString:url];
    337 
    338     NSFileHandle *handle = [NSFileHandle fileHandleForWritingToURL:URL.get() error:NULL];
     345void WebInspectorFrontendClient::append(const String& suggestedURL, const String& content)
     346{
     347    ASSERT(!suggestedURL.isEmpty());
     348   
     349    RetainPtr<NSURL> actualURL = m_suggestedToActualURLMap.get(suggestedURL);
     350    // do not append unless the user has already confirmed this filename in save().
     351    if (!actualURL)
     352        return;
     353
     354    NSFileHandle *handle = [NSFileHandle fileHandleForWritingToURL:actualURL.get() error:NULL];
    339355    [handle seekToEndOfFile];
    340356    [handle writeData:[content dataUsingEncoding:NSUTF8StringEncoding]];
    341357    [handle closeFile];
    342358
    343     core([m_windowController webView])->mainFrame()->script()->executeScript([NSString stringWithFormat:@"InspectorFrontendAPI.appendedToURL(\"%@\")", [URL absoluteString]]);
     359    core([m_windowController webView])->mainFrame()->script()->executeScript([NSString stringWithFormat:@"InspectorFrontendAPI.appendedToURL(\"%@\")", [actualURL absoluteString]]);
    344360}
    345361
  • trunk/Source/WebKit2/ChangeLog

    r149919 r149923  
     12013-05-10  Brian J. Burg  <burg@cs.washington.edu>
     2
     3        Web Inspector: Implement WK2 version of WebInspectorFrontendClient::save
     4        https://bugs.webkit.org/show_bug.cgi?id=115564
     5
     6        Reviewed by Benjamin Poulain.
     7
     8        Implement InspectorFrontendHost's save() and append() methods for
     9        Mac WebKit2. Add canSave() for all ports.
     10
     11        * UIProcess/WebInspectorProxy.cpp:
     12        (WebKit::WebInspectorProxy::save):
     13        (WebKit):
     14        (WebKit::WebInspectorProxy::append):
     15        * UIProcess/WebInspectorProxy.h:
     16        (WebInspectorProxy):
     17        * UIProcess/WebInspectorProxy.messages.in:
     18        * UIProcess/efl/WebInspectorProxyEfl.cpp:
     19        (WebKit::WebInspectorProxy::platformSave):
     20        (WebKit):
     21        (WebKit::WebInspectorProxy::platformAppend):
     22        * UIProcess/gtk/WebInspectorProxyGtk.cpp:
     23        (WebKit::WebInspectorProxy::platformSave):
     24        (WebKit):
     25        (WebKit::WebInspectorProxy::platformAppend):
     26        * UIProcess/mac/WebInspectorProxyMac.mm:
     27        (WebKit::WebInspectorProxy::platformSave):
     28        (WebKit):
     29        (WebKit::WebInspectorProxy::platformAppend):
     30        * UIProcess/qt/WebInspectorProxyQt.cpp:
     31        (WebKit::WebInspectorProxy::platformSave):
     32        (WebKit):
     33        (WebKit::WebInspectorProxy::platformAppend):
     34        * WebProcess/WebCoreSupport/WebInspectorFrontendClient.cpp:
     35        (WebKit::WebInspectorFrontendClient::canSave):
     36        (WebKit):
     37        (WebKit::WebInspectorFrontendClient::save):
     38        (WebKit::WebInspectorFrontendClient::append):
     39        * WebProcess/WebCoreSupport/WebInspectorFrontendClient.h:
     40        (WebInspectorFrontendClient):
     41        * WebProcess/WebPage/WebInspector.cpp:
     42        (WebKit::WebInspector::save):
     43        (WebKit):
     44        (WebKit::WebInspector::append):
     45        (WebKit::WebInspector::didSave):
     46        (WebKit::WebInspector::didAppend):
     47        * WebProcess/WebPage/WebInspector.h:
     48        (WebInspector):
     49        * WebProcess/WebPage/WebInspector.messages.in:
     50        * WebProcess/WebPage/efl/WebInspectorEfl.cpp:
     51        (WebKit::WebInspector::canSave):
     52        (WebKit):
     53        * WebProcess/WebPage/gtk/WebInspectorGtk.cpp:
     54        (WebKit::WebInspector::canSave):
     55        (WebKit):
     56        * WebProcess/WebPage/mac/WebInspectorMac.mm:
     57        (WebKit::WebInspector::canSave):
     58        (WebKit):
     59        * WebProcess/WebPage/qt/WebInspectorQt.cpp:
     60        (WebKit::WebInspector::canSave):
     61        (WebKit):
     62
    1632013-05-10  Remy Demarest  <rdemarest@apple.com>
    264
  • trunk/Source/WebKit2/UIProcess/WebInspectorProxy.cpp

    r149006 r149923  
    475475}
    476476
     477void WebInspectorProxy::save(const String& filename, const String& content, bool forceSaveAs)
     478{
     479    platformSave(filename, content, forceSaveAs);
     480}
     481
     482void WebInspectorProxy::append(const String& filename, const String& content)
     483{
     484    platformAppend(filename, content);
     485}
     486
    477487bool WebInspectorProxy::canAttach()
    478488{
  • trunk/Source/WebKit2/UIProcess/WebInspectorProxy.h

    r149903 r149923  
    3939#if PLATFORM(MAC)
    4040#include "WKGeometry.h"
     41#include <wtf/HashMap.h>
    4142#include <wtf/RetainPtr.h>
    4243
    4344OBJC_CLASS NSButton;
     45OBJC_CLASS NSURL;
    4446OBJC_CLASS NSWindow;
    4547OBJC_CLASS WKWebInspectorProxyObjCAdapter;
     
    165167    void platformSetAttachedWindowHeight(unsigned);
    166168    void platformSetAttachedWindowWidth(unsigned);
     169    void platformSave(const String& filename, const String& content, bool forceSaveAs);
     170    void platformAppend(const String& filename, const String& content);
     171
    167172
    168173    // Called by WebInspectorProxy messages
     
    172177    void attachAvailabilityChanged(bool);
    173178    void inspectedURLChanged(const String&);
     179
     180    void save(const String& filename, const String& content, bool forceSaveAs);
     181    void append(const String& filename, const String& content);
    174182
    175183#if ENABLE(INSPECTOR_SERVER)
     
    218226    RetainPtr<WKWebInspectorProxyObjCAdapter> m_inspectorProxyObjCAdapter;
    219227    String m_urlString;
     228    HashMap<String, RetainPtr<NSURL>> m_suggestedToActualURLMap;
    220229#elif PLATFORM(GTK)
    221230    WebInspectorClientGtk m_client;
  • trunk/Source/WebKit2/UIProcess/WebInspectorProxy.messages.in

    r147004 r149923  
    2929    InspectedURLChanged(WTF::String urlString)
    3030
     31    Save(WTF::String filename, WTF::String content, bool forceSaveAs)
     32    Append(WTF::String filename, WTF::String content)
     33
    3134    AttachBottom()
    3235    AttachRight()
  • trunk/Source/WebKit2/UIProcess/efl/WebInspectorProxyEfl.cpp

    r149902 r149923  
    215215}
    216216
     217void WebInspectorProxy::platformSave(const String&, const String&, bool)
     218{
     219    notImplemented();
     220}
     221
     222void WebInspectorProxy::platformAppend(const String&, const String&)
     223{
     224    notImplemented();
     225}
     226
    217227void WebInspectorProxy::platformAttachAvailabilityChanged(bool)
    218228{
  • trunk/Source/WebKit2/UIProcess/gtk/WebInspectorProxyGtk.cpp

    r148082 r149923  
    235235}
    236236
     237void WebInspectorProxy::platformSave(const String&, const String&, bool)
     238{
     239    notImplemented();
     240}
     241
     242void WebInspectorProxy::platformAppend(const String&, const String&)
     243{
     244    notImplemented();
     245}
     246
    237247void WebInspectorProxy::platformAttachAvailabilityChanged(bool)
    238248{
  • trunk/Source/WebKit2/UIProcess/mac/WebInspectorProxyMac.mm

    r149903 r149923  
    3838#import "WKURLCF.h"
    3939#import "WKViewPrivate.h"
     40#import "WebInspectorMessages.h"
    4041#import "WebPageGroup.h"
    4142#import "WebPageProxy.h"
     
    542543}
    543544
     545void WebInspectorProxy::platformSave(const String& suggestedURL, const String& content, bool forceSaveDialog)
     546{
     547    ASSERT(!suggestedURL.isEmpty());
     548   
     549    NSURL *platformURL = m_suggestedToActualURLMap.get(suggestedURL).get();
     550    if (!platformURL) {
     551        platformURL = [NSURL URLWithString:suggestedURL];
     552        // The user must confirm new filenames before we can save to them.
     553        forceSaveDialog = true;
     554    }
     555   
     556    ASSERT(platformURL);
     557    if (!platformURL)
     558        return;
     559
     560    // Necessary for the block below.
     561    String suggestedURLCopy = suggestedURL;
     562    String contentCopy = content;
     563
     564    auto saveToURL = ^(NSURL *actualURL) {
     565        ASSERT(actualURL);
     566       
     567        m_suggestedToActualURLMap.set(suggestedURLCopy, actualURL);
     568        [contentCopy writeToURL:actualURL atomically:YES encoding:NSUTF8StringEncoding error:NULL];
     569        m_page->process()->send(Messages::WebInspector::DidSave([actualURL absoluteString]), m_page->pageID());
     570    };
     571
     572    if (!forceSaveDialog) {
     573        saveToURL(platformURL);
     574        return;
     575    }
     576
     577    NSSavePanel *panel = [NSSavePanel savePanel];
     578    panel.nameFieldStringValue = platformURL.lastPathComponent;
     579    panel.directoryURL = [platformURL URLByDeletingLastPathComponent];
     580
     581    [panel beginSheetModalForWindow:m_inspectorWindow.get() completionHandler:^(NSInteger result) {
     582        if (result == NSFileHandlingPanelCancelButton)
     583            return;
     584        ASSERT(result == NSFileHandlingPanelOKButton);
     585        saveToURL(panel.URL);
     586    }];
     587}
     588
     589void WebInspectorProxy::platformAppend(const String& suggestedURL, const String& content)
     590{
     591    ASSERT(!suggestedURL.isEmpty());
     592   
     593    RetainPtr<NSURL> actualURL = m_suggestedToActualURLMap.get(suggestedURL);
     594    // Do not append unless the user has already confirmed this filename in save().
     595    if (!actualURL)
     596        return;
     597
     598    NSFileHandle *handle = [NSFileHandle fileHandleForWritingToURL:actualURL.get() error:NULL];
     599    [handle seekToEndOfFile];
     600    [handle writeData:[content dataUsingEncoding:NSUTF8StringEncoding]];
     601    [handle closeFile];
     602
     603    m_page->process()->send(Messages::WebInspector::DidAppend([actualURL absoluteString]), m_page->pageID());
     604}
     605
    544606void WebInspectorProxy::windowFrameDidChange()
    545607{
  • trunk/Source/WebKit2/UIProcess/qt/WebInspectorProxyQt.cpp

    r147004 r149923  
    108108}
    109109
     110void WebInspectorProxy::platformSave(const String&, const String&, bool)
     111{
     112    notImplemented();
     113}
     114
     115void WebInspectorProxy::platformAppend(const String&, const String&)
     116{
     117    notImplemented();
     118}
     119
    110120String WebInspectorProxy::inspectorPageURL() const
    111121{
  • trunk/Source/WebKit2/WebProcess/WebCoreSupport/WebInspectorFrontendClient.cpp

    r147004 r149923  
    6262}
    6363
     64bool WebInspectorFrontendClient::canSave()
     65{
     66    return m_page->inspector()->canSave();
     67}
     68
     69void WebInspectorFrontendClient::save(const String& filename, const String& content, bool forceSaveAs)
     70{
     71    m_page->inspector()->save(filename, content, forceSaveAs);
     72}
     73
     74void WebInspectorFrontendClient::append(const String& filename, const String& content)
     75{
     76    m_page->inspector()->append(filename, content);
     77}
     78
    6479void WebInspectorFrontendClient::attachWindow(DockSide dockSide)
    6580{
  • trunk/Source/WebKit2/WebProcess/WebCoreSupport/WebInspectorFrontendClient.h

    r147004 r149923  
    4545    virtual void closeWindow() OVERRIDE;
    4646
     47    virtual bool canSave() OVERRIDE;
     48    virtual void save(const String&, const String&, bool) OVERRIDE;
     49    virtual void append(const String&, const String&) OVERRIDE;
     50
    4751    virtual void attachWindow(DockSide) OVERRIDE;
    4852    virtual void detachWindow() OVERRIDE;
  • trunk/Source/WebKit2/WebProcess/WebPage/WebInspector.cpp

    r147004 r149923  
    3434#include "WebPageCreationParameters.h"
    3535#include "WebProcess.h"
     36#include <WebCore/Frame.h>
    3637#include <WebCore/InspectorController.h>
    3738#include <WebCore/InspectorFrontendChannel.h>
    3839#include <WebCore/InspectorFrontendClient.h>
    3940#include <WebCore/Page.h>
     41#include <WebCore/ScriptController.h>
     42#include <WebCore/ScriptValue.h>
     43#include <wtf/text/StringConcatenate.h>
    4044
    4145using namespace WebCore;
     
    118122}
    119123
     124void WebInspector::save(const String& filename, const String& content, bool forceSaveAs)
     125{
     126    WebProcess::shared().connection()->send(Messages::WebInspectorProxy::Save(filename, content, forceSaveAs), m_page->pageID());
     127}
     128
     129void WebInspector::append(const String& filename, const String& content)
     130{
     131    WebProcess::shared().connection()->send(Messages::WebInspectorProxy::Append(filename, content), m_page->pageID());
     132}
     133
    120134void WebInspector::attachBottom()
    121135{
     
    152166{
    153167    m_page->corePage()->inspectorController()->close();
     168}
     169
     170void WebInspector::didSave(const String& url)
     171{
     172    ASSERT(m_inspectorPage);
     173    m_inspectorPage->corePage()->mainFrame()->script()->executeScript(makeString("InspectorFrontendAPI.savedURL(\"", url, "\")"));
     174}
     175
     176void WebInspector::didAppend(const String& url)
     177{
     178    ASSERT(m_inspectorPage);
     179    m_inspectorPage->corePage()->mainFrame()->script()->executeScript(makeString("InspectorFrontendAPI.appendedToURL(\"", url, "\")"));
    154180}
    155181
  • trunk/Source/WebKit2/WebProcess/WebPage/WebInspector.h

    r147403 r149923  
    5858    void close();
    5959
     60    void didSave(const String& url);
     61    void didAppend(const String& url);
     62
    6063    void attachedBottom();
    6164    void attachedRight();
     
    9497    void bringToFront();
    9598    void inspectedURLChanged(const String&);
     99
     100    bool canSave() const;
     101    void save(const String& filename, const String& content, bool forceSaveAs);
     102    void append(const String& filename, const String& content);
    96103
    97104    void attachBottom();
  • trunk/Source/WebKit2/WebProcess/WebPage/WebInspector.messages.in

    r147004 r149923  
    2929    AttachedRight()
    3030    Detached()
     31    DidSave(WTF::String url)
     32    DidAppend(WTF::String url)
    3133    ShowConsole()
    3234    ShowResources()
  • trunk/Source/WebKit2/WebProcess/WebPage/efl/WebInspectorEfl.cpp

    r140372 r149923  
    3434namespace WebKit {
    3535
     36bool WebInspector::canSave() const
     37{
     38    return false;
     39}
     40
    3641String WebInspector::localizedStringsURL() const
    3742{
  • trunk/Source/WebKit2/WebProcess/WebPage/gtk/WebInspectorGtk.cpp

    r144982 r149923  
    3737namespace WebKit {
    3838
     39bool WebInspector::canSave() const
     40{
     41    return false;
     42}
     43
    3944String WebInspector::localizedStringsURL() const
    4045{
  • trunk/Source/WebKit2/WebProcess/WebPage/mac/WebInspectorMac.mm

    r140903 r149923  
    5858}
    5959
     60bool WebInspector::canSave() const
     61{
     62    return true;
     63}
     64
    6065String WebInspector::localizedStringsURL() const
    6166{
  • trunk/Source/WebKit2/WebProcess/WebPage/qt/WebInspectorQt.cpp

    r95901 r149923  
    3434namespace WebKit {
    3535
     36bool WebInspector::canSave() const
     37{
     38    return false;
     39}
     40
    3641String WebInspector::localizedStringsURL() const
    3742{
Note: See TracChangeset for help on using the changeset viewer.