1/*
2 * Copyright (C) 2007 Apple Inc.  All rights reserved.
3 * Copyright (C) 2011 Google Inc.  All rights reserved.
4 *
5 * Redistribution and use in source and binary forms, with or without
6 * modification, are permitted provided that the following conditions
7 * are met:
8 * 1. Redistributions of source code must retain the above copyright
9 *    notice, this list of conditions and the following disclaimer.
10 * 2. Redistributions in binary form must reproduce the above copyright
11 *    notice, this list of conditions and the following disclaimer in the
12 *    documentation and/or other materials provided with the distribution.
13 *
14 * THIS SOFTWARE IS PROVIDED BY APPLE COMPUTER, INC. ``AS IS'' AND ANY
15 * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
16 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
17 * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL APPLE COMPUTER, INC. OR
18 * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
19 * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
20 * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
21 * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
22 * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
23 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
24 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
25 */
26
27#ifndef InspectorClient_h
28#define InspectorClient_h
29
30#include "InspectorStateClient.h"
31#include <wtf/Forward.h>
32#include <wtf/HashMap.h>
33#include <wtf/HashSet.h>
34
35namespace WebCore {
36
37class InspectorController;
38class InspectorFrontendChannel;
39class Frame;
40class Page;
41
42class InspectorClient : public InspectorStateClient {
43public:
44    virtual ~InspectorClient() { }
45
46    virtual void inspectorDestroyed() = 0;
47
48    virtual InspectorFrontendChannel* openInspectorFrontend(InspectorController*) = 0;
49    virtual void closeInspectorFrontend() = 0;
50    virtual void bringFrontendToFront() = 0;
51    virtual void didResizeMainFrame(Frame*) { }
52
53    virtual void highlight() = 0;
54    virtual void hideHighlight() = 0;
55
56    virtual bool canClearBrowserCache() { return false; }
57    virtual void clearBrowserCache() { }
58    virtual bool canClearBrowserCookies() { return false; }
59    virtual void clearBrowserCookies() { }
60    virtual bool canMonitorMainThread() { return false; }
61
62    typedef void (*TraceEventCallback)(char phase, const unsigned char*, const char* name, unsigned long long id,
63        int numArgs, const char* const* argNames, const unsigned char* argTypes, const unsigned long long* argValues,
64        unsigned char flags);
65    virtual void setTraceEventCallback(TraceEventCallback) { }
66
67    virtual bool canOverrideDeviceMetrics() { return false; }
68
69    virtual void overrideDeviceMetrics(int /*width*/, int /*height*/, float /*fontScaleFactor*/, bool /*fitWindow*/)
70    {
71        // FIXME: Platforms may want to implement this (see https://bugs.webkit.org/show_bug.cgi?id=82886).
72    }
73    virtual void autoZoomPageToFitWidth()
74    {
75        // FIXME: Platforms may want to implement this (see https://bugs.webkit.org/show_bug.cgi?id=82886).
76    }
77
78    virtual bool overridesShowPaintRects() { return false; }
79    virtual void setShowPaintRects(bool) { }
80
81    virtual bool canShowDebugBorders() { return false; }
82    virtual void setShowDebugBorders(bool) { }
83
84    virtual bool canShowFPSCounter() { return false; }
85    virtual void setShowFPSCounter(bool) { }
86
87    virtual bool canContinuouslyPaint() { return false; }
88    virtual void setContinuousPaintingEnabled(bool) { }
89
90    virtual bool supportsFrameInstrumentation() { return false; }
91
92    virtual void getAllocatedObjects(HashSet<const void*>&) { }
93    virtual void dumpUncountedAllocatedObjects(const HashMap<const void*, size_t>&) { }
94
95    virtual bool captureScreenshot(String*) { return false; }
96
97    virtual bool handleJavaScriptDialog(bool, const String*) { return false; }
98
99    virtual bool canSetFileInputFiles() { return false; }
100
101    static bool doDispatchMessageOnFrontendPage(Page* frontendPage, const String& message);
102};
103
104} // namespace WebCore
105
106#endif // !defined(InspectorClient_h)
107