Update To 11.40.268.0
[platform/framework/web/crosswalk.git] / src / content / renderer / media / crypto / pepper_cdm_wrapper_impl.h
1 // Copyright 2014 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4
5 #ifndef CONTENT_RENDERER_MEDIA_CRYPTO_PEPPER_CDM_WRAPPER_IMPL_H_
6 #define CONTENT_RENDERER_MEDIA_CRYPTO_PEPPER_CDM_WRAPPER_IMPL_H_
7
8 #if !defined(ENABLE_PEPPER_CDMS)
9 #error This file should only be included when ENABLE_PEPPER_CDMS is defined
10 #endif
11
12 #include "base/callback.h"
13 #include "base/memory/ref_counted.h"
14 #include "base/memory/scoped_ptr.h"
15 #include "content/renderer/media/crypto/pepper_cdm_wrapper.h"
16
17 namespace blink {
18 class WebHelperPlugin;
19 class WebLocalFrame;
20 }
21
22 namespace content {
23
24 class ContentDecryptorDelegate;
25 class PepperPluginInstanceImpl;
26
27 // Deleter for blink::WebHelperPlugin.
28 struct WebHelperPluginDeleter {
29   void operator()(blink::WebHelperPlugin* plugin) const;
30 };
31
32 // Implements a wrapper on blink::WebHelperPlugin so that the plugin gets
33 // destroyed properly. It owns all the objects derived from WebHelperPlugin
34 // (WebPlugin, PepperPluginInstanceImpl, ContentDecryptionDelegate), and will
35 // free them as necessary when this wrapper is destroyed. In particular, it
36 // takes a reference to PepperPluginInstanceImpl so it won't go away until
37 // this object is destroyed.
38 //
39 // Implemented so that lower layers in Chromium don't need to be aware of
40 // blink:: objects.
41 class PepperCdmWrapperImpl : public PepperCdmWrapper {
42  public:
43   static scoped_ptr<PepperCdmWrapper> Create(blink::WebLocalFrame* frame,
44                                              const std::string& pluginType,
45                                              const GURL& security_origin);
46
47   ~PepperCdmWrapperImpl() override;
48
49   // Returns the ContentDecryptorDelegate* associated with this plugin.
50   ContentDecryptorDelegate* GetCdmDelegate() override;
51
52  private:
53   typedef scoped_ptr<blink::WebHelperPlugin, WebHelperPluginDeleter>
54       ScopedHelperPlugin;
55
56   // Takes ownership of |helper_plugin| and |plugin_instance|.
57   PepperCdmWrapperImpl(
58       ScopedHelperPlugin helper_plugin,
59       const scoped_refptr<PepperPluginInstanceImpl>& plugin_instance);
60
61   ScopedHelperPlugin helper_plugin_;
62   scoped_refptr<PepperPluginInstanceImpl> plugin_instance_;
63
64   DISALLOW_COPY_AND_ASSIGN(PepperCdmWrapperImpl);
65 };
66
67 }  // namespace content
68
69 #endif  // CONTENT_RENDERER_MEDIA_CRYPTO_PEPPER_CDM_WRAPPER_IMPL_H_