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

Commit

Permalink
load flash even if the switch is added after AtomContentClient::AddPe…
Browse files Browse the repository at this point in the history
…pperPlugins is called

fixes brave/browser-laptop#3878
  • Loading branch information
bridiver committed Sep 16, 2016
1 parent 49d2bf4 commit 7420773
Show file tree
Hide file tree
Showing 6 changed files with 122 additions and 55 deletions.
56 changes: 1 addition & 55 deletions atom/app/atom_content_client.cc
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,7 @@
#include "atom/common/atom_version.h"
#include "atom/common/chrome_version.h"
#include "atom/common/options_switches.h"
#include "atom/common/pepper_flash_util.h"
#include "base/command_line.h"
#include "base/files/file_util.h"
#include "base/strings/string_split.h"
Expand All @@ -18,7 +19,6 @@
#include "content/public/common/content_constants.h"
#include "content/public/common/pepper_plugin_info.h"
#include "content/public/common/user_agent.h"
#include "ppapi/shared_impl/ppapi_permissions.h"
#include "third_party/widevine/cdm/stub/widevine_cdm_version.h"
#include "ui/base/l10n/l10n_util.h"
#include "url/url_constants.h"
Expand All @@ -36,46 +36,6 @@ namespace atom {

namespace {

content::PepperPluginInfo CreatePepperFlashInfo(const base::FilePath& path,
const std::string& version) {
content::PepperPluginInfo plugin;

plugin.is_out_of_process = true;
plugin.name = content::kFlashPluginName;
plugin.path = path;
plugin.permissions = ppapi::PERMISSION_ALL_BITS;

std::vector<std::string> flash_version_numbers = base::SplitString(
version, ".", base::TRIM_WHITESPACE, base::SPLIT_WANT_NONEMPTY);
if (flash_version_numbers.size() < 1)
flash_version_numbers.push_back("11");
// |SplitString()| puts in an empty string given an empty string. :(
else if (flash_version_numbers[0].empty())
flash_version_numbers[0] = "11";
if (flash_version_numbers.size() < 2)
flash_version_numbers.push_back("2");
if (flash_version_numbers.size() < 3)
flash_version_numbers.push_back("999");
if (flash_version_numbers.size() < 4)
flash_version_numbers.push_back("999");
// E.g., "Shockwave Flash 10.2 r154":
plugin.description = plugin.name + " " + flash_version_numbers[0] + "." +
flash_version_numbers[1] + " r" + flash_version_numbers[2];
plugin.version = base::JoinString(flash_version_numbers, ".");
content::WebPluginMimeType swf_mime_type(
content::kFlashPluginSwfMimeType,
content::kFlashPluginSwfExtension,
content::kFlashPluginSwfDescription);
plugin.mime_types.push_back(swf_mime_type);
content::WebPluginMimeType spl_mime_type(
content::kFlashPluginSplMimeType,
content::kFlashPluginSplExtension,
content::kFlashPluginSplDescription);
plugin.mime_types.push_back(spl_mime_type);

return plugin;
}

#if defined(WIDEVINE_CDM_AVAILABLE) && defined(ENABLE_PEPPER_CDMS)
content::PepperPluginInfo CreateWidevineCdmInfo(const base::FilePath& path,
const std::string& version) {
Expand Down Expand Up @@ -126,20 +86,6 @@ void ConvertStringWithSeparatorToVector(std::vector<std::string>* vec,

} // namespace

void AddPepperFlashFromCommandLine(
std::vector<content::PepperPluginInfo>* plugins) {
auto command_line = base::CommandLine::ForCurrentProcess();
base::FilePath flash_path = command_line->GetSwitchValuePath(
switches::kPpapiFlashPath);
if (flash_path.empty())
return;

auto flash_version = command_line->GetSwitchValueASCII(
switches::kPpapiFlashVersion);

plugins->push_back(CreatePepperFlashInfo(flash_path, flash_version));
}

#if defined(WIDEVINE_CDM_AVAILABLE) && defined(ENABLE_PEPPER_CDMS)
void AddWidevineCdmFromCommandLine(
std::vector<content::PepperPluginInfo>* plugins) {
Expand Down
17 changes: 17 additions & 0 deletions atom/browser/api/atom_api_app.cc
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,7 @@
#include "atom/common/native_mate_converters/value_converter.h"
#include "atom/common/node_includes.h"
#include "atom/common/options_switches.h"
#include "atom/common/pepper_flash_util.h"
#include "base/command_line.h"
#include "base/environment.h"
#include "base/files/file_path.h"
Expand All @@ -33,6 +34,7 @@
#include "brave/browser/brave_content_browser_client.h"
#include "brightray/browser/brightray_paths.h"
#include "chrome/common/chrome_paths.h"
#include "content/browser/plugin_service_impl.h"
#include "content/public/browser/browser_accessibility_state.h"
#include "content/public/browser/browser_thread.h"
#include "content/public/browser/client_certificate_delegate.h"
Expand Down Expand Up @@ -989,6 +991,21 @@ void AppendSwitch(const std::string& switch_string, mate::Arguments* args) {
base::FilePath path;
args->GetNext(&path);
command_line->AppendSwitchPath(switch_string, path);

// load flash if the switch is added after
// AtomContentClient::AddPepperPlugins is called
if (switch_string == atom::switches::kPpapiFlashPath) {
std::vector<content::PepperPluginInfo> plugins;
atom::AddPepperFlashFromCommandLine(&plugins);
auto plugin_service = content::PluginServiceImpl::GetInstance();
for (size_t i = 0; i < plugins.size(); ++i) {
if (!plugin_service->
GetRegisteredPpapiPluginInfo(plugins[i].path)) {
plugin_service->
RegisterInternalPlugin(plugins[i].ToWebPluginInfo(), true);
}
}
}
return;
}

Expand Down
3 changes: 3 additions & 0 deletions atom/browser/atom_browser_client.cc
Original file line number Diff line number Diff line change
Expand Up @@ -220,6 +220,9 @@ void AtomBrowserClient::AppendExtraCommandLineSwitches(
// Copy following switches to child process.
static const char* const kCommonSwitchNames[] = {
switches::kStandardSchemes,
switches::kEnablePlugins,
switches::kPpapiFlashPath,
switches::kPpapiFlashVersion,
};
command_line->CopySwitchesFrom(
*base::CommandLine::ForCurrentProcess(),
Expand Down
76 changes: 76 additions & 0 deletions atom/common/pepper_flash_util.cc
Original file line number Diff line number Diff line change
@@ -0,0 +1,76 @@
// Copyright (c) 2013 GitHub, Inc.
// Use of this source code is governed by the MIT license that can be
// found in the LICENSE file.

#include "atom/common/pepper_flash_util.h"

#include "atom/common/options_switches.h"
#include "base/command_line.h"
#include "base/strings/string_split.h"
#include "base/strings/string_util.h"
#include "content/public/common/content_constants.h"
#include "ppapi/shared_impl/ppapi_permissions.h"

namespace atom {

content::PepperPluginInfo CreatePepperFlashInfo(const base::FilePath& path,
const std::string& version) {
content::PepperPluginInfo plugin;

plugin.is_out_of_process = true;
plugin.name = content::kFlashPluginName;
plugin.path = path;
#if defined(OS_WIN)
plugin.is_on_local_drive = !base::IsOnNetworkDrive(path);
#endif
plugin.permissions = ppapi::PERMISSION_DEV | ppapi::PERMISSION_PRIVATE |
ppapi::PERMISSION_BYPASS_USER_GESTURE | ppapi::PERMISSION_FLASH;
plugin.is_external = true;

std::vector<std::string> flash_version_numbers = base::SplitString(
version, ".", base::TRIM_WHITESPACE, base::SPLIT_WANT_NONEMPTY);
if (flash_version_numbers.size() < 1)
flash_version_numbers.push_back("11");
// |SplitString()| puts in an empty string given an empty string. :(
else if (flash_version_numbers[0].empty())
flash_version_numbers[0] = "11";
if (flash_version_numbers.size() < 2)
flash_version_numbers.push_back("2");
if (flash_version_numbers.size() < 3)
flash_version_numbers.push_back("999");
if (flash_version_numbers.size() < 4)
flash_version_numbers.push_back("999");
// E.g., "Shockwave Flash 10.2 r154":
plugin.description = plugin.name + " " + flash_version_numbers[0] + "." +
flash_version_numbers[1] + " r" + flash_version_numbers[2];
plugin.version = base::JoinString(flash_version_numbers, ".");
content::WebPluginMimeType swf_mime_type(
content::kFlashPluginSwfMimeType,
content::kFlashPluginSwfExtension,
content::kFlashPluginSwfDescription);
plugin.mime_types.push_back(swf_mime_type);
content::WebPluginMimeType spl_mime_type(
content::kFlashPluginSplMimeType,
content::kFlashPluginSplExtension,
content::kFlashPluginSplDescription);
plugin.mime_types.push_back(spl_mime_type);

return plugin;
}

void AddPepperFlashFromCommandLine(
std::vector<content::PepperPluginInfo>* plugins) {
auto command_line = base::CommandLine::ForCurrentProcess();
const base::CommandLine::StringType flash_path =
command_line->GetSwitchValueNative(switches::kPpapiFlashPath);
if (flash_path.empty())
return;

auto flash_version = command_line->GetSwitchValueNative(
switches::kPpapiFlashVersion);

plugins->push_back(
CreatePepperFlashInfo(base::FilePath(flash_path), flash_version));
}

} // namespace atom
23 changes: 23 additions & 0 deletions atom/common/pepper_flash_util.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
// Copyright (c) 2013 GitHub, Inc.
// Use of this source code is governed by the MIT license that can be
// found in the LICENSE file.

#ifndef ATOM_COMMON_PEPPER_FLASH_UTIL_H_
#define ATOM_COMMON_PEPPER_FLASH_UTIL_H_

#include <string>
#include <vector>
#include "base/files/file_path.h"
#include "content/public/common/pepper_plugin_info.h"

namespace atom {

content::PepperPluginInfo CreatePepperFlashInfo(const base::FilePath& path,
const std::string& version);

void AddPepperFlashFromCommandLine(
std::vector<content::PepperPluginInfo>* plugins);

} // namespace atom

#endif // ATOM_COMMON_PEPPER_FLASH_UTIL_H_
2 changes: 2 additions & 0 deletions filenames.gypi
Original file line number Diff line number Diff line change
Expand Up @@ -421,6 +421,8 @@
'atom/common/node_includes.h',
'atom/common/options_switches.cc',
'atom/common/options_switches.h',
'atom/common/pepper_flash_util.cc',
'atom/common/pepper_flash_util.h',
'atom/common/platform_util.h',
'atom/common/platform_util_linux.cc',
'atom/common/platform_util_mac.mm',
Expand Down

0 comments on commit 7420773

Please sign in to comment.