blob: e969d2a325e35d140db5e9a48854c9ffec48d628 [file] [log] [blame]
/*
* Copyright (C) 2007 Holger Hans Peter Freyther
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
*
* 1. Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
* 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
* 3. Neither the name of Apple, Inc. ("Apple") nor the names of
* its contributors may be used to endorse or promote products derived
* from this software without specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED BY APPLE AND ITS CONTRIBUTORS "AS IS" AND ANY
* EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
* DISCLAIMED. IN NO EVENT SHALL APPLE OR ITS CONTRIBUTORS BE LIABLE FOR ANY
* DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
* (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
* ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#include "config.h"
#include "ChromeClientGtk.h"
#include "FloatRect.h"
#include "IntRect.h"
#include "PlatformString.h"
#include "CString.h"
#include "HitTestResult.h"
#include "KURL.h"
#include "webkitgtkpage.h"
#include "webkitgtkprivate.h"
#include "NotImplemented.h"
using namespace WebCore;
namespace WebKit {
ChromeClient::ChromeClient(WebKitPage* page)
: m_webPage(page)
, m_didSendLinkSignal(false)
{
}
void ChromeClient::chromeDestroyed()
{
notImplemented();
}
FloatRect ChromeClient::windowRect()
{
notImplemented();
return FloatRect();
}
void ChromeClient::setWindowRect(const FloatRect& r)
{
notImplemented();
}
FloatRect ChromeClient::pageRect()
{
notImplemented();
return FloatRect();
}
float ChromeClient::scaleFactor()
{
notImplemented();
return 1.0;
}
void ChromeClient::focus()
{
notImplemented();
}
void ChromeClient::unfocus()
{
notImplemented();
}
Page* ChromeClient::createWindow(Frame*, const FrameLoadRequest&)
{
/* TODO: FrameLoadRequest is not used */
WebKitPage* page = WEBKIT_PAGE_GET_CLASS(m_webPage)->create_page(m_webPage);
if (!page)
return 0;
WebKitPagePrivate *privateData = WEBKIT_PAGE_GET_PRIVATE(WEBKIT_PAGE(page));
return privateData->page;
}
Page* ChromeClient::createModalDialog(Frame*, const FrameLoadRequest&)
{
notImplemented();
return 0;
}
void ChromeClient::show()
{
notImplemented();
}
bool ChromeClient::canRunModal()
{
notImplemented();
return false;
}
void ChromeClient::runModal()
{
notImplemented();
}
void ChromeClient::setToolbarsVisible(bool)
{
notImplemented();
}
bool ChromeClient::toolbarsVisible()
{
notImplemented();
return false;
}
void ChromeClient::setStatusbarVisible(bool)
{
notImplemented();
}
bool ChromeClient::statusbarVisible()
{
notImplemented();
return false;
}
void ChromeClient::setScrollbarsVisible(bool)
{
notImplemented();
}
bool ChromeClient::scrollbarsVisible() {
notImplemented();
return false;
}
void ChromeClient::setMenubarVisible(bool)
{
notImplemented();
}
bool ChromeClient::menubarVisible()
{
notImplemented();
return false;
}
void ChromeClient::setResizable(bool)
{
notImplemented();
}
void ChromeClient::closeWindowSoon()
{
notImplemented();
}
bool ChromeClient::canTakeFocus(FocusDirection)
{
notImplemented();
return true;
}
void ChromeClient::takeFocus(FocusDirection)
{
notImplemented();
}
bool ChromeClient::canRunBeforeUnloadConfirmPanel()
{
notImplemented();
return false;
}
bool ChromeClient::runBeforeUnloadConfirmPanel(const WebCore::String&, WebCore::Frame*)
{
notImplemented();
return false;
}
void ChromeClient::addMessageToConsole(const WebCore::String& message, unsigned int lineNumber, const WebCore::String& sourceId)
{
CString messageString = message.utf8();
CString sourceIdString = sourceId.utf8();
WEBKIT_PAGE_GET_CLASS(m_webPage)->java_script_console_message(m_webPage, messageString.data(), lineNumber, sourceIdString.data());
}
void ChromeClient::runJavaScriptAlert(Frame* frame, const String& message)
{
CString messageString = message.utf8();
WEBKIT_PAGE_GET_CLASS(m_webPage)->java_script_alert(m_webPage, kit(frame), messageString.data());
}
bool ChromeClient::runJavaScriptConfirm(Frame* frame, const String& message)
{
CString messageString = message.utf8();
return WEBKIT_PAGE_GET_CLASS(m_webPage)->java_script_confirm(m_webPage, kit(frame), messageString.data());
}
bool ChromeClient::runJavaScriptPrompt(Frame* frame, const String& message, const String& defaultValue, String& result)
{
CString messageString = message.utf8();
CString defaultValueString = defaultValue.utf8();
gchar* cresult = WEBKIT_PAGE_GET_CLASS(m_webPage)->java_script_prompt(m_webPage,
kit(frame),
messageString.data(),
defaultValueString.data());
if (!cresult)
return false;
else {
result = String::fromUTF8(cresult);
g_free(cresult);
return true;
}
}
void ChromeClient::setStatusbarText(const String& string)
{
CString stringMessage = string.utf8();
g_signal_emit_by_name(m_webPage, "status_bar_text_changed", stringMessage.data());
}
bool ChromeClient::shouldInterruptJavaScript()
{
notImplemented();
return false;
}
bool ChromeClient::tabsToLinks() const
{
notImplemented();
return false;
}
IntRect ChromeClient::windowResizerRect() const
{
notImplemented();
return IntRect();
}
void ChromeClient::addToDirtyRegion(const IntRect&)
{
notImplemented();
}
void ChromeClient::scrollBackingStore(int dx, int dy, const IntRect& scrollViewRect, const IntRect& clipRect)
{
notImplemented();
}
void ChromeClient::updateBackingStore()
{
notImplemented();
}
void ChromeClient::mouseDidMoveOverElement(const HitTestResult& hit, unsigned modifierFlags)
{
// check if the element is a link...
bool isLink = hit.isLiveLink();
if (isLink && !m_didSendLinkSignal) {
KURL url = hit.absoluteLinkURL();
if (!url.isEmpty()) {
CString titleString = hit.title().utf8();
DeprecatedCString urlString = url.prettyURL().utf8();
g_signal_emit_by_name(m_webPage, "hovering_over_link", titleString.data(), urlString.data());
m_didSendLinkSignal = true;
}
} else if (!isLink && m_didSendLinkSignal) {
g_signal_emit_by_name(m_webPage, "hovering_over_link", 0, 0);
m_didSendLinkSignal = false;
}
}
void ChromeClient::setToolTip(const String&)
{
notImplemented();
}
void ChromeClient::print(Frame*)
{
notImplemented();
}
}