1/*
2 * Copyright (C) 2010 Apple Inc. All rights reserved.
3 * Portions Copyright (c) 2010 Motorola Mobility, Inc.  All rights reserved.
4 * Copyright (C) 2011 Igalia S.L.
5 *
6 * Redistribution and use in source and binary forms, with or without
7 * modification, are permitted provided that the following conditions
8 * are met:
9 * 1. Redistributions of source code must retain the above copyright
10 *    notice, this list of conditions and the following disclaimer.
11 * 2. Redistributions in binary form must reproduce the above copyright
12 *    notice, this list of conditions and the following disclaimer in the
13 *    documentation and/or other materials provided with the distribution.
14 *
15 * THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS''
16 * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
17 * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
18 * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS
19 * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
20 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
21 * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
22 * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
23 * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
24 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
25 * THE POSSIBILITY OF SUCH DAMAGE.
26 */
27
28#include "config.h"
29#include "WebPage.h"
30
31#include "NotImplemented.h"
32#include "WebEvent.h"
33#include "WindowsKeyboardCodes.h"
34#include <WebCore/FocusController.h>
35#include <WebCore/Frame.h>
36#include <WebCore/KeyboardEvent.h>
37#include <WebCore/Page.h>
38#include <WebCore/PlatformKeyboardEvent.h>
39#include <WebCore/Settings.h>
40
41using namespace WebCore;
42
43namespace WebKit {
44
45void WebPage::platformInitialize()
46{
47    notImplemented();
48}
49
50void WebPage::platformPreferencesDidChange(const WebPreferencesStore&)
51{
52    notImplemented();
53}
54
55static inline void scroll(Page* page, ScrollDirection direction, ScrollGranularity granularity)
56{
57    page->focusController()->focusedOrMainFrame()->eventHandler()->scrollRecursively(direction, granularity);
58}
59
60bool WebPage::performDefaultBehaviorForKeyEvent(const WebKeyboardEvent& keyboardEvent)
61{
62    if (keyboardEvent.type() != WebEvent::KeyDown && keyboardEvent.type() != WebEvent::RawKeyDown)
63        return false;
64
65    switch (keyboardEvent.windowsVirtualKeyCode()) {
66    case VK_BACK:
67        if (keyboardEvent.shiftKey())
68            m_page->goForward();
69        else
70            m_page->goBack();
71        break;
72    case VK_SPACE:
73        scroll(m_page.get(), keyboardEvent.shiftKey() ? ScrollUp : ScrollDown, ScrollByPage);
74        break;
75    case VK_LEFT:
76        scroll(m_page.get(), ScrollLeft, ScrollByLine);
77        break;
78    case VK_RIGHT:
79        scroll(m_page.get(), ScrollRight, ScrollByLine);
80        break;
81    case VK_UP:
82        scroll(m_page.get(), ScrollUp, ScrollByLine);
83        break;
84    case VK_DOWN:
85        scroll(m_page.get(), ScrollDown, ScrollByLine);
86        break;
87    case VK_HOME:
88        scroll(m_page.get(), ScrollUp, ScrollByDocument);
89        break;
90    case VK_END:
91        scroll(m_page.get(), ScrollDown, ScrollByDocument);
92        break;
93    case VK_PRIOR:
94        scroll(m_page.get(), ScrollUp, ScrollByPage);
95        break;
96    case VK_NEXT:
97        scroll(m_page.get(), ScrollDown, ScrollByPage);
98        break;
99    default:
100        return false;
101    }
102
103    return true;
104}
105
106bool WebPage::platformHasLocalDataForURL(const WebCore::KURL&)
107{
108    // FIXME: Implement
109    notImplemented();
110    return false;
111}
112
113String WebPage::cachedResponseMIMETypeForURL(const WebCore::KURL&)
114{
115    // FIXME: Implement
116    return String();
117}
118
119bool WebPage::platformCanHandleRequest(const WebCore::ResourceRequest&)
120{
121    // FIXME: Implement
122    return true;
123}
124
125} // namespace WebKit
126