15821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Copyright (c) 2012 The Chromium Authors. All rights reserved. 25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be 35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// found in the LICENSE file. 45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch#ifndef CONTENT_CHILD_NPAPI_WEBPLUGIN_H_ 6ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch#define CONTENT_CHILD_NPAPI_WEBPLUGIN_H_ 75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 85821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include <string> 95821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include <vector> 105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/basictypes.h" 125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ui/gfx/native_widget_types.h" 135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ui/gfx/rect.h" 145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ui/gl/gpu_preference.h" 155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// TODO(port): this typedef is obviously incorrect on non-Windows 175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// platforms, but now a lot of code now accidentally depends on them 185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// existing. #ifdef out these declarations and fix all the users. 195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)typedef void* HANDLE; 205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class GURL; 225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)struct NPObject; 235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 24ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdochnamespace content { 255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class WebPluginResourceClient; 275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if defined(OS_MACOSX) 285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class WebPluginAcceleratedSurface; 295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif 305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// The WebKit side of a plugin implementation. It provides wrappers around 325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// operations that need to interact with the frame and other WebCore objects. 335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class WebPlugin { 345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public: 355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual ~WebPlugin() {} 365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Called by the plugin delegate to let the WebPlugin know if the plugin is 385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // windowed (i.e. handle is not NULL) or windowless (handle is NULL). This 395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // tells the WebPlugin to send mouse/keyboard events to the plugin delegate, 405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // as well as the information about the HDC for paint operations. 415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void SetWindow(gfx::PluginWindowHandle window) = 0; 425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Whether input events should be sent to the delegate. 445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void SetAcceptsInputEvents(bool accepts) = 0; 455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Called by the plugin delegate to let it know that the window is being 475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // destroyed. 485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void WillDestroyWindow(gfx::PluginWindowHandle window) = 0; 4958537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Cancels a pending request. 515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void CancelResource(unsigned long id) = 0; 525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void Invalidate() = 0; 535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void InvalidateRect(const gfx::Rect& rect) = 0; 545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Returns the NPObject for the browser's window object. Does not 565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // take a reference. 575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual NPObject* GetWindowScriptNPObject() = 0; 585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Returns the DOM element that loaded the plugin. Does not take a 605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // reference. 615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual NPObject* GetPluginElement() = 0; 625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Resolves the proxies for the url, returns true on success. 645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual bool FindProxyForUrl(const GURL& url, std::string* proxy_list) = 0; 655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Cookies 675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void SetCookie(const GURL& url, 685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const GURL& first_party_for_cookies, 695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const std::string& cookie) = 0; 705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual std::string GetCookies(const GURL& url, 715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const GURL& first_party_for_cookies) = 0; 725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Handles GetURL/GetURLNotify/PostURL/PostURLNotify requests initiated 745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // by plugins. If the plugin wants notification of the result, notify_id will 755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // be non-zero. 765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void HandleURLRequest(const char* url, 775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const char* method, 785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const char* target, 795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const char* buf, 805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) unsigned int len, 815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int notify_id, 825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool popups_allowed, 835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool notify_redirects) = 0; 845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Cancels document load. 865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void CancelDocumentLoad() = 0; 875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Initiates a HTTP range request for an existing stream. 895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void InitiateHTTPRangeRequest(const char* url, 905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const char* range_info, 915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int range_request_id) = 0; 925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 93d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) virtual void DidStartLoading() = 0; 94d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) virtual void DidStopLoading() = 0; 95d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) 965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Returns true iff in incognito mode. 975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual bool IsOffTheRecord() = 0; 985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Called when the WebPluginResourceClient instance is deleted. 1005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void ResourceClientDeleted( 1015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) WebPluginResourceClient* resource_client) {} 1025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Defers the loading of the resource identified by resource_id. This is 1045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // controlled by the defer parameter. 1055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void SetDeferResourceLoading(unsigned long resource_id, 1065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool defer) = 0; 1075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 10858537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) // Handles NPN_URLRedirectResponse calls issued by plugins in response to 10958537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) // HTTP URL redirect notifications. 11058537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) virtual void URLRedirectResponse(bool allow, int resource_id) = 0; 11158537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 11258537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) // Returns true if the new url is a secure transition. This is to catch a 11358537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) // plugin src url transitioning from https to http. 11458537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) virtual bool CheckIfRunInsecureContent(const GURL& url) = 0; 11558537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 11658537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)#if defined(OS_WIN) 11758537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) // |pump_messages_event| is a event handle which is used in NPP_HandleEvent 11858537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) // calls to pump messages if the plugin enters a modal loop. 11958537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) // |dummy_activation_window} is used to ensure correct keyboard activation. 12058537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) // It needs to be a child of the parent window. 12158537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) virtual void SetWindowlessData(HANDLE pump_messages_event, 12258537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) gfx::NativeViewId dummy_activation_window) = 0; 12358537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)#endif 12458537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 1255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if defined(OS_MACOSX) 1265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Called to inform the WebPlugin that the plugin has gained or lost focus. 1275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void FocusChanged(bool focused) {} 1285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Starts plugin IME. 1305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void StartIme() {} 1315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Returns the accelerated surface abstraction for accelerated plugins. 1335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual WebPluginAcceleratedSurface* GetAcceleratedSurface( 1345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) gfx::GpuPreference gpu_preference) = 0; 1355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1362a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Core Animation plugin support. CA plugins always render through 1372a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // the compositor. 1385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void AcceleratedPluginEnabledRendering() = 0; 1395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void AcceleratedPluginAllocatedIOSurface(int32 width, 1405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int32 height, 1415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) uint32 surface_id) = 0; 1425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void AcceleratedPluginSwappedIOSurface() = 0; 1435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif 1445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}; 1455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 146ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch} // namespace content 1475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 148ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch#endif // CONTENT_CHILD_NPAPI_WEBPLUGIN_H_ 149