diff options
Diffstat (limited to 'WebKit/wx')
-rw-r--r-- | WebKit/wx/ChangeLog | 152 | ||||
-rw-r--r-- | WebKit/wx/WebFrame.cpp | 25 | ||||
-rw-r--r-- | WebKit/wx/WebKitSupport/ChromeClientWx.cpp | 3 | ||||
-rw-r--r-- | WebKit/wx/WebKitSupport/ChromeClientWx.h | 2 | ||||
-rw-r--r-- | WebKit/wx/WebKitSupport/DragClientWx.cpp | 2 | ||||
-rw-r--r-- | WebKit/wx/WebKitSupport/FrameLoaderClientWx.cpp | 74 | ||||
-rw-r--r-- | WebKit/wx/WebKitSupport/FrameLoaderClientWx.h | 11 | ||||
-rw-r--r-- | WebKit/wx/WebKitSupport/InspectorClientWx.cpp | 9 | ||||
-rw-r--r-- | WebKit/wx/WebKitSupport/InspectorClientWx.h | 7 | ||||
-rw-r--r-- | WebKit/wx/WebView.cpp | 17 |
10 files changed, 271 insertions, 31 deletions
diff --git a/WebKit/wx/ChangeLog b/WebKit/wx/ChangeLog index f2cc27f..e6ed389 100644 --- a/WebKit/wx/ChangeLog +++ b/WebKit/wx/ChangeLog @@ -1,3 +1,155 @@ +2009-12-08 Kevin Watters <kevinwatters@gmail.com> + + Reviewed by Kevin Ollivier. + + [wx] Mac plugins support. + + https://bugs.webkit.org/show_bug.cgi?id=32236 + + * WebKitSupport/FrameLoaderClientWx.cpp: + (WebCore::FrameLoaderClientWx::createPlugin): + (WebCore::FrameLoaderClientWx::redirectDataToPlugin): + * WebView.cpp: + (wxWebView::Create): + +2009-12-03 Brady Eidson <beidson@apple.com> + + Reviewed by Sam Weinig. + + <rdar://problem/7214236> and http://webkit.org/b/32052 - Implement HTML5 state object history API + + * WebKitSupport/FrameLoaderClientWx.cpp: + (WebCore::FrameLoaderClientWx::dispatchDidPushStateWithinPage): + (WebCore::FrameLoaderClientWx::dispatchDidReplaceStateWithinPage): + (WebCore::FrameLoaderClientWx::dispatchDidPopStateWithinPage): + * WebKitSupport/FrameLoaderClientWx.h: + +2009-12-03 Pavel Feldman <pfeldman@dhcp-172-28-174-220.spb.corp.google.com> + + Reviewed by Timothy Hatcher. + + Web Inspector: Simplify the settings support in inspector controller. + + https://bugs.webkit.org/show_bug.cgi?id=32076 + + * WebKitSupport/InspectorClientWx.cpp: + (WebCore::InspectorClientWx::populateSetting): + (WebCore::InspectorClientWx::storeSetting): + * WebKitSupport/InspectorClientWx.h: + +2009-12-03 Ben Murdoch <benm@google.com> + + Reviewed by Brady Eidson. + + [Android] The FrameLoaderClient is unaware of BackForwardList changes. + https://bugs.webkit.org/show_bug.cgi?id=31914 + + * WebKitSupport/FrameLoaderClientWx.cpp: + (WebCore::FrameLoaderClientWx::dispatchDidAddBackForwardItem): Add an empty implementation. Method added to FrameLoaderClient by Android (see bug). + (WebCore::FrameLoaderClientWx::dispatchDidRemoveBackForwardItem): ditto. + (WebCore::FrameLoaderClientWx::dispatchDidChangeBackForwardIndex): ditto. + * WebKitSupport/FrameLoaderClientWx.h: + +2009-11-23 Laszlo Gombos <laszlo.1.gombos@nokia.com> + + Reviewed by Kenneth Rohde Christiansen. + + Include "config.h" to meet Coding Style Guidelines + https://bugs.webkit.org/show_bug.cgi?id=31792 + + * WebKitSupport/DragClientWx.cpp: + +2009-11-18 Kevin Watters <kevinwatters@gmail.com> + + Reviewed by Kevin Ollivier. + + Enable wx plugin support using the Windows implementation as a base. + + https://bugs.webkit.org/show_bug.cgi?id=31636 + + * WebKitSupport/FrameLoaderClientWx.cpp: + (WebCore::FrameLoaderClientWx::FrameLoaderClientWx): + (WebCore::FrameLoaderClientWx::finishedLoading): + (WebCore::FrameLoaderClientWx::committedLoad): + (WebCore::FrameLoaderClientWx::createPlugin): + (WebCore::FrameLoaderClientWx::redirectDataToPlugin): + (WebCore::FrameLoaderClientWx::shouldUsePluginDocument): + * WebKitSupport/FrameLoaderClientWx.h: + * WebView.cpp: + (wxWebView::Create): + +2009-11-13 Kevin Ollivier <kevino@theolliviers.com> + + wx build fix after r50923 change to externalRepresentation. + + * WebFrame.cpp: + (wxWebFrame::GetExternalRepresentation): + +2009-11-13 Adam Roben <aroben@apple.com> + + Update for changes to FrameLoaderClient + + Fixes <http://webkit.org/b/31124> Tell the WebFrameLoadDelegate when + window objects in isolated worlds are cleared + + Reviewed by Dave Hyatt. + + * WebKitSupport/FrameLoaderClientWx.cpp: + (WebCore::FrameLoaderClientWx::dispatchDidClearWindowObjectInWorld): + * WebKitSupport/FrameLoaderClientWx.h: + Replaced windowObjectCleared with this function. Does nothing if the + passed-in world is not the mainThreadNormalWorld(). + +2009-11-10 Robin Dunn <robin@alldunn.com> + + Reviewed by Kevin Ollivier. + + Add sanity checks to RunScript to ensure it doesn't run when the document hasn't yet + loaded nor when JavaScript is disabled. + + https://bugs.webkit.org/show_bug.cgi?id=31309 + + * WebFrame.cpp: + (wxWebFrame::RunScript): + +2009-11-04 Kevin Watters <kevinwatters@gmail.com> + + Reviewed by Kevin Ollivier. + + Fix an assert on shutdown when wxWebView has captured the mouse, + and make sure wxWebView's right click handling is only active when + the WebCore popup menu is used. + + https://bugs.webkit.org/show_bug.cgi?id=31131 + + * WebView.cpp: + (wxWebView::~wxWebView): + (wxWebView::OnContextMenuEvents): + (wxWebView::OnMenuSelectEvents): + +2009-11-04 Vadim Zeitlin <vadim@wxwidgets.org> + + Reviewed by Eric Seidel. + + [wx] Small cleanup: avoid unnecessary wxString::mb_str() calls. + + * WebFrame.cpp: + (wxWebFrame::SetPageSource): + (wxWebFrame::LoadURL): + +2009-10-30 Evan Stade <estade@chromium.org> + + Reviewed by David Levin. + + Notify the chrome when the focused node has changed. + https://bugs.webkit.org/show_bug.cgi?id=30832 + + Added stub implementation for new ChromeClient function. + + * WebKitSupport/ChromeClientWx.cpp: + (WebCore::ChromeClientWx::focusedNodeChanged): + * WebKitSupport/ChromeClientWx.h: + 2009-10-23 Kevin Ollivier <kevino@theolliviers.com> wx build fix. Update the globalObject calls after changes. diff --git a/WebKit/wx/WebFrame.cpp b/WebKit/wx/WebFrame.cpp index 9018d37..bd983f6 100644 --- a/WebKit/wx/WebFrame.cpp +++ b/WebKit/wx/WebFrame.cpp @@ -146,9 +146,9 @@ wxString wxWebFrame::GetPageSource() void wxWebFrame::SetPageSource(const wxString& source, const wxString& baseUrl) { if (m_impl->frame && m_impl->frame->loader()) { - WebCore::KURL url(WebCore::KURL(), static_cast<const char*>(baseUrl.mb_str(wxConvUTF8))); + WebCore::KURL url(WebCore::KURL(), baseUrl); - wxCharBuffer charBuffer(source.mb_str(wxConvUTF8)); + const wxCharBuffer charBuffer(source.utf8_str()); const char* contents = charBuffer; WTF::PassRefPtr<WebCore::SharedBuffer> sharedBuffer = WebCore::SharedBuffer::create(contents, strlen(contents)); @@ -181,16 +181,25 @@ wxString wxWebFrame::GetExternalRepresentation() if (m_impl->frame->view() && m_impl->frame->view()->layoutPending()) m_impl->frame->view()->layout(); - return externalRepresentation(m_impl->frame->contentRenderer()); + return externalRepresentation(m_impl->frame); } wxString wxWebFrame::RunScript(const wxString& javascript) { wxString returnValue = wxEmptyString; - if (m_impl->frame) { - JSC::JSValue result = m_impl->frame->script()->executeScript(javascript, true).jsValue(); - if (result) - returnValue = wxString(result.toString(m_impl->frame->script()->globalObject(WebCore::mainThreadNormalWorld())->globalExec()).UTF8String().c_str(), wxConvUTF8); + if (m_impl->frame && m_impl->frame->loader()) { + bool hasLoaded = m_impl->frame->loader()->frameHasLoaded(); + wxASSERT_MSG(hasLoaded, wxT("Document must be loaded before calling RunScript.")); + if (hasLoaded) { + WebCore::ScriptController* controller = m_impl->frame->script(); + bool jsEnabled = controller->isEnabled(); + wxASSERT_MSG(jsEnabled, wxT("RunScript requires JavaScript to be enabled.")); + if (jsEnabled) { + JSC::JSValue result = controller->executeScript(javascript, true).jsValue(); + if (result) + returnValue = wxString(result.toString(m_impl->frame->script()->globalObject(WebCore::mainThreadNormalWorld())->globalExec()).UTF8String().c_str(), wxConvUTF8); + } + } } return returnValue; } @@ -206,7 +215,7 @@ bool wxWebFrame::FindString(const wxString& string, bool forward, bool caseSensi void wxWebFrame::LoadURL(const wxString& url) { if (m_impl->frame && m_impl->frame->loader()) { - WebCore::KURL kurl = WebCore::KURL(WebCore::KURL(), static_cast<const char*>(url.mb_str(wxConvUTF8)), WebCore::UTF8Encoding()); + WebCore::KURL kurl = WebCore::KURL(WebCore::KURL(), url, WebCore::UTF8Encoding()); // NB: This is an ugly fix, but CURL won't load sub-resources if the // protocol is omitted; sadly, it will not emit an error, either, so // there's no way for us to catch this problem the correct way yet. diff --git a/WebKit/wx/WebKitSupport/ChromeClientWx.cpp b/WebKit/wx/WebKitSupport/ChromeClientWx.cpp index 629463f..17f6f43 100644 --- a/WebKit/wx/WebKitSupport/ChromeClientWx.cpp +++ b/WebKit/wx/WebKitSupport/ChromeClientWx.cpp @@ -111,6 +111,9 @@ void ChromeClientWx::takeFocus(FocusDirection) notImplemented(); } +void ChromeClientWx::focusedNodeChanged(Node*) +{ +} Page* ChromeClientWx::createWindow(Frame*, const FrameLoadRequest& request, const WindowFeatures&) { diff --git a/WebKit/wx/WebKitSupport/ChromeClientWx.h b/WebKit/wx/WebKitSupport/ChromeClientWx.h index 07f70a8..bd4f1ec 100644 --- a/WebKit/wx/WebKitSupport/ChromeClientWx.h +++ b/WebKit/wx/WebKitSupport/ChromeClientWx.h @@ -54,6 +54,8 @@ public: virtual bool canTakeFocus(FocusDirection); virtual void takeFocus(FocusDirection); + virtual void focusedNodeChanged(Node*); + virtual Page* createWindow(Frame*, const FrameLoadRequest&, const WindowFeatures&); virtual Page* createModalDialog(Frame*, const FrameLoadRequest&); virtual void show(); diff --git a/WebKit/wx/WebKitSupport/DragClientWx.cpp b/WebKit/wx/WebKitSupport/DragClientWx.cpp index dcccc34..fb6905b 100644 --- a/WebKit/wx/WebKitSupport/DragClientWx.cpp +++ b/WebKit/wx/WebKitSupport/DragClientWx.cpp @@ -23,7 +23,9 @@ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ +#include "config.h" #include "DragClientWx.h" + #include "NotImplemented.h" #include <stdio.h> diff --git a/WebKit/wx/WebKitSupport/FrameLoaderClientWx.cpp b/WebKit/wx/WebKitSupport/FrameLoaderClientWx.cpp index 568cf42..fbb4ec3 100644 --- a/WebKit/wx/WebKitSupport/FrameLoaderClientWx.cpp +++ b/WebKit/wx/WebKitSupport/FrameLoaderClientWx.cpp @@ -37,11 +37,13 @@ #include "FrameLoaderTypes.h" #include "FrameView.h" #include "FrameTree.h" +#include "PluginView.h" #include "HTMLFormElement.h" #include "HTMLFrameOwnerElement.h" #include "NotImplemented.h" #include "Page.h" #include "PlatformString.h" +#include "PluginView.h" #include "ProgressTracker.h" #include "RenderPart.h" #include "ResourceError.h" @@ -80,7 +82,10 @@ inline int wxNavTypeFromWebNavType(NavigationType type){ } FrameLoaderClientWx::FrameLoaderClientWx() - : m_webFrame(0) + : m_frame(0) + , m_pluginView(0) + , m_hasSentResponseToPlugin(false) + , m_webFrame(0) { } @@ -257,6 +262,20 @@ void FrameLoaderClientWx::dispatchDidChangeLocationWithinPage() notImplemented(); } +void FrameLoaderClientWx::dispatchDidPushStateWithinPage() +{ + notImplemented(); +} + +void FrameLoaderClientWx::dispatchDidReplaceStateWithinPage() +{ + notImplemented(); +} + +void FrameLoaderClientWx::dispatchDidPopStateWithinPage() +{ + notImplemented(); +} void FrameLoaderClientWx::dispatchWillClose() { @@ -408,7 +427,11 @@ void FrameLoaderClientWx::didChangeTitle(DocumentLoader *l) void FrameLoaderClientWx::finishedLoading(DocumentLoader*) { - notImplemented(); + if (m_pluginView) { + m_pluginView->didFinishLoading(); + m_pluginView = 0; + m_hasSentResponseToPlugin = false; + } } @@ -579,9 +602,25 @@ void FrameLoaderClientWx::committedLoad(WebCore::DocumentLoader* loader, const c { if (!m_webFrame) return; - FrameLoader* fl = loader->frameLoader(); - fl->setEncoding(m_response.textEncodingName(), false); - fl->addData(data, length); + if (!m_pluginView) { + FrameLoader* fl = loader->frameLoader(); + fl->setEncoding(m_response.textEncodingName(), false); + fl->addData(data, length); + } + + // We re-check here as the plugin can have been created + if (m_pluginView) { + if (!m_hasSentResponseToPlugin) { + m_pluginView->didReceiveResponse(loader->response()); + // didReceiveResponse sets up a new stream to the plug-in. on a full-page plug-in, a failure in + // setting up this stream can cause the main document load to be cancelled, setting m_pluginView + // to null + if (!m_pluginView) + return; + m_hasSentResponseToPlugin = true; + } + m_pluginView->didReceiveData(data, length); + } } WebCore::ResourceError FrameLoaderClientWx::cancelledError(const WebCore::ResourceRequest& request) @@ -812,16 +851,21 @@ ObjectContentType FrameLoaderClientWx::objectContentType(const KURL& url, const return ObjectContentType(); } -PassRefPtr<Widget> FrameLoaderClientWx::createPlugin(const IntSize&, HTMLPlugInElement*, const KURL&, const Vector<String>&, const Vector<String>&, const String&, bool loadManually) +PassRefPtr<Widget> FrameLoaderClientWx::createPlugin(const IntSize& size, HTMLPlugInElement* element, const KURL& url, const Vector<String>& paramNames, const Vector<String>& paramValues, const String& mimeType, bool loadManually) { - notImplemented(); +#if __WXMSW__ || __WXMAC__ + RefPtr<PluginView> pv = PluginView::create(m_frame, size, element, url, paramNames, paramValues, mimeType, loadManually); + if (pv->status() == PluginStatusLoadedSuccessfully) + return pv; +#endif return 0; } void FrameLoaderClientWx::redirectDataToPlugin(Widget* pluginWidget) { - notImplemented(); - return; + ASSERT(!m_pluginView); + m_pluginView = static_cast<PluginView*>(pluginWidget); + m_hasSentResponseToPlugin = false; } ResourceError FrameLoaderClientWx::pluginWillHandleLoadError(const ResourceResponse& response) @@ -843,8 +887,11 @@ String FrameLoaderClientWx::overrideMediaType() const return String(); } -void FrameLoaderClientWx::windowObjectCleared() +void FrameLoaderClientWx::dispatchDidClearWindowObjectInWorld(DOMWrapperWorld* world) { + if (world != mainThreadNormalWorld()) + return; + if (m_webView) { wxWebViewWindowObjectClearedEvent wkEvent(m_webView); Frame* coreFrame = m_webView->GetMainFrame()->GetFrame(); @@ -897,4 +944,11 @@ void FrameLoaderClientWx::transitionToCommittedForNewPage() m_frame->createView(size, backgroundColor, transparent, IntSize(), false); } +bool FrameLoaderClientWx::shouldUsePluginDocument(const String &mimeType) const +{ + // NOTE: Plugin Documents are used for viewing PDFs, etc. inline, and should + // not be used for pages with plugins in them. + return false; +} + } diff --git a/WebKit/wx/WebKitSupport/FrameLoaderClientWx.h b/WebKit/wx/WebKitSupport/FrameLoaderClientWx.h index ed11974..0c29941 100644 --- a/WebKit/wx/WebKitSupport/FrameLoaderClientWx.h +++ b/WebKit/wx/WebKitSupport/FrameLoaderClientWx.h @@ -31,7 +31,9 @@ #include "FrameLoaderClient.h" #include "FrameLoader.h" #include "KURL.h" +#include "PluginView.h" #include "ResourceResponse.h" +#include "HTMLPlugInElement.h" class wxWebFrame; class wxWebView; @@ -94,6 +96,9 @@ namespace WebCore { virtual void dispatchDidCancelClientRedirect(); virtual void dispatchWillPerformClientRedirect(const KURL&, double interval, double fireDate); virtual void dispatchDidChangeLocationWithinPage(); + virtual void dispatchDidPushStateWithinPage(); + virtual void dispatchDidReplaceStateWithinPage(); + virtual void dispatchDidPopStateWithinPage(); virtual void dispatchWillClose(); virtual void dispatchDidReceiveIcon(); virtual void dispatchDidStartProvisionalLoad(); @@ -205,17 +210,21 @@ namespace WebCore { virtual ObjectContentType objectContentType(const KURL& url, const String& mimeType); virtual String overrideMediaType() const; - virtual void windowObjectCleared(); + virtual void dispatchDidClearWindowObjectInWorld(DOMWrapperWorld*); virtual void documentElementAvailable(); virtual void didPerformFirstNavigation() const; virtual void registerForIconNotification(bool listen = true); + + virtual bool shouldUsePluginDocument(const String &mimeType) const; private: wxWebFrame *m_webFrame; Frame* m_frame; wxWebView *m_webView; + PluginView* m_pluginView; + bool m_hasSentResponseToPlugin; ResourceResponse m_response; bool m_firstData; }; diff --git a/WebKit/wx/WebKitSupport/InspectorClientWx.cpp b/WebKit/wx/WebKitSupport/InspectorClientWx.cpp index d55ad04..ff21ae0 100644 --- a/WebKit/wx/WebKitSupport/InspectorClientWx.cpp +++ b/WebKit/wx/WebKitSupport/InspectorClientWx.cpp @@ -105,17 +105,12 @@ void InspectorClientWx::inspectedURLChanged(const String& newURL) notImplemented(); } -void InspectorClientWx::populateSetting(const String& key, InspectorController::Setting& setting) +void InspectorClientWx::populateSetting(const String& key, String* setting) { notImplemented(); } -void InspectorClientWx::storeSetting(const String& key, const InspectorController::Setting& setting) -{ - notImplemented(); -} - -void InspectorClientWx::removeSetting(const String& key) +void InspectorClientWx::storeSetting(const String& key, const String& setting) { notImplemented(); } diff --git a/WebKit/wx/WebKitSupport/InspectorClientWx.h b/WebKit/wx/WebKitSupport/InspectorClientWx.h index 182df1b..f905817 100644 --- a/WebKit/wx/WebKitSupport/InspectorClientWx.h +++ b/WebKit/wx/WebKitSupport/InspectorClientWx.h @@ -60,10 +60,9 @@ public: virtual void inspectedURLChanged(const String& newURL); - virtual void populateSetting(const String& key, InspectorController::Setting&); - virtual void storeSetting(const String& key, const InspectorController::Setting&); - virtual void removeSetting(const String& key); - + virtual void populateSetting(const String& key, String* value); + virtual void storeSetting(const String& key, const String& value); + virtual void inspectorWindowObjectCleared(); }; diff --git a/WebKit/wx/WebView.cpp b/WebKit/wx/WebView.cpp index 1b27cde..2c752de 100644 --- a/WebKit/wx/WebView.cpp +++ b/WebKit/wx/WebView.cpp @@ -257,7 +257,6 @@ BEGIN_EVENT_TABLE(wxWebView, wxWindow) EVT_SIZE(wxWebView::OnSize) EVT_MOUSE_EVENTS(wxWebView::OnMouseEvents) EVT_CONTEXT_MENU(wxWebView::OnContextMenuEvents) - EVT_MENU(wxID_ANY, wxWebView::OnMenuSelectEvents) EVT_KEY_DOWN(wxWebView::OnKeyEvents) EVT_KEY_UP(wxWebView::OnKeyEvents) EVT_CHAR(wxWebView::OnKeyEvents) @@ -339,6 +338,10 @@ bool wxWebView::Create(wxWindow* parent, int id, const wxPoint& position, settings->setDatabasesEnabled(true); #endif +#if __WXMSW__ || __WXMAC__ + settings->setPluginsEnabled(true); +#endif + m_isInitialized = true; return true; @@ -348,6 +351,9 @@ wxWebView::~wxWebView() { m_beingDestroyed = true; + while (HasCapture()) + ReleaseMouse(); + if (m_mainFrame && m_mainFrame->GetFrame()) m_mainFrame->GetFrame()->loader()->detachFromParent(); @@ -646,6 +652,7 @@ void wxWebView::OnMouseEvents(wxMouseEvent& event) void wxWebView::OnContextMenuEvents(wxContextMenuEvent& event) { + Connect(wxEVT_COMMAND_MENU_SELECTED, wxCommandEventHandler(wxWebView::OnMenuSelectEvents), NULL, this); m_impl->page->contextMenuController()->clearContextMenu(); wxPoint localEventPoint = ScreenToClient(event.GetPosition()); @@ -675,10 +682,18 @@ void wxWebView::OnContextMenuEvents(wxContextMenuEvent& event) return; PopupMenu(menuWx, localEventPoint); + + Disconnect(wxEVT_COMMAND_MENU_SELECTED, wxCommandEventHandler(wxWebView::OnMenuSelectEvents), NULL, this); } void wxWebView::OnMenuSelectEvents(wxCommandEvent& event) { + // we shouldn't hit this unless there's a context menu showing + WebCore::ContextMenu* coreMenu = m_impl->page->contextMenuController()->contextMenu(); + ASSERT(coreMenu); + if (!coreMenu) + return; + WebCore::ContextMenuItem* item = WebCore::ContextMenu::itemWithId (event.GetId()); if (!item) return; |