PassRefPtr<Frame> FrameLoaderClient::createFrame(const KURL& url, const String& name, HTMLFrameOwnerElement* ownerElement, const String& referrer, bool allowsScrolling, int marginWidth, int marginHeight) { Frame* coreFrame = core(webFrame()); ASSERT(core(getViewFromFrame(webFrame())) == coreFrame->page()); RefPtr<Frame> childFrame = webkit_web_frame_init_with_web_view(getViewFromFrame(webFrame()), ownerElement); coreFrame->tree()->appendChild(childFrame); childFrame->tree()->setName(name); childFrame->init(); // The creation of the frame may have run arbitrary JavaScript that removed it from the page already. if (!childFrame->page()) return 0; childFrame->loader()->loadURLIntoChildFrame(url, referrer, childFrame.get()); // The frame's onload handler may have removed it from the document. if (!childFrame->tree()->parent()) return 0; return childFrame.release(); }
void WebPageProxy::didReceiveSyncMessage(CoreIPC::Connection*, CoreIPC::MessageID messageID, CoreIPC::ArgumentDecoder& arguments, CoreIPC::ArgumentEncoder& reply) { switch (messageID.get<WebPageProxyMessage::Kind>()) { case WebPageProxyMessage::CreateNewPage: { WebPageProxy* newPage = createNewPage(); if (newPage) { // FIXME: Pass the real size. reply.encode(CoreIPC::In(newPage->pageID(), IntSize(100, 100), newPage->pageNamespace()->context()->preferences()->store(), *(newPage->m_drawingArea.get()))); } else { // FIXME: We should encode a drawing area type here instead. reply.encode(CoreIPC::In(static_cast<uint64_t>(0), IntSize(), WebPreferencesStore(), 0)); } break; } case WebPageProxyMessage::RunJavaScriptAlert: { uint64_t frameID; String alertText; if (!arguments.decode(CoreIPC::Out(frameID, alertText))) return; runJavaScriptAlert(webFrame(frameID), alertText); break; } default: ASSERT_NOT_REACHED(); break; } }
void WebProcessProxy::didNavigateWithNavigationData(uint64_t pageID, const WebNavigationDataStore& store, uint64_t frameID) { WebPageProxy* page = webPage(pageID); if (!page) return; WebFrameProxy* frame = webFrame(frameID); MESSAGE_CHECK(frame); MESSAGE_CHECK(frame->page() == page); m_context->historyClient().didNavigateWithNavigationData(&m_context.get(), page, store, frame); }
void WebProcessProxy::didUpdateHistoryTitle(uint64_t pageID, const String& title, const String& url, uint64_t frameID) { WebPageProxy* page = webPage(pageID); if (!page) return; WebFrameProxy* frame = webFrame(frameID); MESSAGE_CHECK(frame); MESSAGE_CHECK(frame->page() == page); MESSAGE_CHECK_URL(url); m_context->historyClient().didUpdateHistoryTitle(&m_context.get(), page, title, url, frame); }
void WebProcessProxy::didPerformServerRedirect(uint64_t pageID, const String& sourceURLString, const String& destinationURLString, uint64_t frameID) { WebPageProxy* page = webPage(pageID); if (!page) return; if (sourceURLString.isEmpty() || destinationURLString.isEmpty()) return; WebFrameProxy* frame = webFrame(frameID); MESSAGE_CHECK(frame); MESSAGE_CHECK(frame->page() == page); MESSAGE_CHECK_URL(sourceURLString); MESSAGE_CHECK_URL(destinationURLString); m_context->historyClient().didPerformServerRedirect(&m_context.get(), page, sourceURLString, destinationURLString, frame); }
void FrameLoaderClient::windowObjectCleared() { // Is this obsolete now? g_signal_emit_by_name(m_frame, "cleared"); Frame* coreFrame = core(webFrame()); ASSERT(coreFrame); Settings* settings = coreFrame->settings(); if (!settings || !settings->isJavaScriptEnabled()) return; // TODO: Consider using g_signal_has_handler_pending() to avoid the overhead // when there are no handlers. JSGlobalContextRef context = toGlobalRef(coreFrame->script()->globalObject()->globalExec()); JSObjectRef windowObject = toRef(coreFrame->script()->globalObject()); ASSERT(windowObject); WebKitWebView* webView = getViewFromFrame(m_frame); g_signal_emit_by_name(webView, "window-object-cleared", m_frame, context, windowObject); // TODO: Re-attach debug clients if present. // The Win port has an example of how we might do this. }
void WebPage::didReceiveMessage(CoreIPC::Connection* connection, CoreIPC::MessageID messageID, CoreIPC::ArgumentDecoder& arguments) { if (messageID.is<CoreIPC::MessageClassDrawingArea>()) { ASSERT(m_drawingArea); m_drawingArea->didReceiveMessage(connection, messageID, arguments); return; } switch (messageID.get<WebPageMessage::Kind>()) { case WebPageMessage::SetActive: { bool active; if (!arguments.decode(active)) return; setActive(active); break; } case WebPageMessage::SetFocused: { bool focused; if (!arguments.decode(focused)) return; setFocused(focused); break; } case WebPageMessage::MouseEvent: { WebMouseEvent event; if (!arguments.decode(event)) return; connection->send(WebPageProxyMessage::DidReceiveEvent, m_pageID, CoreIPC::In((uint32_t)event.type())); PlatformMouseEvent platformEvent = platform(event); mouseEvent(platformEvent); break; } case WebPageMessage::WheelEvent: { WebWheelEvent event; if (!arguments.decode(event)) return; connection->send(WebPageProxyMessage::DidReceiveEvent, m_pageID, CoreIPC::In((uint32_t)event.type())); PlatformWheelEvent platformEvent = platform(event); wheelEvent(platformEvent); break; } case WebPageMessage::KeyEvent: { WebKeyboardEvent event; if (!arguments.decode(event)) return; connection->send(WebPageProxyMessage::DidReceiveEvent, m_pageID, CoreIPC::In((uint32_t)event.type())); PlatformKeyboardEvent platformEvent = platform(event); keyEvent(platformEvent); break; } case WebPageMessage::LoadURL: { String url; if (!arguments.decode(url)) return; loadURL(url); break; } case WebPageMessage::StopLoading: stopLoading(); break; case WebPageMessage::Reload: bool reloadFromOrigin; if (!arguments.decode(CoreIPC::Out(reloadFromOrigin))) return; reload(reloadFromOrigin); break; case WebPageMessage::GoForward: goForward(); break; case WebPageMessage::GoBack: goBack(); break; case WebPageMessage::DidReceivePolicyDecision: { uint64_t frameID; uint64_t listenerID; uint32_t policyAction; if (!arguments.decode(CoreIPC::Out(frameID, listenerID, policyAction))) return; didReceivePolicyDecision(webFrame(frameID), listenerID, (WebCore::PolicyAction)policyAction); break; } case WebPageMessage::RunJavaScriptInMainFrame: { String script; uint64_t callbackID; if (!arguments.decode(CoreIPC::Out(script, callbackID))) return; runJavaScriptInMainFrame(script, callbackID); break; } case WebPageMessage::GetRenderTreeExternalRepresentation: { uint64_t callbackID; if (!arguments.decode(callbackID)) return; getRenderTreeExternalRepresentation(callbackID); break; } case WebPageMessage::Close: { close(); break; } case WebPageMessage::TryClose: { tryClose(); break; } default: ASSERT_NOT_REACHED(); break; } }
void WebPageProxy::didReceiveMessage(CoreIPC::Connection* connection, CoreIPC::MessageID messageID, CoreIPC::ArgumentDecoder& arguments) { if (messageID.is<CoreIPC::MessageClassDrawingAreaProxy>()) { m_drawingArea->didReceiveMessage(connection, messageID, arguments); return; } switch (messageID.get<WebPageProxyMessage::Kind>()) { case WebPageProxyMessage::DidCreateMainFrame: { uint64_t frameID; if (!arguments.decode(frameID)) return; didCreateMainFrame(frameID); break; } case WebPageProxyMessage::DidCreateSubFrame: { uint64_t frameID; if (!arguments.decode(frameID)) return; didCreateSubFrame(frameID); break; } case WebPageProxyMessage::DidStartProvisionalLoadForFrame: { uint64_t frameID; String url; if (!arguments.decode(CoreIPC::Out(frameID, url))) return; didStartProvisionalLoadForFrame(webFrame(frameID), url); break; } case WebPageProxyMessage::DidReceiveServerRedirectForProvisionalLoadForFrame: { uint64_t frameID; if (!arguments.decode(frameID)) return; didReceiveServerRedirectForProvisionalLoadForFrame(webFrame(frameID)); break; } case WebPageProxyMessage::DidFailProvisionalLoadForFrame: { uint64_t frameID; if (!arguments.decode(frameID)) return; didFailProvisionalLoadForFrame(webFrame(frameID)); break; } case WebPageProxyMessage::DidCommitLoadForFrame: { uint64_t frameID; if (!arguments.decode(frameID)) return; didCommitLoadForFrame(webFrame(frameID)); break; } case WebPageProxyMessage::DidFinishLoadForFrame: { uint64_t frameID; if (!arguments.decode(frameID)) return; didFinishLoadForFrame(webFrame(frameID)); break; } case WebPageProxyMessage::DidFailLoadForFrame: { uint64_t frameID; if (!arguments.decode(frameID)) return; didFailLoadForFrame(webFrame(frameID)); break; } case WebPageProxyMessage::DidReceiveTitleForFrame: { uint64_t frameID; String title; if (!arguments.decode(CoreIPC::Out(frameID, title))) return; didReceiveTitleForFrame(webFrame(frameID), title); break; } case WebPageProxyMessage::DidFirstLayoutForFrame: { uint64_t frameID; if (!arguments.decode(frameID)) return; didFirstLayoutForFrame(webFrame(frameID)); break; } case WebPageProxyMessage::DidFirstVisuallyNonEmptyLayoutForFrame: { uint64_t frameID; if (!arguments.decode(frameID)) return; didFirstVisuallyNonEmptyLayoutForFrame(webFrame(frameID)); break; } case WebPageProxyMessage::DidStartProgress: didStartProgress(); break; case WebPageProxyMessage::DidChangeProgress: { double value; if (!arguments.decode(value)) return; didChangeProgress(value); break; } case WebPageProxyMessage::DidFinishProgress: didFinishProgress(); break; case WebPageProxyMessage::DidReceiveEvent: { uint32_t type; if (!arguments.decode(type)) return; didReceiveEvent((WebEvent::Type)type); break; } case WebPageProxyMessage::TakeFocus: { // FIXME: Use enum here. bool direction; if (!arguments.decode(direction)) return; takeFocus(direction); break; } case WebPageProxyMessage::DidChangeCanGoBack: { bool canGoBack; if (!arguments.decode(canGoBack)) return; m_canGoBack = canGoBack; break; } case WebPageProxyMessage::DidChangeCanGoForward: { bool canGoForward; if (!arguments.decode(canGoForward)) return; m_canGoForward = canGoForward; break; } case WebPageProxyMessage::DecidePolicyForNavigationAction: { uint64_t frameID; uint32_t navigationType; String url; uint64_t listenerID; if (!arguments.decode(CoreIPC::Out(frameID, navigationType, url, listenerID))) return; decidePolicyForNavigationAction(webFrame(frameID), navigationType, url, listenerID); break; } case WebPageProxyMessage::DecidePolicyForNewWindowAction: { uint64_t frameID; uint32_t navigationType; String url; uint64_t listenerID; if (!arguments.decode(CoreIPC::Out(frameID, navigationType, url, listenerID))) return; decidePolicyForNewWindowAction(webFrame(frameID), navigationType, url, listenerID); break; } case WebPageProxyMessage::DecidePolicyForMIMEType: { uint64_t frameID; String MIMEType; String url; uint64_t listenerID; if (!arguments.decode(CoreIPC::Out(frameID, MIMEType, url, listenerID))) return; decidePolicyForMIMEType(webFrame(frameID), MIMEType, url, listenerID); break; } case WebPageProxyMessage::DidRunJavaScriptInMainFrame: { String resultString; uint64_t callbackID; if (!arguments.decode(CoreIPC::Out(resultString, callbackID))) return; didRunJavaScriptInMainFrame(resultString, callbackID); break; } case WebPageProxyMessage::DidGetRenderTreeExternalRepresentation: { String resultString; uint64_t callbackID; if (!arguments.decode(CoreIPC::Out(resultString, callbackID))) return; didGetRenderTreeExternalRepresentation(resultString, callbackID); break; } case WebPageProxyMessage::SetToolTip: { String toolTip; if (!arguments.decode(toolTip)) return; setToolTip(toolTip); break; } case WebPageProxyMessage::ShowPage: { showPage(); break; } case WebPageProxyMessage::ClosePage: { closePage(); break; } case WebPageProxyMessage::DidNavigateWithNavigationData: { WebNavigationDataStore store; uint64_t frameID; if (!arguments.decode(CoreIPC::Out(store, frameID))) return; didNavigateWithNavigationData(webFrame(frameID), store); break; } case WebPageProxyMessage::DidPerformClientRedirect: { String sourceURLString; String destinationURLString; uint64_t frameID; if (!arguments.decode(CoreIPC::Out(sourceURLString, destinationURLString, frameID))) return; didPerformClientRedirect(webFrame(frameID), sourceURLString, destinationURLString); break; } case WebPageProxyMessage::DidPerformServerRedirect: { String sourceURLString; String destinationURLString; uint64_t frameID; if (!arguments.decode(CoreIPC::Out(sourceURLString, destinationURLString, frameID))) return; didPerformServerRedirect(webFrame(frameID), sourceURLString, destinationURLString); break; } case WebPageProxyMessage::DidUpdateHistoryTitle: { String title; String url; uint64_t frameID; if (!arguments.decode(CoreIPC::Out(title, url, frameID))) return; didUpdateHistoryTitle(webFrame(frameID), title, url); break; } default: ASSERT_NOT_REACHED(); break; } }
QString FrameLoaderClientQt::chooseFile(const QString& oldFile) { return webFrame()->page()->chooseFile(webFrame(), oldFile); }