Skip to content
This repository was archived by the owner on Jan 4, 2019. It is now read-only.

Commit b18ed58

Browse files
committed
load flash even if the switch is added after AtomContentClient::AddPepperPlugins is called
fixes brave/browser-laptop#3878
1 parent b59db72 commit b18ed58

6 files changed

+122
-55
lines changed

atom/app/atom_content_client.cc

+1-55
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@
1010
#include "atom/common/atom_version.h"
1111
#include "atom/common/chrome_version.h"
1212
#include "atom/common/options_switches.h"
13+
#include "atom/common/pepper_flash_util.h"
1314
#include "base/command_line.h"
1415
#include "base/files/file_util.h"
1516
#include "base/strings/string_split.h"
@@ -18,7 +19,6 @@
1819
#include "content/public/common/content_constants.h"
1920
#include "content/public/common/pepper_plugin_info.h"
2021
#include "content/public/common/user_agent.h"
21-
#include "ppapi/shared_impl/ppapi_permissions.h"
2222
#include "third_party/widevine/cdm/stub/widevine_cdm_version.h"
2323
#include "ui/base/l10n/l10n_util.h"
2424
#include "url/url_constants.h"
@@ -36,46 +36,6 @@ namespace atom {
3636

3737
namespace {
3838

39-
content::PepperPluginInfo CreatePepperFlashInfo(const base::FilePath& path,
40-
const std::string& version) {
41-
content::PepperPluginInfo plugin;
42-
43-
plugin.is_out_of_process = true;
44-
plugin.name = content::kFlashPluginName;
45-
plugin.path = path;
46-
plugin.permissions = ppapi::PERMISSION_ALL_BITS;
47-
48-
std::vector<std::string> flash_version_numbers = base::SplitString(
49-
version, ".", base::TRIM_WHITESPACE, base::SPLIT_WANT_NONEMPTY);
50-
if (flash_version_numbers.size() < 1)
51-
flash_version_numbers.push_back("11");
52-
// |SplitString()| puts in an empty string given an empty string. :(
53-
else if (flash_version_numbers[0].empty())
54-
flash_version_numbers[0] = "11";
55-
if (flash_version_numbers.size() < 2)
56-
flash_version_numbers.push_back("2");
57-
if (flash_version_numbers.size() < 3)
58-
flash_version_numbers.push_back("999");
59-
if (flash_version_numbers.size() < 4)
60-
flash_version_numbers.push_back("999");
61-
// E.g., "Shockwave Flash 10.2 r154":
62-
plugin.description = plugin.name + " " + flash_version_numbers[0] + "." +
63-
flash_version_numbers[1] + " r" + flash_version_numbers[2];
64-
plugin.version = base::JoinString(flash_version_numbers, ".");
65-
content::WebPluginMimeType swf_mime_type(
66-
content::kFlashPluginSwfMimeType,
67-
content::kFlashPluginSwfExtension,
68-
content::kFlashPluginSwfDescription);
69-
plugin.mime_types.push_back(swf_mime_type);
70-
content::WebPluginMimeType spl_mime_type(
71-
content::kFlashPluginSplMimeType,
72-
content::kFlashPluginSplExtension,
73-
content::kFlashPluginSplDescription);
74-
plugin.mime_types.push_back(spl_mime_type);
75-
76-
return plugin;
77-
}
78-
7939
#if defined(WIDEVINE_CDM_AVAILABLE) && defined(ENABLE_PEPPER_CDMS)
8040
content::PepperPluginInfo CreateWidevineCdmInfo(const base::FilePath& path,
8141
const std::string& version) {
@@ -126,20 +86,6 @@ void ConvertStringWithSeparatorToVector(std::vector<std::string>* vec,
12686

12787
} // namespace
12888

129-
void AddPepperFlashFromCommandLine(
130-
std::vector<content::PepperPluginInfo>* plugins) {
131-
auto command_line = base::CommandLine::ForCurrentProcess();
132-
base::FilePath flash_path = command_line->GetSwitchValuePath(
133-
switches::kPpapiFlashPath);
134-
if (flash_path.empty())
135-
return;
136-
137-
auto flash_version = command_line->GetSwitchValueASCII(
138-
switches::kPpapiFlashVersion);
139-
140-
plugins->push_back(CreatePepperFlashInfo(flash_path, flash_version));
141-
}
142-
14389
#if defined(WIDEVINE_CDM_AVAILABLE) && defined(ENABLE_PEPPER_CDMS)
14490
void AddWidevineCdmFromCommandLine(
14591
std::vector<content::PepperPluginInfo>* plugins) {

atom/browser/api/atom_api_app.cc

+17
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@
2424
#include "atom/common/native_mate_converters/value_converter.h"
2525
#include "atom/common/node_includes.h"
2626
#include "atom/common/options_switches.h"
27+
#include "atom/common/pepper_flash_util.h"
2728
#include "base/command_line.h"
2829
#include "base/environment.h"
2930
#include "base/files/file_path.h"
@@ -33,6 +34,7 @@
3334
#include "brave/browser/brave_content_browser_client.h"
3435
#include "brightray/browser/brightray_paths.h"
3536
#include "chrome/common/chrome_paths.h"
37+
#include "content/browser/plugin_service_impl.h"
3638
#include "content/public/browser/browser_accessibility_state.h"
3739
#include "content/public/browser/browser_thread.h"
3840
#include "content/public/browser/client_certificate_delegate.h"
@@ -716,6 +718,21 @@ void AppendSwitch(const std::string& switch_string, mate::Arguments* args) {
716718
base::FilePath path;
717719
args->GetNext(&path);
718720
command_line->AppendSwitchPath(switch_string, path);
721+
722+
// load flash if the switch is added after
723+
// AtomContentClient::AddPepperPlugins is called
724+
if (switch_string == atom::switches::kPpapiFlashPath) {
725+
std::vector<content::PepperPluginInfo> plugins;
726+
atom::AddPepperFlashFromCommandLine(&plugins);
727+
auto plugin_service = content::PluginServiceImpl::GetInstance();
728+
for (size_t i = 0; i < plugins.size(); ++i) {
729+
if (!plugin_service->
730+
GetRegisteredPpapiPluginInfo(plugins[i].path)) {
731+
plugin_service->
732+
RegisterInternalPlugin(plugins[i].ToWebPluginInfo(), true);
733+
}
734+
}
735+
}
719736
return;
720737
}
721738

atom/browser/atom_browser_client.cc

+3
Original file line numberDiff line numberDiff line change
@@ -204,6 +204,9 @@ void AtomBrowserClient::AppendExtraCommandLineSwitches(
204204
// Copy following switches to child process.
205205
static const char* const kCommonSwitchNames[] = {
206206
switches::kStandardSchemes,
207+
switches::kEnablePlugins,
208+
switches::kPpapiFlashPath,
209+
switches::kPpapiFlashVersion,
207210
};
208211
command_line->CopySwitchesFrom(
209212
*base::CommandLine::ForCurrentProcess(),

atom/common/pepper_flash_util.cc

+76
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,76 @@
1+
// Copyright (c) 2013 GitHub, Inc.
2+
// Use of this source code is governed by the MIT license that can be
3+
// found in the LICENSE file.
4+
5+
#include "atom/common/pepper_flash_util.h"
6+
7+
#include "atom/common/options_switches.h"
8+
#include "base/command_line.h"
9+
#include "base/strings/string_split.h"
10+
#include "base/strings/string_util.h"
11+
#include "content/public/common/content_constants.h"
12+
#include "ppapi/shared_impl/ppapi_permissions.h"
13+
14+
namespace atom {
15+
16+
content::PepperPluginInfo CreatePepperFlashInfo(const base::FilePath& path,
17+
const std::string& version) {
18+
content::PepperPluginInfo plugin;
19+
20+
plugin.is_out_of_process = true;
21+
plugin.name = content::kFlashPluginName;
22+
plugin.path = path;
23+
#if defined(OS_WIN)
24+
plugin.is_on_local_drive = !base::IsOnNetworkDrive(path);
25+
#endif
26+
plugin.permissions = ppapi::PERMISSION_DEV | ppapi::PERMISSION_PRIVATE |
27+
ppapi::PERMISSION_BYPASS_USER_GESTURE | ppapi::PERMISSION_FLASH;
28+
plugin.is_external = true;
29+
30+
std::vector<std::string> flash_version_numbers = base::SplitString(
31+
version, ".", base::TRIM_WHITESPACE, base::SPLIT_WANT_NONEMPTY);
32+
if (flash_version_numbers.size() < 1)
33+
flash_version_numbers.push_back("11");
34+
// |SplitString()| puts in an empty string given an empty string. :(
35+
else if (flash_version_numbers[0].empty())
36+
flash_version_numbers[0] = "11";
37+
if (flash_version_numbers.size() < 2)
38+
flash_version_numbers.push_back("2");
39+
if (flash_version_numbers.size() < 3)
40+
flash_version_numbers.push_back("999");
41+
if (flash_version_numbers.size() < 4)
42+
flash_version_numbers.push_back("999");
43+
// E.g., "Shockwave Flash 10.2 r154":
44+
plugin.description = plugin.name + " " + flash_version_numbers[0] + "." +
45+
flash_version_numbers[1] + " r" + flash_version_numbers[2];
46+
plugin.version = base::JoinString(flash_version_numbers, ".");
47+
content::WebPluginMimeType swf_mime_type(
48+
content::kFlashPluginSwfMimeType,
49+
content::kFlashPluginSwfExtension,
50+
content::kFlashPluginSwfDescription);
51+
plugin.mime_types.push_back(swf_mime_type);
52+
content::WebPluginMimeType spl_mime_type(
53+
content::kFlashPluginSplMimeType,
54+
content::kFlashPluginSplExtension,
55+
content::kFlashPluginSplDescription);
56+
plugin.mime_types.push_back(spl_mime_type);
57+
58+
return plugin;
59+
}
60+
61+
void AddPepperFlashFromCommandLine(
62+
std::vector<content::PepperPluginInfo>* plugins) {
63+
auto command_line = base::CommandLine::ForCurrentProcess();
64+
const base::CommandLine::StringType flash_path =
65+
command_line->GetSwitchValueNative(switches::kPpapiFlashPath);
66+
if (flash_path.empty())
67+
return;
68+
69+
auto flash_version = command_line->GetSwitchValueNative(
70+
switches::kPpapiFlashVersion);
71+
72+
plugins->push_back(
73+
CreatePepperFlashInfo(base::FilePath(flash_path), flash_version));
74+
}
75+
76+
} // namespace atom

atom/common/pepper_flash_util.h

+23
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
// Copyright (c) 2013 GitHub, Inc.
2+
// Use of this source code is governed by the MIT license that can be
3+
// found in the LICENSE file.
4+
5+
#ifndef ATOM_COMMON_PEPPER_FLASH_UTIL_H_
6+
#define ATOM_COMMON_PEPPER_FLASH_UTIL_H_
7+
8+
#include <string>
9+
#include <vector>
10+
#include "base/files/file_path.h"
11+
#include "content/public/common/pepper_plugin_info.h"
12+
13+
namespace atom {
14+
15+
content::PepperPluginInfo CreatePepperFlashInfo(const base::FilePath& path,
16+
const std::string& version);
17+
18+
void AddPepperFlashFromCommandLine(
19+
std::vector<content::PepperPluginInfo>* plugins);
20+
21+
} // namespace atom
22+
23+
#endif // ATOM_COMMON_PEPPER_FLASH_UTIL_H_

filenames.gypi

+2
Original file line numberDiff line numberDiff line change
@@ -419,6 +419,8 @@
419419
'atom/common/node_includes.h',
420420
'atom/common/options_switches.cc',
421421
'atom/common/options_switches.h',
422+
'atom/common/pepper_flash_util.cc',
423+
'atom/common/pepper_flash_util.h',
422424
'atom/common/platform_util.h',
423425
'atom/common/platform_util_linux.cc',
424426
'atom/common/platform_util_mac.mm',

0 commit comments

Comments
 (0)