Diff
Modified: trunk/Source/WebKit2/ChangeLog (150281 => 150282)
--- trunk/Source/WebKit2/ChangeLog 2013-05-17 19:06:43 UTC (rev 150281)
+++ trunk/Source/WebKit2/ChangeLog 2013-05-17 19:15:45 UTC (rev 150282)
@@ -1,3 +1,79 @@
+2013-05-17 Brady Eidson <beid...@apple.com>
+
+ Replace WebFrameLoaderClient static_casts with a function that might return null.
+ https://bugs.webkit.org/show_bug.cgi?id=116253
+
+ The general approach here is:
+ 1 - Introduce a toWebFrameLoaderClient() function to convert FrameLoaderClients, and that may return null.
+ 2 - Adopt toWebFrameLoaderClient() everywhere we used to do a direct static_cast<WebFrameLoaderClient*>
+ 3 - In functions that already support a "return 0" scenario, a failed cast results in a return 0.
+ 4 - In other functions that assume no failure to get the WebFrameLoaderClient, add an ASSERT.
+
+ Reviewed by Alexey Proskuryakov.
+
+ Add the utility function to cast:
+ * WebProcess/WebCoreSupport/WebFrameLoaderClient.h:
+ (WebKit::toWebFrameLoaderClient):
+
+ Adopt it everywhere:
+ * WebProcess/Geolocation/GeolocationPermissionRequestManager.cpp:
+ (WebKit::GeolocationPermissionRequestManager::startRequestForGeolocation):
+
+ * WebProcess/InjectedBundle/DOM/InjectedBundleNodeHandle.cpp:
+ (WebKit::InjectedBundleNodeHandle::documentFrame):
+ (WebKit::InjectedBundleNodeHandle::htmlFrameElementContentFrame):
+ (WebKit::InjectedBundleNodeHandle::htmlIFrameElementContentFrame):
+
+ * WebProcess/InjectedBundle/InjectedBundle.cpp:
+ (WebKit::InjectedBundle::overrideBoolPreferenceForTestRunner):
+
+ * WebProcess/InjectedBundle/InjectedBundleDOMWindowExtension.cpp:
+ (WebKit::InjectedBundleDOMWindowExtension::frame):
+
+ * WebProcess/InjectedBundle/InjectedBundleHitTestResult.cpp:
+ (WebKit::InjectedBundleHitTestResult::frame):
+ (WebKit::InjectedBundleHitTestResult::targetFrame):
+
+ * WebProcess/Network/WebResourceLoadScheduler.cpp:
+ (WebKit::WebResourceLoadScheduler::scheduleLoad):
+
+ * WebProcess/Plugins/PluginView.cpp:
+ (WebKit::webPage):
+ (WebKit::PluginView::performFrameLoadURLRequest):
+
+ * WebProcess/WebCoreSupport/WebChromeClient.cpp:
+ (WebKit::WebChromeClient::focusedNodeChanged):
+ (WebKit::WebChromeClient::focusedFrameChanged):
+ (WebKit::WebChromeClient::runBeforeUnloadConfirmPanel):
+ (WebKit::WebChromeClient::runJavaScriptAlert):
+ (WebKit::WebChromeClient::runJavaScriptConfirm):
+ (WebKit::WebChromeClient::runJavaScriptPrompt):
+ (WebKit::WebChromeClient::print):
+ (WebKit::WebChromeClient::exceededDatabaseQuota):
+ (WebKit::WebChromeClient::runOpenPanel):
+
+ * WebProcess/WebCoreSupport/WebEditorClient.cpp:
+ (WebKit::WebEditorClient::textFieldDidBeginEditing):
+ (WebKit::WebEditorClient::textFieldDidEndEditing):
+ (WebKit::WebEditorClient::textDidChangeInTextField):
+ (WebKit::WebEditorClient::textDidChangeInTextArea):
+ (WebKit::WebEditorClient::doTextFieldCommandFromEvent):
+ (WebKit::WebEditorClient::textWillBeDeletedInTextField):
+
+ * WebProcess/WebCoreSupport/WebFrameLoaderClient.cpp:
+ (WebKit::WebFrameLoaderClient::dispatchWillSendSubmitEvent):
+ (WebKit::WebFrameLoaderClient::dispatchWillSubmitForm):
+
+ * WebProcess/WebPage/WebFrame.cpp:
+ (WebKit::WebFrame::contentsAsString):
+ (WebKit::WebFrame::parentFrame):
+ (WebKit::WebFrame::childFrames):
+ (WebKit::WebFrame::frameForContext):
+ (WebKit::WebFrameFilter::shouldIncludeSubframe):
+
+ * WebProcess/WebPage/WebPage.cpp:
+ (WebKit::WebPage::mainFrameHasCustomRepresentation):
+
2013-05-17 Sam Weinig <s...@webkit.org>
Expose new load-with-userData API to Objective-C
Modified: trunk/Source/WebKit2/WebProcess/Geolocation/GeolocationPermissionRequestManager.cpp (150281 => 150282)
--- trunk/Source/WebKit2/WebProcess/Geolocation/GeolocationPermissionRequestManager.cpp 2013-05-17 19:06:43 UTC (rev 150281)
+++ trunk/Source/WebKit2/WebProcess/Geolocation/GeolocationPermissionRequestManager.cpp 2013-05-17 19:15:45 UTC (rev 150282)
@@ -62,7 +62,10 @@
Frame* frame = geolocation->frame();
- WebFrame* webFrame = static_cast<WebFrameLoaderClient*>(frame->loader()->client())->webFrame();
+ WebFrameLoaderClient* webFrameLoaderClient = toWebFrameLoaderClient(frame->loader()->client());
+ WebFrame* webFrame = webFrameLoaderClient ? webFrameLoaderClient->webFrame() : 0;
+ ASSERT(webFrame);
+
SecurityOrigin* origin = frame->document()->securityOrigin();
m_page->send(Messages::WebPageProxy::RequestGeolocationPermissionForFrame(geolocationID, webFrame->frameID(), origin->databaseIdentifier()));
Modified: trunk/Source/WebKit2/WebProcess/InjectedBundle/DOM/InjectedBundleNodeHandle.cpp (150281 => 150282)
--- trunk/Source/WebKit2/WebProcess/InjectedBundle/DOM/InjectedBundleNodeHandle.cpp 2013-05-17 19:06:43 UTC (rev 150281)
+++ trunk/Source/WebKit2/WebProcess/InjectedBundle/DOM/InjectedBundleNodeHandle.cpp 2013-05-17 19:15:45 UTC (rev 150282)
@@ -235,7 +235,8 @@
if (!frame)
return 0;
- return static_cast<WebFrameLoaderClient*>(frame->loader()->client())->webFrame();
+ WebFrameLoaderClient* webFrameLoaderClient = toWebFrameLoaderClient(frame->loader()->client());
+ return webFrameLoaderClient ? webFrameLoaderClient->webFrame() : 0;
}
PassRefPtr<WebFrame> InjectedBundleNodeHandle::htmlFrameElementContentFrame()
@@ -247,7 +248,8 @@
if (!frame)
return 0;
- return static_cast<WebFrameLoaderClient*>(frame->loader()->client())->webFrame();
+ WebFrameLoaderClient* webFrameLoaderClient = toWebFrameLoaderClient(frame->loader()->client());
+ return webFrameLoaderClient ? webFrameLoaderClient->webFrame() : 0;
}
PassRefPtr<WebFrame> InjectedBundleNodeHandle::htmlIFrameElementContentFrame()
@@ -259,7 +261,8 @@
if (!frame)
return 0;
- return static_cast<WebFrameLoaderClient*>(frame->loader()->client())->webFrame();
+ WebFrameLoaderClient* webFrameLoaderClient = toWebFrameLoaderClient(frame->loader()->client());
+ return webFrameLoaderClient ? webFrameLoaderClient->webFrame() : 0;
}
} // namespace WebKit
Modified: trunk/Source/WebKit2/WebProcess/InjectedBundle/InjectedBundle.cpp (150281 => 150282)
--- trunk/Source/WebKit2/WebProcess/InjectedBundle/InjectedBundle.cpp 2013-05-17 19:06:43 UTC (rev 150281)
+++ trunk/Source/WebKit2/WebProcess/InjectedBundle/InjectedBundle.cpp 2013-05-17 19:15:45 UTC (rev 150282)
@@ -161,34 +161,38 @@
const HashSet<Page*>& pages = PageGroup::pageGroup(pageGroup->identifier())->pages();
if (preference == "WebKitTabToLinksPreferenceKey") {
- WebPreferencesStore::overrideBoolValueForKey(WebPreferencesKey::tabsToLinksKey(), enabled);
- for (HashSet<Page*>::iterator i = pages.begin(); i != pages.end(); ++i) {
- WebPage* webPage = static_cast<WebFrameLoaderClient*>((*i)->mainFrame()->loader()->client())->webFrame()->page();
- webPage->setTabToLinksEnabled(enabled);
+ WebPreferencesStore::overrideBoolValueForKey(WebPreferencesKey::tabsToLinksKey(), enabled);
+ for (HashSet<Page*>::iterator i = pages.begin(); i != pages.end(); ++i) {
+ WebFrameLoaderClient* webFrameLoaderClient = toWebFrameLoaderClient((*i)->mainFrame()->loader()->client());
+ ASSERT(webFrameLoaderClient);
+ webFrameLoaderClient->webFrame()->page()->setTabToLinksEnabled(enabled);
}
}
if (preference == "WebKit2AsynchronousPluginInitializationEnabled") {
WebPreferencesStore::overrideBoolValueForKey(WebPreferencesKey::asynchronousPluginInitializationEnabledKey(), enabled);
for (HashSet<Page*>::iterator i = pages.begin(); i != pages.end(); ++i) {
- WebPage* webPage = static_cast<WebFrameLoaderClient*>((*i)->mainFrame()->loader()->client())->webFrame()->page();
- webPage->setAsynchronousPluginInitializationEnabled(enabled);
+ WebFrameLoaderClient* webFrameLoaderClient = toWebFrameLoaderClient((*i)->mainFrame()->loader()->client());
+ ASSERT(webFrameLoaderClient);
+ webFrameLoaderClient->webFrame()->page()->setAsynchronousPluginInitializationEnabled(enabled);
}
}
if (preference == "WebKit2AsynchronousPluginInitializationEnabledForAllPlugins") {
WebPreferencesStore::overrideBoolValueForKey(WebPreferencesKey::asynchronousPluginInitializationEnabledForAllPluginsKey(), enabled);
for (HashSet<Page*>::iterator i = pages.begin(); i != pages.end(); ++i) {
- WebPage* webPage = static_cast<WebFrameLoaderClient*>((*i)->mainFrame()->loader()->client())->webFrame()->page();
- webPage->setAsynchronousPluginInitializationEnabledForAllPlugins(enabled);
+ WebFrameLoaderClient* webFrameLoaderClient = toWebFrameLoaderClient((*i)->mainFrame()->loader()->client());
+ ASSERT(webFrameLoaderClient);
+ webFrameLoaderClient->webFrame()->page()->setAsynchronousPluginInitializationEnabledForAllPlugins(enabled);
}
}
if (preference == "WebKit2ArtificialPluginInitializationDelayEnabled") {
WebPreferencesStore::overrideBoolValueForKey(WebPreferencesKey::artificialPluginInitializationDelayEnabledKey(), enabled);
for (HashSet<Page*>::iterator i = pages.begin(); i != pages.end(); ++i) {
- WebPage* webPage = static_cast<WebFrameLoaderClient*>((*i)->mainFrame()->loader()->client())->webFrame()->page();
- webPage->setArtificialPluginInitializationDelayEnabled(enabled);
+ WebFrameLoaderClient* webFrameLoaderClient = toWebFrameLoaderClient((*i)->mainFrame()->loader()->client());
+ ASSERT(webFrameLoaderClient);
+ webFrameLoaderClient->webFrame()->page()->setArtificialPluginInitializationDelayEnabled(enabled);
}
}
Modified: trunk/Source/WebKit2/WebProcess/InjectedBundle/InjectedBundleDOMWindowExtension.cpp (150281 => 150282)
--- trunk/Source/WebKit2/WebProcess/InjectedBundle/InjectedBundleDOMWindowExtension.cpp 2013-05-17 19:06:43 UTC (rev 150281)
+++ trunk/Source/WebKit2/WebProcess/InjectedBundle/InjectedBundleDOMWindowExtension.cpp 2013-05-17 19:15:45 UTC (rev 150282)
@@ -71,8 +71,9 @@
WebFrame* InjectedBundleDOMWindowExtension::frame() const
{
- WebCore::Frame* frame = m_coreExtension->frame();
- return frame ? static_cast<WebFrameLoaderClient*>(frame->loader()->client())->webFrame() : 0;
+ Frame* frame = m_coreExtension->frame();
+ WebFrameLoaderClient* webFrameLoaderClient = frame ? toWebFrameLoaderClient(frame->loader()->client()) : 0;
+ return webFrameLoaderClient ? webFrameLoaderClient->webFrame() : 0;
}
InjectedBundleScriptWorld* InjectedBundleDOMWindowExtension::world() const
Modified: trunk/Source/WebKit2/WebProcess/InjectedBundle/InjectedBundleHitTestResult.cpp (150281 => 150282)
--- trunk/Source/WebKit2/WebProcess/InjectedBundle/InjectedBundleHitTestResult.cpp 2013-05-17 19:06:43 UTC (rev 150281)
+++ trunk/Source/WebKit2/WebProcess/InjectedBundle/InjectedBundleHitTestResult.cpp 2013-05-17 19:15:45 UTC (rev 150282)
@@ -64,7 +64,8 @@
if (!frame)
return 0;
- return static_cast<WebFrameLoaderClient*>(frame->loader()->client())->webFrame();
+ WebFrameLoaderClient* webFrameLoaderClient = toWebFrameLoaderClient(frame->loader()->client());
+ return webFrameLoaderClient ? webFrameLoaderClient->webFrame() : 0;
}
WebFrame* InjectedBundleHitTestResult::targetFrame() const
@@ -73,7 +74,8 @@
if (!frame)
return 0;
- return static_cast<WebFrameLoaderClient*>(frame->loader()->client())->webFrame();
+ WebFrameLoaderClient* webFrameLoaderClient = toWebFrameLoaderClient(frame->loader()->client());
+ return webFrameLoaderClient ? webFrameLoaderClient->webFrame() : 0;
}
String InjectedBundleHitTestResult::absoluteImageURL() const
Modified: trunk/Source/WebKit2/WebProcess/Network/WebResourceLoadScheduler.cpp (150281 => 150282)
--- trunk/Source/WebKit2/WebProcess/Network/WebResourceLoadScheduler.cpp 2013-05-17 19:06:43 UTC (rev 150281)
+++ trunk/Source/WebKit2/WebProcess/Network/WebResourceLoadScheduler.cpp 2013-05-17 19:15:45 UTC (rev 150282)
@@ -108,12 +108,9 @@
// FIXME: Some entities in WebCore use WebCore's "EmptyFrameLoaderClient" instead of having a proper WebFrameLoaderClient.
// EmptyFrameLoaderClient shouldn't exist and everything should be using a WebFrameLoaderClient,
// but in the meantime we have to make sure not to mis-cast.
- WebFrame* webFrame = 0;
- WebPage* webPage = 0;
- if (!resourceLoader->frameLoader()->client()->isEmptyFrameLoaderClient()) {
- webFrame = static_cast<WebFrameLoaderClient*>(resourceLoader->frameLoader()->client())->webFrame();
- webPage = webFrame->page();
- }
+ WebFrameLoaderClient* webFrameLoaderClient = toWebFrameLoaderClient(resourceLoader->frameLoader()->client());
+ WebFrame* webFrame = webFrameLoaderClient ? webFrameLoaderClient->webFrame() : 0;
+ WebPage* webPage = webFrame ? webFrame->page() : 0;
NetworkResourceLoadParameters loadParameters;
loadParameters.identifier = identifier;
Modified: trunk/Source/WebKit2/WebProcess/Plugins/PluginView.cpp (150281 => 150282)
--- trunk/Source/WebKit2/WebProcess/Plugins/PluginView.cpp 2013-05-17 19:06:43 UTC (rev 150281)
+++ trunk/Source/WebKit2/WebProcess/Plugins/PluginView.cpp 2013-05-17 19:15:45 UTC (rev 150282)
@@ -253,7 +253,8 @@
Frame* frame = pluginElement->document()->frame();
ASSERT(frame);
- WebPage* webPage = static_cast<WebFrameLoaderClient*>(frame->loader()->client())->webFrame()->page();
+ WebFrameLoaderClient* webFrameLoaderClient = toWebFrameLoaderClient(frame->loader()->client());
+ WebPage* webPage = webFrameLoaderClient ? webFrameLoaderClient->webFrame()->page() : 0;
ASSERT(webPage);
return webPage;
@@ -1103,7 +1104,10 @@
// Now ask the frame to load the request.
targetFrame->loader()->load(FrameLoadRequest(targetFrame, request->request()));
- WebFrame* targetWebFrame = static_cast<WebFrameLoaderClient*>(targetFrame->loader()->client())->webFrame();
+ WebFrameLoaderClient* webFrameLoaderClient = toWebFrameLoaderClient(targetFrame->loader()->client());
+ WebFrame* targetWebFrame = webFrameLoaderClient ? webFrameLoaderClient->webFrame() : 0;
+ ASSERT(targetWebFrame);
+
if (WebFrame::LoadListener* loadListener = targetWebFrame->loadListener()) {
// Check if another plug-in view or even this view is waiting for the frame to load.
// If it is, tell it that the load was cancelled because it will be anyway.
Modified: trunk/Source/WebKit2/WebProcess/WebCoreSupport/WebChromeClient.cpp (150281 => 150282)
--- trunk/Source/WebKit2/WebProcess/WebCoreSupport/WebChromeClient.cpp 2013-05-17 19:06:43 UTC (rev 150281)
+++ trunk/Source/WebKit2/WebProcess/WebCoreSupport/WebChromeClient.cpp 2013-05-17 19:15:45 UTC (rev 150282)
@@ -170,13 +170,16 @@
if (!inputElement->isText())
return;
- WebFrame* webFrame = static_cast<WebFrameLoaderClient*>(node->document()->frame()->loader()->client())->webFrame();
+ WebFrameLoaderClient* webFrameLoaderClient = toWebFrameLoaderClient(node->document()->frame()->loader()->client());
+ WebFrame* webFrame = webFrameLoaderClient ? webFrameLoaderClient->webFrame() : 0;
+ ASSERT(webFrame);
m_page->injectedBundleFormClient().didFocusTextField(m_page, inputElement, webFrame);
}
void WebChromeClient::focusedFrameChanged(Frame* frame)
{
- WebFrame* webFrame = frame ? static_cast<WebFrameLoaderClient*>(frame->loader()->client())->webFrame() : 0;
+ WebFrameLoaderClient* webFrameLoaderClient = toWebFrameLoaderClient(frame->loader()->client());
+ WebFrame* webFrame = webFrameLoaderClient ? webFrameLoaderClient->webFrame() : 0;
WebProcess::shared().connection()->send(Messages::WebPageProxy::FocusedFrameChanged(webFrame ? webFrame->frameID() : 0), m_page->pageID());
}
@@ -298,7 +301,9 @@
bool WebChromeClient::runBeforeUnloadConfirmPanel(const String& message, Frame* frame)
{
- WebFrame* webFrame = static_cast<WebFrameLoaderClient*>(frame->loader()->client())->webFrame();
+ WebFrameLoaderClient* webFrameLoaderClient = toWebFrameLoaderClient(frame->loader()->client());
+ WebFrame* webFrame = webFrameLoaderClient ? webFrameLoaderClient->webFrame() : 0;
+ ASSERT(webFrame);
bool shouldClose = false;
if (!WebProcess::shared().connection()->sendSync(Messages::WebPageProxy::RunBeforeUnloadConfirmPanel(message, webFrame->frameID()), Messages::WebPageProxy::RunBeforeUnloadConfirmPanel::Reply(shouldClose), m_page->pageID()))
@@ -328,7 +333,9 @@
void WebChromeClient::runJavaScriptAlert(Frame* frame, const String& alertText)
{
- WebFrame* webFrame = static_cast<WebFrameLoaderClient*>(frame->loader()->client())->webFrame();
+ WebFrameLoaderClient* webFrameLoaderClient = toWebFrameLoaderClient(frame->loader()->client());
+ WebFrame* webFrame = webFrameLoaderClient ? webFrameLoaderClient->webFrame() : 0;
+ ASSERT(webFrame);
// Notify the bundle client.
m_page->injectedBundleUIClient().willRunJavaScriptAlert(m_page, alertText, webFrame);
@@ -339,7 +346,9 @@
bool WebChromeClient::runJavaScriptConfirm(Frame* frame, const String& message)
{
- WebFrame* webFrame = static_cast<WebFrameLoaderClient*>(frame->loader()->client())->webFrame();
+ WebFrameLoaderClient* webFrameLoaderClient = toWebFrameLoaderClient(frame->loader()->client());
+ WebFrame* webFrame = webFrameLoaderClient ? webFrameLoaderClient->webFrame() : 0;
+ ASSERT(webFrame);
// Notify the bundle client.
m_page->injectedBundleUIClient().willRunJavaScriptConfirm(m_page, message, webFrame);
@@ -354,7 +363,9 @@
bool WebChromeClient::runJavaScriptPrompt(Frame* frame, const String& message, const String& defaultValue, String& result)
{
- WebFrame* webFrame = static_cast<WebFrameLoaderClient*>(frame->loader()->client())->webFrame();
+ WebFrameLoaderClient* webFrameLoaderClient = toWebFrameLoaderClient(frame->loader()->client());
+ WebFrame* webFrame = webFrameLoaderClient ? webFrameLoaderClient->webFrame() : 0;
+ ASSERT(webFrame);
// Notify the bundle client.
m_page->injectedBundleUIClient().willRunJavaScriptPrompt(m_page, message, defaultValue, webFrame);
@@ -559,14 +570,20 @@
void WebChromeClient::print(Frame* frame)
{
- WebFrame* webFrame = static_cast<WebFrameLoaderClient*>(frame->loader()->client())->webFrame();
+ WebFrameLoaderClient* webFrameLoaderClient = toWebFrameLoaderClient(frame->loader()->client());
+ WebFrame* webFrame = webFrameLoaderClient ? webFrameLoaderClient->webFrame() : 0;
+ ASSERT(webFrame);
+
m_page->sendSync(Messages::WebPageProxy::PrintFrame(webFrame->frameID()), Messages::WebPageProxy::PrintFrame::Reply());
}
#if ENABLE(SQL_DATABASE)
void WebChromeClient::exceededDatabaseQuota(Frame* frame, const String& databaseName, DatabaseDetails details)
{
- WebFrame* webFrame = static_cast<WebFrameLoaderClient*>(frame->loader()->client())->webFrame();
+ WebFrameLoaderClient* webFrameLoaderClient = toWebFrameLoaderClient(frame->loader()->client());
+ WebFrame* webFrame = webFrameLoaderClient ? webFrameLoaderClient->webFrame() : 0;
+ ASSERT(webFrame);
+
SecurityOrigin* origin = frame->document()->securityOrigin();
DatabaseManager& dbManager = DatabaseManager::manager();
@@ -659,7 +676,12 @@
RefPtr<FileChooser> fileChooser = prpFileChooser;
m_page->setActiveOpenPanelResultListener(WebOpenPanelResultListener::create(m_page, fileChooser.get()));
- m_page->send(Messages::WebPageProxy::RunOpenPanel(static_cast<WebFrameLoaderClient*>(frame->loader()->client())->webFrame()->frameID(), fileChooser->settings()));
+
+ WebFrameLoaderClient* webFrameLoaderClient = toWebFrameLoaderClient(frame->loader()->client());
+ WebFrame* webFrame = webFrameLoaderClient ? webFrameLoaderClient->webFrame() : 0;
+ ASSERT(webFrame);
+
+ m_page->send(Messages::WebPageProxy::RunOpenPanel(webFrame->frameID(), fileChooser->settings()));
}
void WebChromeClient::loadIconForFiles(const Vector<String>& filenames, FileIconLoader* loader)
Modified: trunk/Source/WebKit2/WebProcess/WebCoreSupport/WebEditorClient.cpp (150281 => 150282)
--- trunk/Source/WebKit2/WebProcess/WebCoreSupport/WebEditorClient.cpp 2013-05-17 19:06:43 UTC (rev 150281)
+++ trunk/Source/WebKit2/WebProcess/WebCoreSupport/WebEditorClient.cpp 2013-05-17 19:15:45 UTC (rev 150282)
@@ -320,7 +320,10 @@
if (!element->hasTagName(inputTag))
return;
- WebFrame* webFrame = static_cast<WebFrameLoaderClient*>(element->document()->frame()->loader()->client())->webFrame();
+ WebFrameLoaderClient* webFrameLoaderClient = toWebFrameLoaderClient(element->document()->frame()->loader()->client());
+ WebFrame* webFrame = webFrameLoaderClient ? webFrameLoaderClient->webFrame() : 0;
+ ASSERT(webFrame);
+
m_page->injectedBundleFormClient().textFieldDidBeginEditing(m_page, static_cast<HTMLInputElement*>(element), webFrame);
}
@@ -329,7 +332,10 @@
if (!element->hasTagName(inputTag))
return;
- WebFrame* webFrame = static_cast<WebFrameLoaderClient*>(element->document()->frame()->loader()->client())->webFrame();
+ WebFrameLoaderClient* webFrameLoaderClient = toWebFrameLoaderClient(element->document()->frame()->loader()->client());
+ WebFrame* webFrame = webFrameLoaderClient ? webFrameLoaderClient->webFrame() : 0;
+ ASSERT(webFrame);
+
m_page->injectedBundleFormClient().textFieldDidEndEditing(m_page, static_cast<HTMLInputElement*>(element), webFrame);
}
@@ -341,7 +347,10 @@
if (!UserTypingGestureIndicator::processingUserTypingGesture() || UserTypingGestureIndicator::focusedElementAtGestureStart() != element)
return;
- WebFrame* webFrame = static_cast<WebFrameLoaderClient*>(element->document()->frame()->loader()->client())->webFrame();
+ WebFrameLoaderClient* webFrameLoaderClient = toWebFrameLoaderClient(element->document()->frame()->loader()->client());
+ WebFrame* webFrame = webFrameLoaderClient ? webFrameLoaderClient->webFrame() : 0;
+ ASSERT(webFrame);
+
m_page->injectedBundleFormClient().textDidChangeInTextField(m_page, static_cast<HTMLInputElement*>(element), webFrame);
}
@@ -350,7 +359,10 @@
if (!element->hasTagName(textareaTag))
return;
- WebFrame* webFrame = static_cast<WebFrameLoaderClient*>(element->document()->frame()->loader()->client())->webFrame();
+ WebFrameLoaderClient* webFrameLoaderClient = toWebFrameLoaderClient(element->document()->frame()->loader()->client());
+ WebFrame* webFrame = webFrameLoaderClient ? webFrameLoaderClient->webFrame() : 0;
+ ASSERT(webFrame);
+
m_page->injectedBundleFormClient().textDidChangeInTextArea(m_page, static_cast<HTMLTextAreaElement*>(element), webFrame);
}
@@ -385,7 +397,10 @@
if (!getActionTypeForKeyEvent(event, actionType))
return false;
- WebFrame* webFrame = static_cast<WebFrameLoaderClient*>(element->document()->frame()->loader()->client())->webFrame();
+ WebFrameLoaderClient* webFrameLoaderClient = toWebFrameLoaderClient(element->document()->frame()->loader()->client());
+ WebFrame* webFrame = webFrameLoaderClient ? webFrameLoaderClient->webFrame() : 0;
+ ASSERT(webFrame);
+
return m_page->injectedBundleFormClient().shouldPerformActionInTextField(m_page, static_cast<HTMLInputElement*>(element), actionType, webFrame);
}
@@ -394,7 +409,10 @@
if (!element->hasTagName(inputTag))
return;
- WebFrame* webFrame = static_cast<WebFrameLoaderClient*>(element->document()->frame()->loader()->client())->webFrame();
+ WebFrameLoaderClient* webFrameLoaderClient = toWebFrameLoaderClient(element->document()->frame()->loader()->client());
+ WebFrame* webFrame = webFrameLoaderClient ? webFrameLoaderClient->webFrame() : 0;
+ ASSERT(webFrame);
+
m_page->injectedBundleFormClient().shouldPerformActionInTextField(m_page, static_cast<HTMLInputElement*>(element), WKInputFieldActionTypeInsertDelete, webFrame);
}
Modified: trunk/Source/WebKit2/WebProcess/WebCoreSupport/WebFrameLoaderClient.cpp (150281 => 150282)
--- trunk/Source/WebKit2/WebProcess/WebCoreSupport/WebFrameLoaderClient.cpp 2013-05-17 19:06:43 UTC (rev 150281)
+++ trunk/Source/WebKit2/WebProcess/WebCoreSupport/WebFrameLoaderClient.cpp 2013-05-17 19:15:45 UTC (rev 150282)
@@ -735,8 +735,11 @@
RefPtr<FormState> formState = prpFormState;
HTMLFormElement* form = formState->form();
- WebFrame* sourceFrame = static_cast<WebFrameLoaderClient*>(formState->sourceDocument()->frame()->loader()->client())->webFrame();
+ WebFrameLoaderClient* webFrameLoaderClient = toWebFrameLoaderClient(formState->sourceDocument()->frame()->loader()->client());
+ WebFrame* sourceFrame = webFrameLoaderClient ? webFrameLoaderClient->webFrame() : 0;
+ ASSERT(sourceFrame);
+
webPage->injectedBundleFormClient().willSendSubmitEvent(webPage, form, m_frame, sourceFrame, formState->textFieldValues());
}
@@ -750,7 +753,11 @@
RefPtr<FormState> formState = prpFormState;
HTMLFormElement* form = formState->form();
- WebFrame* sourceFrame = static_cast<WebFrameLoaderClient*>(formState->sourceDocument()->frame()->loader()->client())->webFrame();
+
+ WebFrameLoaderClient* webFrameLoaderClient = toWebFrameLoaderClient(formState->sourceDocument()->frame()->loader()->client());
+ WebFrame* sourceFrame = webFrameLoaderClient ? webFrameLoaderClient->webFrame() : 0;
+ ASSERT(sourceFrame);
+
const Vector<std::pair<String, String>>& values = formState->textFieldValues();
RefPtr<APIObject> userData;
Modified: trunk/Source/WebKit2/WebProcess/WebCoreSupport/WebFrameLoaderClient.h (150281 => 150282)
--- trunk/Source/WebKit2/WebProcess/WebCoreSupport/WebFrameLoaderClient.h 2013-05-17 19:06:43 UTC (rev 150281)
+++ trunk/Source/WebKit2/WebProcess/WebCoreSupport/WebFrameLoaderClient.h 2013-05-17 19:15:45 UTC (rev 150282)
@@ -232,6 +232,12 @@
bool m_frameCameFromPageCache;
};
+// As long as EmptyFrameLoaderClient exists in WebCore, this can return 0.
+inline WebFrameLoaderClient* toWebFrameLoaderClient(WebCore::FrameLoaderClient* client)
+{
+ return client->isEmptyFrameLoaderClient() ? 0 : static_cast<WebFrameLoaderClient*>(client);
+}
+
} // namespace WebKit
#endif // WebFrameLoaderClient_h
Modified: trunk/Source/WebKit2/WebProcess/WebPage/WebFrame.cpp (150281 => 150282)
--- trunk/Source/WebKit2/WebProcess/WebPage/WebFrame.cpp 2013-05-17 19:06:43 UTC (rev 150281)
+++ trunk/Source/WebKit2/WebProcess/WebPage/WebFrame.cpp 2013-05-17 19:15:45 UTC (rev 150282)
@@ -295,7 +295,12 @@
for (Frame* child = m_coreFrame->tree()->firstChild(); child; child = child->tree()->nextSibling()) {
if (!builder.isEmpty())
builder.append(' ');
- builder.append(static_cast<WebFrameLoaderClient*>(child->loader()->client())->webFrame()->contentsAsString());
+
+ WebFrameLoaderClient* webFrameLoaderClient = toWebFrameLoaderClient(child->loader()->client());
+ WebFrame* webFrame = webFrameLoaderClient ? webFrameLoaderClient->webFrame() : 0;
+ ASSERT(webFrame);
+
+ builder.append(webFrame->contentsAsString());
}
// FIXME: It may make sense to use toStringPreserveCapacity() here.
return builder.toString();
@@ -394,7 +399,8 @@
if (!m_coreFrame || !m_coreFrame->ownerElement() || !m_coreFrame->ownerElement()->document())
return 0;
- return static_cast<WebFrameLoaderClient*>(m_coreFrame->ownerElement()->document()->frame()->loader()->client())->webFrame();
+ WebFrameLoaderClient* webFrameLoaderClient = toWebFrameLoaderClient(m_coreFrame->ownerElement()->document()->frame()->loader()->client());
+ return webFrameLoaderClient ? webFrameLoaderClient->webFrame() : 0;
}
PassRefPtr<ImmutableArray> WebFrame::childFrames()
@@ -410,7 +416,9 @@
vector.reserveInitialCapacity(size);
for (Frame* child = m_coreFrame->tree()->firstChild(); child; child = child->tree()->nextSibling()) {
- WebFrame* webFrame = static_cast<WebFrameLoaderClient*>(child->loader()->client())->webFrame();
+ WebFrameLoaderClient* webFrameLoaderClient = toWebFrameLoaderClient(child->loader()->client());
+ WebFrame* webFrame = webFrameLoaderClient ? webFrameLoaderClient->webFrame() : 0;
+ ASSERT(webFrame);
vector.uncheckedAppend(webFrame);
}
@@ -613,7 +621,9 @@
return 0;
Frame* coreFrame = static_cast<JSDOMWindowShell*>(globalObjectObj)->window()->impl()->frame();
- return static_cast<WebFrameLoaderClient*>(coreFrame->loader()->client())->webFrame();
+
+ WebFrameLoaderClient* webFrameLoaderClient = toWebFrameLoaderClient(coreFrame->loader()->client());
+ return webFrameLoaderClient ? webFrameLoaderClient->webFrame() : 0;
}
JSValueRef WebFrame::jsWrapperForWorld(InjectedBundleNodeHandle* nodeHandle, InjectedBundleScriptWorld* world)
@@ -736,8 +746,11 @@
{
if (!m_callback)
return true;
-
- WebFrame* webFrame = static_cast<WebFrameLoaderClient*>(frame->loader()->client())->webFrame();
+
+ WebFrameLoaderClient* webFrameLoaderClient = toWebFrameLoaderClient(frame->loader()->client());
+ WebFrame* webFrame = webFrameLoaderClient ? webFrameLoaderClient->webFrame() : 0;
+ ASSERT(webFrame);
+
return m_callback(toAPI(m_topLevelWebFrame), toAPI(webFrame), m_context);
}
Modified: trunk/Source/WebKit2/WebProcess/WebPage/WebPage.cpp (150281 => 150282)
--- trunk/Source/WebKit2/WebProcess/WebPage/WebPage.cpp 2013-05-17 19:06:43 UTC (rev 150281)
+++ trunk/Source/WebKit2/WebProcess/WebPage/WebPage.cpp 2013-05-17 19:15:45 UTC (rev 150282)
@@ -2975,8 +2975,11 @@
bool WebPage::mainFrameHasCustomRepresentation() const
{
- if (Frame* frame = mainFrame())
- return static_cast<WebFrameLoaderClient*>(frame->loader()->client())->frameHasCustomRepresentation();
+ if (Frame* frame = mainFrame()) {
+ WebFrameLoaderClient* webFrameLoaderClient = toWebFrameLoaderClient(frame->loader()->client());
+ ASSERT(webFrameLoaderClient);
+ return webFrameLoaderClient->frameHasCustomRepresentation();
+ }
return false;
}