1563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark/*
2563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark * Copyright (C) 2005, 2006, 2007, 2008 Apple Inc. All rights reserved.
3563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark *
4563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark * Redistribution and use in source and binary forms, with or without
5563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark * modification, are permitted provided that the following conditions
6563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark * are met:
7563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark *
8563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark * 1.  Redistributions of source code must retain the above copyright
9563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark *     notice, this list of conditions and the following disclaimer.
10563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark * 2.  Redistributions in binary form must reproduce the above copyright
11563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark *     notice, this list of conditions and the following disclaimer in the
12563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark *     documentation and/or other materials provided with the distribution.
13563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark * 3.  Neither the name of Apple Computer, Inc. ("Apple") nor the names of
14563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark *     its contributors may be used to endorse or promote products derived
15563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark *     from this software without specific prior written permission.
16563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark *
17563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark * THIS SOFTWARE IS PROVIDED BY APPLE AND ITS CONTRIBUTORS "AS IS" AND ANY
18563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
19563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
20563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark * DISCLAIMED. IN NO EVENT SHALL APPLE OR ITS CONTRIBUTORS BE LIABLE FOR ANY
21563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
22563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
23563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
24563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
25563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
26563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
27563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark */
28563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark
29563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark#include "config.h"
30563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark#include "UIDelegate.h"
31563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark
32563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark#include "DumpRenderTree.h"
33563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark#include "DraggingInfo.h"
34563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark#include "EventSender.h"
35563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark#include "LayoutTestController.h"
36231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block#include "DRTDesktopNotificationPresenter.h"
37563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark
38563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark#include <WebCore/COMPtr.h>
39563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark#include <wtf/Platform.h>
40563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark#include <wtf/Vector.h>
41563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark#include <JavaScriptCore/Assertions.h>
42563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark#include <JavaScriptCore/JavaScriptCore.h>
43563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark#include <WebKit/WebKit.h>
44563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark#include <stdio.h>
45563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark
46563af33bc48281d19dce701398dbb88cb54fd7ecCary Clarkusing std::wstring;
47563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark
48563af33bc48281d19dce701398dbb88cb54fd7ecCary Clarkclass DRTUndoObject {
49563af33bc48281d19dce701398dbb88cb54fd7ecCary Clarkpublic:
50563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark    DRTUndoObject(IWebUndoTarget* target, BSTR actionName, IUnknown* obj)
51563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark        : m_target(target)
52563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark        , m_actionName(SysAllocString(actionName))
53563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark        , m_obj(obj)
54563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark    {
55563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark    }
56563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark
57563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark    ~DRTUndoObject()
58563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark    {
59563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark        SysFreeString(m_actionName);
60563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark    }
61563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark
62563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark    void invoke()
63563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark    {
64563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark        m_target->invoke(m_actionName, m_obj.get());
65563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark    }
66563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark
67563af33bc48281d19dce701398dbb88cb54fd7ecCary Clarkprivate:
68563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark    IWebUndoTarget* m_target;
69563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark    BSTR m_actionName;
70563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark    COMPtr<IUnknown> m_obj;
71563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark};
72563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark
73563af33bc48281d19dce701398dbb88cb54fd7ecCary Clarkclass DRTUndoStack {
74563af33bc48281d19dce701398dbb88cb54fd7ecCary Clarkpublic:
75563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark    ~DRTUndoStack() { deleteAllValues(m_undoVector); }
76563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark
77563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark    bool isEmpty() const { return m_undoVector.isEmpty(); }
78563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark    void clear() { deleteAllValues(m_undoVector); m_undoVector.clear(); }
79563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark
80563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark    void push(DRTUndoObject* undoObject) { m_undoVector.append(undoObject); }
81563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark    DRTUndoObject* pop() { DRTUndoObject* top = m_undoVector.last(); m_undoVector.removeLast(); return top; }
82563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark
83563af33bc48281d19dce701398dbb88cb54fd7ecCary Clarkprivate:
84563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark    Vector<DRTUndoObject*> m_undoVector;
85563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark};
86563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark
87563af33bc48281d19dce701398dbb88cb54fd7ecCary Clarkclass DRTUndoManager {
88563af33bc48281d19dce701398dbb88cb54fd7ecCary Clarkpublic:
89563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark    DRTUndoManager();
90563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark
91563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark    void removeAllActions();
92563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark    void registerUndoWithTarget(IWebUndoTarget* target, BSTR actionName, IUnknown* obj);
93563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark    void redo();
94563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark    void undo();
95563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark    bool canRedo() { return !m_redoStack->isEmpty(); }
96563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark    bool canUndo() { return !m_undoStack->isEmpty(); }
97563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark
98563af33bc48281d19dce701398dbb88cb54fd7ecCary Clarkprivate:
99563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark    OwnPtr<DRTUndoStack> m_redoStack;
100563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark    OwnPtr<DRTUndoStack> m_undoStack;
101563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark    bool m_isRedoing;
102563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark    bool m_isUndoing;
103563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark};
104563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark
105563af33bc48281d19dce701398dbb88cb54fd7ecCary ClarkDRTUndoManager::DRTUndoManager()
106563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark    : m_redoStack(new DRTUndoStack)
107563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark    , m_undoStack(new DRTUndoStack)
108563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark    , m_isRedoing(false)
109563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark    , m_isUndoing(false)
110563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark{
111563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark}
112563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark
113563af33bc48281d19dce701398dbb88cb54fd7ecCary Clarkvoid DRTUndoManager::removeAllActions()
114563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark{
115563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark    m_redoStack->clear();
116563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark    m_undoStack->clear();
117563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark}
118563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark
119563af33bc48281d19dce701398dbb88cb54fd7ecCary Clarkvoid DRTUndoManager::registerUndoWithTarget(IWebUndoTarget* target, BSTR actionName, IUnknown* obj)
120563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark{
121563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark    if (!m_isUndoing && !m_isRedoing)
122563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark        m_redoStack->clear();
123563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark
124563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark    DRTUndoStack* stack = m_isUndoing ? m_redoStack.get() : m_undoStack.get();
125563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark    stack->push(new DRTUndoObject(target, actionName, obj));
126563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark}
127563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark
128563af33bc48281d19dce701398dbb88cb54fd7ecCary Clarkvoid DRTUndoManager::redo()
129563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark{
130563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark    if (!canRedo())
131563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark        return;
132563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark
133563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark    m_isRedoing = true;
134563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark
135563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark    DRTUndoObject* redoObject = m_redoStack->pop();
136563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark    redoObject->invoke();
137563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark    delete redoObject;
138563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark
139563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark    m_isRedoing = false;
140563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark}
141563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark
142563af33bc48281d19dce701398dbb88cb54fd7ecCary Clarkvoid DRTUndoManager::undo()
143563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark{
144563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark    if (!canUndo())
145563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark        return;
146563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark
147563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark    m_isUndoing = true;
148563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark
149563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark    DRTUndoObject* undoObject = m_undoStack->pop();
150563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark    undoObject->invoke();
151563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark    delete undoObject;
152563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark
153563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark    m_isUndoing = false;
154563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark}
155563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark
156563af33bc48281d19dce701398dbb88cb54fd7ecCary ClarkUIDelegate::UIDelegate()
157563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark    : m_refCount(1)
158563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark    , m_undoManager(new DRTUndoManager)
159231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block    , m_desktopNotifications(new DRTDesktopNotificationPresenter)
160563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark{
161563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark    m_frame.bottom = 0;
162563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark    m_frame.top = 0;
163563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark    m_frame.left = 0;
164563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark    m_frame.right = 0;
165563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark}
166563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark
167563af33bc48281d19dce701398dbb88cb54fd7ecCary Clarkvoid UIDelegate::resetUndoManager()
168563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark{
169563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark    m_undoManager.set(new DRTUndoManager);
170563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark}
171563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark
172563af33bc48281d19dce701398dbb88cb54fd7ecCary ClarkHRESULT STDMETHODCALLTYPE UIDelegate::QueryInterface(REFIID riid, void** ppvObject)
173563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark{
174563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark    *ppvObject = 0;
175563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark    if (IsEqualGUID(riid, IID_IUnknown))
176563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark        *ppvObject = static_cast<IWebUIDelegate*>(this);
177563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark    else if (IsEqualGUID(riid, IID_IWebUIDelegate))
178563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark        *ppvObject = static_cast<IWebUIDelegate*>(this);
179231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block    else if (IsEqualGUID(riid, IID_IWebUIDelegate2))
180231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block        *ppvObject = static_cast<IWebUIDelegate2*>(this);
181563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark    else if (IsEqualGUID(riid, IID_IWebUIDelegatePrivate))
182563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark        *ppvObject = static_cast<IWebUIDelegatePrivate*>(this);
183e458d70a0d18538346f41b503114c9ebe6b2ce12Leon Clarke    else if (IsEqualGUID(riid, IID_IWebUIDelegatePrivate2))
184e458d70a0d18538346f41b503114c9ebe6b2ce12Leon Clarke        *ppvObject = static_cast<IWebUIDelegatePrivate2*>(this);
185e458d70a0d18538346f41b503114c9ebe6b2ce12Leon Clarke    else if (IsEqualGUID(riid, IID_IWebUIDelegatePrivate3))
186e458d70a0d18538346f41b503114c9ebe6b2ce12Leon Clarke        *ppvObject = static_cast<IWebUIDelegatePrivate3*>(this);
187563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark    else
188563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark        return E_NOINTERFACE;
189563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark
190563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark    AddRef();
191563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark    return S_OK;
192563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark}
193563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark
194563af33bc48281d19dce701398dbb88cb54fd7ecCary ClarkULONG STDMETHODCALLTYPE UIDelegate::AddRef()
195563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark{
196563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark    return ++m_refCount;
197563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark}
198563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark
199563af33bc48281d19dce701398dbb88cb54fd7ecCary ClarkULONG STDMETHODCALLTYPE UIDelegate::Release()
200563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark{
201563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark    ULONG newRef = --m_refCount;
202563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark    if (!newRef)
203563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark        delete(this);
204563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark
205563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark    return newRef;
206563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark}
207563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark
208563af33bc48281d19dce701398dbb88cb54fd7ecCary ClarkHRESULT STDMETHODCALLTYPE UIDelegate::hasCustomMenuImplementation(
209563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark        /* [retval][out] */ BOOL *hasCustomMenus)
210563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark{
211563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark    *hasCustomMenus = TRUE;
212563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark
213563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark    return S_OK;
214563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark}
215563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark
216563af33bc48281d19dce701398dbb88cb54fd7ecCary ClarkHRESULT STDMETHODCALLTYPE UIDelegate::trackCustomPopupMenu(
217563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark        /* [in] */ IWebView *sender,
218563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark        /* [in] */ OLE_HANDLE menu,
219563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark        /* [in] */ LPPOINT point)
220563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark{
221563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark    // Do nothing
222563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark    return S_OK;
223563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark}
224563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark
225563af33bc48281d19dce701398dbb88cb54fd7ecCary ClarkHRESULT STDMETHODCALLTYPE UIDelegate::registerUndoWithTarget(
226563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark        /* [in] */ IWebUndoTarget* target,
227563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark        /* [in] */ BSTR actionName,
228563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark        /* [in] */ IUnknown* actionArg)
229563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark{
230563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark    m_undoManager->registerUndoWithTarget(target, actionName, actionArg);
231563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark    return S_OK;
232563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark}
233563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark
234563af33bc48281d19dce701398dbb88cb54fd7ecCary ClarkHRESULT STDMETHODCALLTYPE UIDelegate::removeAllActionsWithTarget(
235563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark        /* [in] */ IWebUndoTarget*)
236563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark{
237563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark    m_undoManager->removeAllActions();
238563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark    return S_OK;
239563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark}
240563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark
241563af33bc48281d19dce701398dbb88cb54fd7ecCary ClarkHRESULT STDMETHODCALLTYPE UIDelegate::setActionTitle(
242563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark        /* [in] */ BSTR actionTitle)
243563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark{
244563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark    // It is not neccessary to implement this for DRT because there is
245563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark    // menu to write out the title to.
246563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark    return S_OK;
247563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark}
248563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark
249563af33bc48281d19dce701398dbb88cb54fd7ecCary ClarkHRESULT STDMETHODCALLTYPE UIDelegate::undo()
250563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark{
251563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark    m_undoManager->undo();
252563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark    return S_OK;
253563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark}
254563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark
255563af33bc48281d19dce701398dbb88cb54fd7ecCary ClarkHRESULT STDMETHODCALLTYPE UIDelegate::redo()
256563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark{
257563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark    m_undoManager->redo();
258563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark    return S_OK;
259563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark}
260563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark
261563af33bc48281d19dce701398dbb88cb54fd7ecCary ClarkHRESULT STDMETHODCALLTYPE UIDelegate::canUndo(
262563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark        /* [retval][out] */ BOOL* result)
263563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark{
264563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark    if (!result)
265563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark        return E_POINTER;
266563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark
267563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark    *result = m_undoManager->canUndo();
268563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark    return S_OK;
269563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark}
270563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark
271563af33bc48281d19dce701398dbb88cb54fd7ecCary ClarkHRESULT STDMETHODCALLTYPE UIDelegate::canRedo(
272563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark        /* [retval][out] */ BOOL* result)
273563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark{
274563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark    if (!result)
275563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark        return E_POINTER;
276563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark
277563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark    *result = m_undoManager->canRedo();
278563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark    return S_OK;
279563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark}
280563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark
2810bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben MurdochHRESULT STDMETHODCALLTYPE UIDelegate::printFrame(
2820bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    /* [in] */ IWebView *webView,
2830bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    /* [in] */ IWebFrame *frame)
2840bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch{
2850bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    return E_NOTIMPL;
2860bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch}
2870bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
2880bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben MurdochHRESULT STDMETHODCALLTYPE UIDelegate::ftpDirectoryTemplatePath(
2890bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    /* [in] */ IWebView *webView,
2900bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    /* [retval][out] */ BSTR *path)
2910bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch{
2920bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    if (!path)
2930bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch        return E_POINTER;
2940bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    *path = 0;
2950bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    return E_NOTIMPL;
2960bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch}
2970bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
2980bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
2990bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben MurdochHRESULT STDMETHODCALLTYPE UIDelegate::webViewHeaderHeight(
3000bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    /* [in] */ IWebView *webView,
3010bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    /* [retval][out] */ float *result)
3020bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch{
3030bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    if (!result)
3040bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch        return E_POINTER;
3050bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    *result = 0;
3060bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    return E_NOTIMPL;
3070bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch}
3080bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
3090bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben MurdochHRESULT STDMETHODCALLTYPE UIDelegate::webViewFooterHeight(
3100bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    /* [in] */ IWebView *webView,
3110bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    /* [retval][out] */ float *result)
3120bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch{
3130bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    if (!result)
3140bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch        return E_POINTER;
3150bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    *result = 0;
3160bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    return E_NOTIMPL;
3170bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch}
3180bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
3190bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben MurdochHRESULT STDMETHODCALLTYPE UIDelegate::drawHeaderInRect(
3200bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    /* [in] */ IWebView *webView,
3210bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    /* [in] */ RECT *rect,
3220bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    /* [in] */ OLE_HANDLE drawingContext)
3230bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch{
3240bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    return E_NOTIMPL;
3250bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch}
3260bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
3270bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben MurdochHRESULT STDMETHODCALLTYPE UIDelegate::drawFooterInRect(
3280bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    /* [in] */ IWebView *webView,
3290bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    /* [in] */ RECT *rect,
3300bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    /* [in] */ OLE_HANDLE drawingContext,
3310bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    /* [in] */ UINT pageIndex,
3320bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    /* [in] */ UINT pageCount)
3330bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch{
3340bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    return E_NOTIMPL;
3350bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch}
3360bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
3370bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben MurdochHRESULT STDMETHODCALLTYPE UIDelegate::webViewPrintingMarginRect(
3380bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    /* [in] */ IWebView *webView,
3390bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    /* [retval][out] */ RECT *rect)
3400bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch{
3410bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    return E_NOTIMPL;
3420bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch}
3430bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
3440bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben MurdochHRESULT STDMETHODCALLTYPE UIDelegate::canRunModal(
3450bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    /* [in] */ IWebView *webView,
3460bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    /* [retval][out] */ BOOL *canRunBoolean)
3470bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch{
3480bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    return E_NOTIMPL;
3490bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch}
3500bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
3510bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben MurdochHRESULT STDMETHODCALLTYPE UIDelegate::createModalDialog(
3520bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    /* [in] */ IWebView *sender,
3530bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    /* [in] */ IWebURLRequest *request,
3540bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    /* [retval][out] */ IWebView **newWebView)
3550bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch{
3560bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    return E_NOTIMPL;
3570bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch}
3580bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
3590bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben MurdochHRESULT STDMETHODCALLTYPE UIDelegate::runModal(
3600bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    /* [in] */ IWebView *webView)
3610bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch{
3620bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    return E_NOTIMPL;
3630bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch}
3640bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
3650bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben MurdochHRESULT STDMETHODCALLTYPE UIDelegate::isMenuBarVisible(
3660bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    /* [in] */ IWebView *webView,
3670bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    /* [retval][out] */ BOOL *visible)
3680bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch{
3690bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    if (!visible)
3700bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch        return E_POINTER;
3710bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    *visible = false;
3720bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    return E_NOTIMPL;
3730bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch}
3740bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
3750bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben MurdochHRESULT STDMETHODCALLTYPE UIDelegate::setMenuBarVisible(
3760bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    /* [in] */ IWebView *webView,
3770bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    /* [in] */ BOOL visible)
3780bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch{
3790bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    return E_NOTIMPL;
3800bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch}
3810bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
3820bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben MurdochHRESULT STDMETHODCALLTYPE UIDelegate::runDatabaseSizeLimitPrompt(
3830bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    /* [in] */ IWebView *webView,
3840bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    /* [in] */ BSTR displayName,
3850bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    /* [in] */ IWebFrame *initiatedByFrame,
3860bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    /* [retval][out] */ BOOL *allowed)
3870bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch{
3880bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    if (!allowed)
3890bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch        return E_POINTER;
3900bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    *allowed = false;
3910bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    return E_NOTIMPL;
3920bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch}
3930bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
3940bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben MurdochHRESULT STDMETHODCALLTYPE UIDelegate::paintCustomScrollbar(
3950bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    /* [in] */ IWebView *webView,
3960bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    /* [in] */ HDC hDC,
3970bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    /* [in] */ RECT rect,
3980bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    /* [in] */ WebScrollBarControlSize size,
3990bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    /* [in] */ WebScrollbarControlState state,
4000bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    /* [in] */ WebScrollbarControlPart pressedPart,
4010bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    /* [in] */ BOOL vertical,
4020bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    /* [in] */ float value,
4030bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    /* [in] */ float proportion,
4040bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    /* [in] */ WebScrollbarControlPartMask parts)
4050bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch{
4060bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    return E_NOTIMPL;
4070bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch}
4080bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
4090bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben MurdochHRESULT STDMETHODCALLTYPE UIDelegate::paintCustomScrollCorner(
4100bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    /* [in] */ IWebView *webView,
4110bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    /* [in] */ HDC hDC,
4120bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    /* [in] */ RECT rect)
4130bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch{
4140bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    return E_NOTIMPL;
4150bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch}
4160bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
417563af33bc48281d19dce701398dbb88cb54fd7ecCary ClarkHRESULT STDMETHODCALLTYPE UIDelegate::setFrame(
418563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark        /* [in] */ IWebView* /*sender*/,
419563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark        /* [in] */ RECT* frame)
420563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark{
421563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark    m_frame = *frame;
422563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark    return S_OK;
423563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark}
424563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark
425563af33bc48281d19dce701398dbb88cb54fd7ecCary ClarkHRESULT STDMETHODCALLTYPE UIDelegate::webViewFrame(
426563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark        /* [in] */ IWebView* /*sender*/,
427563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark        /* [retval][out] */ RECT* frame)
428563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark{
429563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark    *frame = m_frame;
430563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark    return S_OK;
431563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark}
432563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark
433563af33bc48281d19dce701398dbb88cb54fd7ecCary ClarkHRESULT STDMETHODCALLTYPE UIDelegate::runJavaScriptAlertPanelWithMessage(
434563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark        /* [in] */ IWebView* /*sender*/,
435563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark        /* [in] */ BSTR message)
436563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark{
437563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark    printf("ALERT: %S\n", message ? message : L"");
438563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark
439563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark    return S_OK;
440563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark}
441563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark
442563af33bc48281d19dce701398dbb88cb54fd7ecCary ClarkHRESULT STDMETHODCALLTYPE UIDelegate::runJavaScriptConfirmPanelWithMessage(
443563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark    /* [in] */ IWebView* sender,
444563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark    /* [in] */ BSTR message,
445563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark    /* [retval][out] */ BOOL* result)
446563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark{
447563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark    printf("CONFIRM: %S\n", message ? message : L"");
448563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark    *result = TRUE;
449563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark
450563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark    return S_OK;
451563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark}
452563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark
453563af33bc48281d19dce701398dbb88cb54fd7ecCary ClarkHRESULT STDMETHODCALLTYPE UIDelegate::runJavaScriptTextInputPanelWithPrompt(
454563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark    /* [in] */ IWebView *sender,
455563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark    /* [in] */ BSTR message,
456563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark    /* [in] */ BSTR defaultText,
457563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark    /* [retval][out] */ BSTR *result)
458563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark{
459563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark    printf("PROMPT: %S, default text: %S\n", message ? message : L"", defaultText ? defaultText : L"");
460563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark    *result = SysAllocString(defaultText);
461563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark
462563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark    return S_OK;
463563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark}
464563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark
465563af33bc48281d19dce701398dbb88cb54fd7ecCary ClarkHRESULT STDMETHODCALLTYPE UIDelegate::runBeforeUnloadConfirmPanelWithMessage(
466563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark    /* [in] */ IWebView* /*sender*/,
467563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark    /* [in] */ BSTR /*message*/,
468563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark    /* [in] */ IWebFrame* /*initiatedByFrame*/,
469563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark    /* [retval][out] */ BOOL* result)
470563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark{
471563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark    if (!result)
472563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark        return E_POINTER;
473563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark    *result = TRUE;
474563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark    return E_NOTIMPL;
475563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark}
476563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark
477563af33bc48281d19dce701398dbb88cb54fd7ecCary ClarkHRESULT STDMETHODCALLTYPE UIDelegate::webViewAddMessageToConsole(
478563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark    /* [in] */ IWebView* sender,
479563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark    /* [in] */ BSTR message,
480563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark    /* [in] */ int lineNumber,
481563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark    /* [in] */ BSTR url,
482563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark    /* [in] */ BOOL isError)
483563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark{
484563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark    wstring newMessage;
485563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark    if (message) {
486563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark        newMessage = message;
487563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark        size_t fileProtocol = newMessage.find(L"file://");
488563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark        if (fileProtocol != wstring::npos)
48981bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch            newMessage = newMessage.substr(0, fileProtocol) + lastPathComponent(newMessage.substr(fileProtocol));
490563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark    }
491563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark
49206ea8e899e48f1f2f396b70e63fae369f2f23232Kristian Monsen    printf("CONSOLE MESSAGE: line %d: %s\n", lineNumber, toUTF8(newMessage).c_str());
493563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark    return S_OK;
494563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark}
495563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark
496563af33bc48281d19dce701398dbb88cb54fd7ecCary ClarkHRESULT STDMETHODCALLTYPE UIDelegate::doDragDrop(
497563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark    /* [in] */ IWebView* sender,
498563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark    /* [in] */ IDataObject* object,
499563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark    /* [in] */ IDropSource* source,
500563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark    /* [in] */ DWORD okEffect,
501563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark    /* [retval][out] */ DWORD* performedEffect)
502563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark{
503563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark    if (!performedEffect)
504563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark        return E_POINTER;
505563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark
506563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark    *performedEffect = 0;
507563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark
508563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark    draggingInfo = new DraggingInfo(object, source);
509cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block    HRESULT oleDragAndDropReturnValue = DRAGDROP_S_CANCEL;
510cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block    replaySavedEvents(&oleDragAndDropReturnValue);
511231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block    if (draggingInfo) {
512231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block        *performedEffect = draggingInfo->performedDropEffect();
513231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block        delete draggingInfo;
514231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block        draggingInfo = 0;
515231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block    }
516cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block    return oleDragAndDropReturnValue;
517563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark}
518563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark
519563af33bc48281d19dce701398dbb88cb54fd7ecCary ClarkHRESULT STDMETHODCALLTYPE UIDelegate::webViewGetDlgCode(
520563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark    /* [in] */ IWebView* /*sender*/,
521563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark    /* [in] */ UINT /*keyCode*/,
522563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark    /* [retval][out] */ LONG_PTR *code)
523563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark{
524563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark    if (!code)
525563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark        return E_POINTER;
526563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark    *code = 0;
527563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark    return E_NOTIMPL;
528563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark}
529563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark
530563af33bc48281d19dce701398dbb88cb54fd7ecCary ClarkHRESULT STDMETHODCALLTYPE UIDelegate::createWebViewWithRequest(
531563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark        /* [in] */ IWebView *sender,
532563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark        /* [in] */ IWebURLRequest *request,
533563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark        /* [retval][out] */ IWebView **newWebView)
534563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark{
535563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark    if (!::gLayoutTestController->canOpenWindows())
536563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark        return E_FAIL;
537563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark    *newWebView = createWebViewAndOffscreenWindow();
538563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark    return S_OK;
539563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark}
540563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark
541563af33bc48281d19dce701398dbb88cb54fd7ecCary ClarkHRESULT STDMETHODCALLTYPE UIDelegate::webViewClose(
542563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark        /* [in] */ IWebView *sender)
543563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark{
544563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark    HWND hostWindow;
545563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark    sender->hostWindow(reinterpret_cast<OLE_HANDLE*>(&hostWindow));
546563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark    DestroyWindow(hostWindow);
547563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark    return S_OK;
548563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark}
549563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark
550563af33bc48281d19dce701398dbb88cb54fd7ecCary ClarkHRESULT STDMETHODCALLTYPE UIDelegate::webViewFocus(
551563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark        /* [in] */ IWebView *sender)
552563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark{
553563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark    HWND hostWindow;
554563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark    sender->hostWindow(reinterpret_cast<OLE_HANDLE*>(&hostWindow));
555563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark    SetForegroundWindow(hostWindow);
556563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark    return S_OK;
557563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark}
558563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark
559563af33bc48281d19dce701398dbb88cb54fd7ecCary ClarkHRESULT STDMETHODCALLTYPE UIDelegate::webViewUnfocus(
560563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark        /* [in] */ IWebView *sender)
561563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark{
562563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark    SetForegroundWindow(GetDesktopWindow());
563563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark    return S_OK;
564563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark}
565563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark
566563af33bc48281d19dce701398dbb88cb54fd7ecCary ClarkHRESULT STDMETHODCALLTYPE UIDelegate::webViewPainted(
567563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark        /* [in] */ IWebView *sender)
568563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark{
569563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark    return S_OK;
570563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark}
571563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark
572563af33bc48281d19dce701398dbb88cb54fd7ecCary ClarkHRESULT STDMETHODCALLTYPE UIDelegate::exceededDatabaseQuota(
573563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark        /* [in] */ IWebView *sender,
574563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark        /* [in] */ IWebFrame *frame,
575563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark        /* [in] */ IWebSecurityOrigin *origin,
576563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark        /* [in] */ BSTR databaseIdentifier)
577563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark{
578231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block    BSTR protocol;
579231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block    BSTR host;
580231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block    unsigned short port;
581231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block
582231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block    origin->protocol(&protocol);
583231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block    origin->host(&host);
584231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block    origin->port(&port);
585231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block
586231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block    if (!done && gLayoutTestController->dumpDatabaseCallbacks())
587231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block        printf("UI DELEGATE DATABASE CALLBACK: exceededDatabaseQuotaForSecurityOrigin:{%S, %S, %i} database:%S\n", protocol, host, port, databaseIdentifier);
588231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block
589231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block    SysFreeString(protocol);
590231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block    SysFreeString(host);
591231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block
592563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark    static const unsigned long long defaultQuota = 5 * 1024 * 1024;
593563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark    origin->setQuota(defaultQuota);
594563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark
595563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark    return S_OK;
596563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark}
597563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark
5980bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben MurdochHRESULT STDMETHODCALLTYPE UIDelegate::embeddedViewWithArguments(
5990bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    /* [in] */ IWebView *sender,
6000bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    /* [in] */ IWebFrame *frame,
6010bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    /* [in] */ IPropertyBag *arguments,
6020bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    /* [retval][out] */ IWebEmbeddedView **view)
6030bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch{
6040bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    if (!view)
6050bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch        return E_POINTER;
6060bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    *view = 0;
6070bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    return E_NOTIMPL;
6080bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch}
6090bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
6100bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben MurdochHRESULT STDMETHODCALLTYPE UIDelegate::webViewClosing(
6110bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    /* [in] */ IWebView *sender)
6120bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch{
6130bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    return E_NOTIMPL;
6140bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch}
6150bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
6160bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben MurdochHRESULT STDMETHODCALLTYPE UIDelegate::webViewSetCursor(
6170bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    /* [in] */ IWebView *sender,
6180bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    /* [in] */ OLE_HANDLE cursor)
6190bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch{
6200bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    return E_NOTIMPL;
6210bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch}
6220bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
6230bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben MurdochHRESULT STDMETHODCALLTYPE UIDelegate::webViewDidInvalidate(
6240bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    /* [in] */ IWebView *sender)
6250bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch{
6260bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    return E_NOTIMPL;
6270bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch}
628563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark
629563af33bc48281d19dce701398dbb88cb54fd7ecCary ClarkHRESULT STDMETHODCALLTYPE UIDelegate::setStatusText(IWebView*, BSTR text)
630563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark{
631563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark    if (gLayoutTestController->dumpStatusCallbacks())
6326c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen        printf("UI DELEGATE STATUS CALLBACK: setStatusText:%s\n", text ? toUTF8(text).c_str() : "");
633563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark    return S_OK;
634563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark}
635231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block
636231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve BlockHRESULT STDMETHODCALLTYPE UIDelegate::desktopNotificationsDelegate(IWebDesktopNotificationsDelegate** result)
637231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block{
638231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block    m_desktopNotifications.copyRefTo(result);
639231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block    return S_OK;
640231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block}
641e458d70a0d18538346f41b503114c9ebe6b2ce12Leon Clarke
642e458d70a0d18538346f41b503114c9ebe6b2ce12Leon ClarkeHRESULT STDMETHODCALLTYPE UIDelegate::createWebViewWithRequest(IWebView* sender, IWebURLRequest* request, IPropertyBag* windowFeatures, IWebView** newWebView)
643e458d70a0d18538346f41b503114c9ebe6b2ce12Leon Clarke{
644e458d70a0d18538346f41b503114c9ebe6b2ce12Leon Clarke    return E_NOTIMPL;
645e458d70a0d18538346f41b503114c9ebe6b2ce12Leon Clarke}
646e458d70a0d18538346f41b503114c9ebe6b2ce12Leon Clarke
647e458d70a0d18538346f41b503114c9ebe6b2ce12Leon ClarkeHRESULT STDMETHODCALLTYPE UIDelegate::drawBackground(IWebView* sender, OLE_HANDLE hdc, const RECT* dirtyRect)
648e458d70a0d18538346f41b503114c9ebe6b2ce12Leon Clarke{
649e458d70a0d18538346f41b503114c9ebe6b2ce12Leon Clarke    return E_NOTIMPL;
650e458d70a0d18538346f41b503114c9ebe6b2ce12Leon Clarke}
651e458d70a0d18538346f41b503114c9ebe6b2ce12Leon Clarke
652e458d70a0d18538346f41b503114c9ebe6b2ce12Leon ClarkeHRESULT STDMETHODCALLTYPE UIDelegate::decidePolicyForGeolocationRequest(IWebView* sender, IWebFrame* frame, IWebSecurityOrigin* origin, IWebGeolocationPolicyListener* listener)
653e458d70a0d18538346f41b503114c9ebe6b2ce12Leon Clarke{
654e458d70a0d18538346f41b503114c9ebe6b2ce12Leon Clarke    return E_NOTIMPL;
655e458d70a0d18538346f41b503114c9ebe6b2ce12Leon Clarke}
656e458d70a0d18538346f41b503114c9ebe6b2ce12Leon Clarke
657e458d70a0d18538346f41b503114c9ebe6b2ce12Leon ClarkeHRESULT STDMETHODCALLTYPE UIDelegate::didPressMissingPluginButton(IDOMElement* element)
658e458d70a0d18538346f41b503114c9ebe6b2ce12Leon Clarke{
659e458d70a0d18538346f41b503114c9ebe6b2ce12Leon Clarke    printf("MISSING PLUGIN BUTTON PRESSED\n");
660e458d70a0d18538346f41b503114c9ebe6b2ce12Leon Clarke    return S_OK;
661e458d70a0d18538346f41b503114c9ebe6b2ce12Leon Clarke}
662e458d70a0d18538346f41b503114c9ebe6b2ce12Leon Clarke
663