pluginview.h
来自「linux下开源浏览器WebKit的源码,市面上的很多商用浏览器都是移植自Web」· C头文件 代码 · 共 322 行
H
322 行
/* * Copyright (C) 2006, 2007, 2008 Apple Inc. All rights reserved. * Copyright (C) 2008 Collabora Ltd. All rights reserved. * * 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. * * THIS SOFTWARE IS PROVIDED BY APPLE COMPUTER, INC. ``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 COMPUTER, INC. OR * 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. */#ifndef PluginView_H#define PluginView_H#include "CString.h"#include "FrameLoadRequest.h"#include "IntRect.h"#include "KURL.h"#include "PlatformString.h"#include "PluginStream.h"#include "ResourceRequest.h"#include "Timer.h"#include "Widget.h"#include "npruntime_internal.h"#include <wtf/HashMap.h>#include <wtf/HashSet.h>#include <wtf/OwnPtr.h>#include <wtf/PassRefPtr.h>#include <wtf/RefPtr.h>#include <wtf/Vector.h>#if PLATFORM(WIN_OS) && PLATFORM(QT)typedef struct HWND__* HWND;typedef HWND PlatformPluginWidget;#elsetypedef PlatformWidget PlatformPluginWidget;#endifnamespace JSC { namespace Bindings { class Instance; }}namespace WebCore { class Element; class Frame; class KeyboardEvent; class MouseEvent; class KURL;#if PLATFORM(WIN_OS) && !PLATFORM(WX) && ENABLE(NETSCAPE_PLUGIN_API) class PluginMessageThrottlerWin;#endif class PluginPackage; class PluginRequest; class PluginStream; class ResourceError; class ResourceResponse; enum PluginStatus { PluginStatusCanNotFindPlugin, PluginStatusCanNotLoadPlugin, PluginStatusLoadedSuccessfully }; class PluginRequest { public: PluginRequest(const FrameLoadRequest& frameLoadRequest, bool sendNotification, void* notifyData, bool shouldAllowPopups) : m_frameLoadRequest(frameLoadRequest) , m_notifyData(notifyData) , m_sendNotification(sendNotification) , m_shouldAllowPopups(shouldAllowPopups) { } public: const FrameLoadRequest& frameLoadRequest() const { return m_frameLoadRequest; } void* notifyData() const { return m_notifyData; } bool sendNotification() const { return m_sendNotification; } bool shouldAllowPopups() const { return m_shouldAllowPopups; } private: FrameLoadRequest m_frameLoadRequest; void* m_notifyData; bool m_sendNotification; bool m_shouldAllowPopups; }; class PluginManualLoader { public: virtual ~PluginManualLoader() {} virtual void didReceiveResponse(const ResourceResponse&) = 0; virtual void didReceiveData(const char*, int) = 0; virtual void didFinishLoading() = 0; virtual void didFail(const ResourceError&) = 0; }; class PluginView : public Widget, private PluginStreamClient, public PluginManualLoader { public: static PluginView* create(Frame* parentFrame, const IntSize&, Element*, const KURL&, const Vector<String>& paramNames, const Vector<String>& paramValues, const String& mimeType, bool loadManually); virtual ~PluginView(); PluginPackage* plugin() const { return m_plugin.get(); } NPP instance() const { return m_instance; } void setNPWindowRect(const IntRect&); static PluginView* currentPluginView(); PassRefPtr<JSC::Bindings::Instance> bindingInstance(); PluginStatus status() const { return m_status; } // NPN functions NPError getURLNotify(const char* url, const char* target, void* notifyData); NPError getURL(const char* url, const char* target); NPError postURLNotify(const char* url, const char* target, uint32 len, const char* but, NPBool file, void* notifyData); NPError postURL(const char* url, const char* target, uint32 len, const char* but, NPBool file); NPError newStream(NPMIMEType type, const char* target, NPStream** stream); int32 write(NPStream* stream, int32 len, void* buffer); NPError destroyStream(NPStream* stream, NPReason reason); const char* userAgent();#if ENABLE(NETSCAPE_PLUGIN_API) static const char* userAgentStatic();#endif void status(const char* message); NPError getValue(NPNVariable variable, void* value);#if ENABLE(NETSCAPE_PLUGIN_API) static NPError getValueStatic(NPNVariable variable, void* value);#endif NPError setValue(NPPVariable variable, void* value); void invalidateRect(NPRect*); void invalidateRegion(NPRegion); void forceRedraw(); void pushPopupsEnabledState(bool state); void popPopupsEnabledState(); virtual void invalidateRect(const IntRect&); bool arePopupsAllowed() const; void setJavaScriptPaused(bool); void disconnectStream(PluginStream*); void streamDidFinishLoading(PluginStream* stream) { disconnectStream(stream); } // Widget functions virtual void setFrameRect(const IntRect&); virtual void frameRectsChanged(); virtual void setFocus(); virtual void show(); virtual void hide(); virtual void paint(GraphicsContext*, const IntRect&); // This method is used by plugins on all platforms to obtain a clip rect that includes clips set by WebCore, // e.g., in overflow:auto sections. The clip rects coordinates are in the containing window's coordinate space. // This clip includes any clips that the widget itself sets up for its children. IntRect windowClipRect() const; virtual void handleEvent(Event*); virtual void setParent(ScrollView*); virtual void setParentVisible(bool); virtual bool isPluginView() const { return true; }#if PLATFORM(WIN_OS) && !PLATFORM(WX) && ENABLE(NETSCAPE_PLUGIN_API) static LRESULT CALLBACK PluginViewWndProc(HWND, UINT, WPARAM, LPARAM); LRESULT wndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam); WNDPROC pluginWndProc() const { return m_pluginWndProc; }#endif // Used for manual loading void didReceiveResponse(const ResourceResponse&); void didReceiveData(const char*, int); void didFinishLoading(); void didFail(const ResourceError&); static bool isCallingPlugin();#if PLATFORM(QT) bool isNPAPIPlugin() const { return m_isNPAPIPlugin; } void setIsNPAPIPlugin(bool b) { m_isNPAPIPlugin = b; }#endif private: PluginView(Frame* parentFrame, const IntSize&, PluginPackage*, Element*, const KURL&, const Vector<String>& paramNames, const Vector<String>& paramValues, const String& mimeType, bool loadManually); void setParameters(const Vector<String>& paramNames, const Vector<String>& paramValues); void init(); bool start(); void stop(); static void setCurrentPluginView(PluginView*); NPError load(const FrameLoadRequest&, bool sendNotification, void* notifyData); NPError handlePost(const char* url, const char* target, uint32 len, const char* buf, bool file, void* notifyData, bool sendNotification, bool allowHeaders); NPError handlePostReadFile(Vector<char>& buffer, uint32 len, const char* buf); static void freeStringArray(char** stringArray, int length); void setCallingPlugin(bool) const; void invalidateWindowlessPluginRect(const IntRect&);#if PLATFORM(WIN_OS) && !PLATFORM(WX) && ENABLE(NETSCAPE_PLUGIN_API) void paintWindowedPluginIntoContext(GraphicsContext*, const IntRect&) const; static HDC WINAPI hookedBeginPaint(HWND, PAINTSTRUCT*); static BOOL WINAPI hookedEndPaint(HWND, const PAINTSTRUCT*);#endif Frame* m_parentFrame; RefPtr<PluginPackage> m_plugin; Element* m_element; bool m_isStarted; KURL m_url; KURL m_baseURL; PluginStatus m_status; Vector<IntRect> m_invalidRects; void performRequest(PluginRequest*); void scheduleRequest(PluginRequest*); void requestTimerFired(Timer<PluginView>*); void invalidateTimerFired(Timer<PluginView>*); Timer<PluginView> m_requestTimer; Timer<PluginView> m_invalidateTimer; void popPopupsStateTimerFired(Timer<PluginView>*); Timer<PluginView> m_popPopupsStateTimer;#ifndef NP_NO_CARBON bool dispatchNPEvent(NPEvent&);#endif void updatePluginWidget(); void paintMissingPluginIcon(GraphicsContext*, const IntRect&); void handleKeyboardEvent(KeyboardEvent*); void handleMouseEvent(MouseEvent*); int m_mode; int m_paramCount; char** m_paramNames; char** m_paramValues; CString m_mimeType; CString m_userAgent; NPP m_instance; NPP_t m_instanceStruct; NPWindow m_npWindow; Vector<bool, 4> m_popupStateStack; HashSet<RefPtr<PluginStream> > m_streams; Vector<PluginRequest*> m_requests; bool m_isWindowed; bool m_isTransparent; bool m_haveInitialized;#if PLATFORM(QT) bool m_isNPAPIPlugin;#endif#if PLATFORM(GTK) || defined(Q_WS_X11) bool m_needsXEmbed;#endif#if PLATFORM(WIN_OS) && !PLATFORM(WX) && ENABLE(NETSCAPE_PLUGIN_API) OwnPtr<PluginMessageThrottlerWin> m_messageThrottler; WNDPROC m_pluginWndProc; unsigned m_lastMessage; bool m_isCallingPluginWndProc; HDC m_wmPrintHDC;#endif#if (PLATFORM(QT) && PLATFORM(WIN_OS)) || defined(XP_MACOSX) // On Mac OSX and Qt/Windows the plugin does not have its own native widget, // but is using the containing window as its reference for positioning/painting. PlatformPluginWidget m_window;public: PlatformPluginWidget platformPluginWidget() const { return m_window; } void setPlatformPluginWidget(PlatformPluginWidget widget) { m_window = widget; }#elsepublic: PlatformPluginWidget platformPluginWidget() const { return platformWidget(); }#endifprivate:#if defined(XP_MACOSX) NP_CGContext m_npCgContext; OwnPtr<Timer<PluginView> > m_nullEventTimer; void setNPWindowIfNeeded(); void nullEventTimerFired(Timer<PluginView>*); Point globalMousePosForPlugin() const;#endif#if PLATFORM(GTK) || defined(Q_WS_X11) void setNPWindowIfNeeded();#endif IntRect m_clipRect; // The clip rect to apply to a windowed plug-in IntRect m_windowRect; // Our window rect. bool m_loadManually; RefPtr<PluginStream> m_manualStream; bool m_isJavaScriptPaused; static PluginView* s_currentPluginView; };} // namespace WebCore#endif
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?