Skip to content

Commit 37585d5

Browse files
committed
[Linux] support pepper flash
Fix nwjs#2923 use arguments like: --ppapi-flash-path=/opt/google/chrome-beta/PepperFlash/libpepflashplayer.so --ppapi-flash-version=15.0.0.152
1 parent a64f170 commit 37585d5

18 files changed

+1526
-0
lines changed

nw.gypi

Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -92,6 +92,11 @@
9292
'<(DEPTH)/extensions/extensions.gyp:extensions_utility',
9393
'<(DEPTH)/extensions/extensions_resources.gyp:extensions_resources',
9494
'<(DEPTH)/components/components_strings.gyp:components_strings',
95+
'<(DEPTH)/components/components.gyp:pdf_renderer',
96+
'<(DEPTH)/ppapi/ppapi_internal.gyp:ppapi_host',
97+
'<(DEPTH)/ppapi/ppapi_internal.gyp:ppapi_proxy',
98+
'<(DEPTH)/ppapi/ppapi_internal.gyp:ppapi_ipc',
99+
'<(DEPTH)/ppapi/ppapi_internal.gyp:ppapi_shared',
95100
'nw_resources',
96101
'commit_id',
97102
],
@@ -149,6 +154,25 @@
149154
'<(DEPTH)/chrome/common/chrome_constants.h',
150155
'<(DEPTH)/chrome/common/chrome_switches.cc',
151156
'<(DEPTH)/chrome/common/chrome_switches.h',
157+
'<(DEPTH)/chrome/renderer/pepper/chrome_pdf_print_client.cc',
158+
'<(DEPTH)/chrome/renderer/pepper/chrome_pdf_print_client.h',
159+
'<(DEPTH)/chrome/renderer/pepper/chrome_renderer_pepper_host_factory.cc',
160+
'<(DEPTH)/chrome/renderer/pepper/chrome_renderer_pepper_host_factory.h',
161+
'<(DEPTH)/chrome/renderer/pepper/pepper_flash_drm_renderer_host.cc',
162+
'<(DEPTH)/chrome/renderer/pepper/pepper_flash_drm_renderer_host.h',
163+
'<(DEPTH)/chrome/renderer/pepper/pepper_flash_font_file_host.cc',
164+
'<(DEPTH)/chrome/renderer/pepper/pepper_flash_font_file_host.h',
165+
'<(DEPTH)/chrome/renderer/pepper/pepper_flash_fullscreen_host.cc',
166+
'<(DEPTH)/chrome/renderer/pepper/pepper_flash_fullscreen_host.h',
167+
'<(DEPTH)/chrome/renderer/pepper/pepper_flash_menu_host.cc',
168+
'<(DEPTH)/chrome/renderer/pepper/pepper_flash_menu_host.h',
169+
'<(DEPTH)/chrome/renderer/pepper/pepper_flash_renderer_host.cc',
170+
'<(DEPTH)/chrome/renderer/pepper/pepper_flash_renderer_host.h',
171+
'<(DEPTH)/chrome/renderer/pepper/pepper_helper.cc',
172+
'<(DEPTH)/chrome/renderer/pepper/pepper_helper.h',
173+
'<(DEPTH)/chrome/renderer/pepper/pepper_shared_memory_message_filter.cc',
174+
'<(DEPTH)/chrome/renderer/pepper/pepper_shared_memory_message_filter.h',
175+
'<(DEPTH)/chrome/renderer/pepper/pepper_uma_host.h',
152176
'<(DEPTH)/extensions/common/draggable_region.cc',
153177
'<(DEPTH)/extensions/common/draggable_region.h',
154178
'<(DEPTH)/extensions/renderer/static_v8_external_one_byte_string_resource.cc',
@@ -363,6 +387,7 @@
363387
'src/paths_mac.mm',
364388
'src/renderer/common/render_messages.cc',
365389
'src/renderer/common/render_messages.h',
390+
'src/renderer/pepper_uma_host.cc',
366391
'src/renderer/prerenderer/prerenderer_client.cc',
367392
'src/renderer/prerenderer/prerenderer_client.h',
368393
'src/renderer/printing/print_web_view_helper.cc',
@@ -408,6 +433,16 @@
408433
'src/shell_quota_permission_context.cc',
409434
'src/shell_quota_permission_context.h',
410435
'<(SHARED_INTERMEDIATE_DIR)/content/grit/nw_component_resources_map.cc',
436+
'src/browser/pepper/chrome_browser_pepper_host_factory.cc',
437+
'src/browser/pepper/chrome_browser_pepper_host_factory.h',
438+
'src/browser/pepper/pepper_broker_message_filter.cc',
439+
'src/browser/pepper/pepper_broker_message_filter.h',
440+
'src/browser/pepper/pepper_flash_browser_host.cc',
441+
'src/browser/pepper/pepper_flash_browser_host.h',
442+
'src/browser/pepper/pepper_flash_clipboard_message_filter.cc',
443+
'src/browser/pepper/pepper_flash_clipboard_message_filter.h',
444+
'src/browser/pepper/pepper_isolated_file_system_message_filter.cc',
445+
'src/browser/pepper/pepper_isolated_file_system_message_filter.h',
411446
],
412447
'msvs_settings': {
413448
'VCLinkerTool': {
Lines changed: 94 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,94 @@
1+
// Copyright (c) 2012 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+
#include "content/nw/src/browser/pepper/chrome_browser_pepper_host_factory.h"
6+
7+
#include "build/build_config.h"
8+
#include "content/nw/src/browser/pepper/pepper_broker_message_filter.h"
9+
#include "content/nw/src/browser/pepper/pepper_flash_browser_host.h"
10+
#include "content/nw/src/browser/pepper/pepper_flash_clipboard_message_filter.h"
11+
#include "content/nw/src/browser/pepper/pepper_isolated_file_system_message_filter.h"
12+
#include "content/public/browser/browser_ppapi_host.h"
13+
#include "ppapi/host/message_filter_host.h"
14+
#include "ppapi/host/ppapi_host.h"
15+
#include "ppapi/host/resource_host.h"
16+
#include "ppapi/proxy/ppapi_messages.h"
17+
#include "ppapi/shared_impl/ppapi_permissions.h"
18+
19+
using ppapi::host::MessageFilterHost;
20+
using ppapi::host::ResourceHost;
21+
using ppapi::host::ResourceMessageFilter;
22+
23+
namespace chrome {
24+
25+
ChromeBrowserPepperHostFactory::ChromeBrowserPepperHostFactory(
26+
content::BrowserPpapiHost* host)
27+
: host_(host) {}
28+
29+
ChromeBrowserPepperHostFactory::~ChromeBrowserPepperHostFactory() {}
30+
31+
scoped_ptr<ResourceHost> ChromeBrowserPepperHostFactory::CreateResourceHost(
32+
ppapi::host::PpapiHost* host,
33+
PP_Resource resource,
34+
PP_Instance instance,
35+
const IPC::Message& message) {
36+
DCHECK(host == host_->GetPpapiHost());
37+
38+
// Make sure the plugin is giving us a valid instance for this resource.
39+
if (!host_->IsValidInstance(instance))
40+
return scoped_ptr<ResourceHost>();
41+
42+
// Private interfaces.
43+
if (host_->GetPpapiHost()->permissions().HasPermission(
44+
ppapi::PERMISSION_PRIVATE)) {
45+
switch (message.type()) {
46+
case PpapiHostMsg_Broker_Create::ID: {
47+
scoped_refptr<ResourceMessageFilter> broker_filter(
48+
new PepperBrokerMessageFilter(instance, host_));
49+
return scoped_ptr<ResourceHost>(new MessageFilterHost(
50+
host_->GetPpapiHost(), instance, resource, broker_filter));
51+
}
52+
}
53+
}
54+
55+
// Flash interfaces.
56+
if (host_->GetPpapiHost()->permissions().HasPermission(
57+
ppapi::PERMISSION_FLASH)) {
58+
switch (message.type()) {
59+
case PpapiHostMsg_Flash_Create::ID:
60+
return scoped_ptr<ResourceHost>(
61+
new PepperFlashBrowserHost(host_, instance, resource));
62+
case PpapiHostMsg_FlashClipboard_Create::ID: {
63+
scoped_refptr<ResourceMessageFilter> clipboard_filter(
64+
new PepperFlashClipboardMessageFilter);
65+
return scoped_ptr<ResourceHost>(new MessageFilterHost(
66+
host_->GetPpapiHost(), instance, resource, clipboard_filter));
67+
}
68+
#if 0
69+
case PpapiHostMsg_FlashDRM_Create::ID:
70+
return scoped_ptr<ResourceHost>(
71+
new PepperFlashDRMHost(host_, instance, resource));
72+
#endif
73+
}
74+
}
75+
76+
// Permissions for the following interfaces will be checked at the
77+
// time of the corresponding instance's methods calls (because
78+
// permission check can be performed only on the UI
79+
// thread). Currently these interfaces are available only for
80+
// whitelisted apps which may not have access to the other private
81+
// interfaces.
82+
if (message.type() == PpapiHostMsg_IsolatedFileSystem_Create::ID) {
83+
PepperIsolatedFileSystemMessageFilter* isolated_fs_filter =
84+
PepperIsolatedFileSystemMessageFilter::Create(instance, host_);
85+
if (!isolated_fs_filter)
86+
return scoped_ptr<ResourceHost>();
87+
return scoped_ptr<ResourceHost>(
88+
new MessageFilterHost(host, instance, resource, isolated_fs_filter));
89+
}
90+
91+
return scoped_ptr<ResourceHost>();
92+
}
93+
94+
} // namespace chrome
Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,38 @@
1+
// Copyright (c) 2012 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 CHROME_BROWSER_RENDERER_HOST_PEPPER_CHROME_BROWSER_PEPPER_HOST_FACTORY_H_
6+
#define CHROME_BROWSER_RENDERER_HOST_PEPPER_CHROME_BROWSER_PEPPER_HOST_FACTORY_H_
7+
8+
#include "base/compiler_specific.h"
9+
#include "ppapi/host/host_factory.h"
10+
11+
namespace content {
12+
class BrowserPpapiHost;
13+
} // namespace content
14+
15+
namespace chrome {
16+
17+
class ChromeBrowserPepperHostFactory : public ppapi::host::HostFactory {
18+
public:
19+
// Non-owning pointer to the filter must outlive this class.
20+
explicit ChromeBrowserPepperHostFactory(content::BrowserPpapiHost* host);
21+
~ChromeBrowserPepperHostFactory() override;
22+
23+
scoped_ptr<ppapi::host::ResourceHost> CreateResourceHost(
24+
ppapi::host::PpapiHost* host,
25+
PP_Resource resource,
26+
PP_Instance instance,
27+
const IPC::Message& message) override;
28+
29+
private:
30+
// Non-owning pointer.
31+
content::BrowserPpapiHost* host_;
32+
33+
DISALLOW_COPY_AND_ASSIGN(ChromeBrowserPepperHostFactory);
34+
};
35+
36+
} // namespace chrome
37+
38+
#endif // CHROME_BROWSER_RENDERER_HOST_PEPPER_CHROME_BROWSER_PEPPER_HOST_FACTORY_H_
Lines changed: 56 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,56 @@
1+
// Copyright (c) 2012 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+
#include "content/nw/src/browser/pepper/pepper_broker_message_filter.h"
6+
7+
#include <string>
8+
9+
#include "components/content_settings/core/browser/host_content_settings_map.h"
10+
#include "components/content_settings/core/common/content_settings.h"
11+
#include "content/public/browser/browser_ppapi_host.h"
12+
#include "content/public/browser/browser_thread.h"
13+
#include "content/public/browser/render_process_host.h"
14+
#include "ipc/ipc_message_macros.h"
15+
#include "ppapi/c/pp_errors.h"
16+
#include "ppapi/host/dispatch_host_message.h"
17+
#include "ppapi/proxy/ppapi_messages.h"
18+
#include "url/gurl.h"
19+
20+
using content::BrowserPpapiHost;
21+
using content::BrowserThread;
22+
using content::RenderProcessHost;
23+
24+
namespace chrome {
25+
26+
PepperBrokerMessageFilter::PepperBrokerMessageFilter(PP_Instance instance,
27+
BrowserPpapiHost* host)
28+
: document_url_(host->GetDocumentURLForInstance(instance)) {
29+
int unused;
30+
host->GetRenderFrameIDsForInstance(instance, &render_process_id_, &unused);
31+
}
32+
33+
PepperBrokerMessageFilter::~PepperBrokerMessageFilter() {}
34+
35+
scoped_refptr<base::TaskRunner>
36+
PepperBrokerMessageFilter::OverrideTaskRunnerForMessage(
37+
const IPC::Message& message) {
38+
return BrowserThread::GetMessageLoopProxyForThread(BrowserThread::UI);
39+
}
40+
41+
int32_t PepperBrokerMessageFilter::OnResourceMessageReceived(
42+
const IPC::Message& msg,
43+
ppapi::host::HostMessageContext* context) {
44+
PPAPI_BEGIN_MESSAGE_MAP(PepperBrokerMessageFilter, msg)
45+
PPAPI_DISPATCH_HOST_RESOURCE_CALL_0(PpapiHostMsg_Broker_IsAllowed,
46+
OnIsAllowed)
47+
PPAPI_END_MESSAGE_MAP()
48+
return PP_ERROR_FAILED;
49+
}
50+
51+
int32_t PepperBrokerMessageFilter::OnIsAllowed(
52+
ppapi::host::HostMessageContext* context) {
53+
return PP_OK;
54+
}
55+
56+
} // namespace chrome
Lines changed: 51 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,51 @@
1+
// Copyright (c) 2012 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 CHROME_BROWSER_RENDERER_HOST_PEPPER_PEPPER_BROKER_MESSAGE_FILTER_H_
6+
#define CHROME_BROWSER_RENDERER_HOST_PEPPER_PEPPER_BROKER_MESSAGE_FILTER_H_
7+
8+
#include "base/compiler_specific.h"
9+
#include "ppapi/c/pp_instance.h"
10+
#include "ppapi/host/resource_message_filter.h"
11+
#include "url/gurl.h"
12+
13+
namespace content {
14+
class BrowserPpapiHost;
15+
}
16+
17+
namespace ppapi {
18+
namespace host {
19+
struct HostMessageContext;
20+
}
21+
}
22+
23+
namespace chrome {
24+
25+
// This filter handles messages for the PepperBrokerHost on the UI thread.
26+
class PepperBrokerMessageFilter : public ppapi::host::ResourceMessageFilter {
27+
public:
28+
PepperBrokerMessageFilter(PP_Instance instance,
29+
content::BrowserPpapiHost* host);
30+
31+
private:
32+
~PepperBrokerMessageFilter() override;
33+
34+
// ppapi::host::ResourceMessageFilter overrides.
35+
scoped_refptr<base::TaskRunner> OverrideTaskRunnerForMessage(
36+
const IPC::Message& message) override;
37+
int32_t OnResourceMessageReceived(
38+
const IPC::Message& msg,
39+
ppapi::host::HostMessageContext* context) override;
40+
41+
int32_t OnIsAllowed(ppapi::host::HostMessageContext* context);
42+
43+
int render_process_id_;
44+
GURL document_url_;
45+
46+
DISALLOW_COPY_AND_ASSIGN(PepperBrokerMessageFilter);
47+
};
48+
49+
} // namespace chrome
50+
51+
#endif // CHROME_BROWSER_RENDERER_HOST_PEPPER_PEPPER_BROKER_MESSAGE_FILTER_H_

0 commit comments

Comments
 (0)