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