extra/chromium to 48.0.2564.82-1

This commit is contained in:
Kevin Mihelich 2016-01-22 00:28:08 +00:00
parent b2bc36a21a
commit 9bf654e51e
5 changed files with 79 additions and 1016 deletions

View file

@ -1,218 +0,0 @@
From 7e84668966d8b844e11af9d60e1bc6979ab46b2c Mon Sep 17 00:00:00 2001
From: Evangelos Foutras <evangelos@foutrelis.com>
Date: Mon, 19 Oct 2015 12:00:28 +0300
Subject: [PATCH] Add FPDFAPIJPEG_ prefix to more libjpeg functions
Chromium built with use_system_libjpeg=1 can mistakenly try to use
symbols exported by the libjpeg library that's bundled with pdfium.
These name conflicts result in failure to encode the contents of a
canvas element using toDataURL('image/jpeg').
BUG=505226
---
core/include/thirdparties/libjpeg/jpeglib.h | 35 +++++++++++++++++++++++++++++
third_party/libjpeg/jpeglib.h | 35 +++++++++++++++++++++++++++++
2 files changed, 70 insertions(+)
diff --git a/core/include/thirdparties/libjpeg/jpeglib.h b/core/include/thirdparties/libjpeg/jpeglib.h
index 7de5ab7..f6af4f2 100644
--- a/core/include/thirdparties/libjpeg/jpeglib.h
+++ b/core/include/thirdparties/libjpeg/jpeglib.h
@@ -20,33 +20,53 @@
#define jdiv_round_up FOXIT_PREFIX(jdiv_round_up)
#define jinit_1pass_quantizer FOXIT_PREFIX(jinit_1pass_quantizer)
#define jinit_2pass_quantizer FOXIT_PREFIX(jinit_2pass_quantizer)
+#define jinit_c_coef_controller FOXIT_PREFIX(jinit_c_coef_controller)
+#define jinit_c_main_controller FOXIT_PREFIX(jinit_c_main_controller)
+#define jinit_c_master_control FOXIT_PREFIX(jinit_c_master_control)
+#define jinit_c_prep_controller FOXIT_PREFIX(jinit_c_prep_controller)
+#define jinit_color_converter FOXIT_PREFIX(jinit_color_converter)
#define jinit_color_deconverter FOXIT_PREFIX(jinit_color_deconverter)
+#define jinit_compress_master FOXIT_PREFIX(jinit_compress_master)
#define jinit_d_coef_controller FOXIT_PREFIX(jinit_d_coef_controller)
#define jinit_d_main_controller FOXIT_PREFIX(jinit_d_main_controller)
#define jinit_d_post_controller FOXIT_PREFIX(jinit_d_post_controller)
+#define jinit_downsampler FOXIT_PREFIX(jinit_downsampler)
+#define jinit_forward_dct FOXIT_PREFIX(jinit_forward_dct)
#define jinit_huff_decoder FOXIT_PREFIX(jinit_huff_decoder)
+#define jinit_huff_encoder FOXIT_PREFIX(jinit_huff_encoder)
#define jinit_input_controller FOXIT_PREFIX(jinit_input_controller)
#define jinit_inverse_dct FOXIT_PREFIX(jinit_inverse_dct)
#define jinit_marker_reader FOXIT_PREFIX(jinit_marker_reader)
+#define jinit_marker_writer FOXIT_PREFIX(jinit_marker_writer)
#define jinit_master_decompress FOXIT_PREFIX(jinit_master_decompress)
#define jinit_memory_mgr FOXIT_PREFIX(jinit_memory_mgr)
#define jinit_merged_upsampler FOXIT_PREFIX(jinit_merged_upsampler)
#define jinit_phuff_decoder FOXIT_PREFIX(jinit_phuff_decoder)
+#define jinit_phuff_encoder FOXIT_PREFIX(jinit_phuff_encoder)
#define jinit_upsampler FOXIT_PREFIX(jinit_upsampler)
+#define jpeg_CreateCompress FOXIT_PREFIX(jpeg_CreateCompress)
#define jpeg_CreateDecompress FOXIT_PREFIX(jpeg_CreateDecompress)
#define jpeg_abort FOXIT_PREFIX(jpeg_abort)
+#define jpeg_abort_compress FOXIT_PREFIX(jpeg_abort_compress)
#define jpeg_abort_decompress FOXIT_PREFIX(jpeg_abort_decompress)
+#define jpeg_add_quant_table FOXIT_PREFIX(jpeg_add_quant_table)
#define jpeg_alloc_huff_table FOXIT_PREFIX(jpeg_alloc_huff_table)
#define jpeg_alloc_quant_table FOXIT_PREFIX(jpeg_alloc_quant_table)
#define jpeg_calc_output_dimensions FOXIT_PREFIX(jpeg_calc_output_dimensions)
#define jpeg_consume_input FOXIT_PREFIX(jpeg_consume_input)
+#define jpeg_default_colorspace FOXIT_PREFIX(jpeg_default_colorspace)
#define jpeg_destroy FOXIT_PREFIX(jpeg_destroy)
+#define jpeg_destroy_compress FOXIT_PREFIX(jpeg_destroy_compress)
#define jpeg_destroy_decompress FOXIT_PREFIX(jpeg_destroy_decompress)
+#define jpeg_fdct_ifast FOXIT_PREFIX(jpeg_fdct_ifast)
+#define jpeg_fdct_islow FOXIT_PREFIX(jpeg_fdct_islow)
#define jpeg_fill_bit_buffer FOXIT_PREFIX(jpeg_fill_bit_buffer)
+#define jpeg_finish_compress FOXIT_PREFIX(jpeg_finish_compress)
#define jpeg_finish_decompress FOXIT_PREFIX(jpeg_finish_decompress)
#define jpeg_finish_output FOXIT_PREFIX(jpeg_finish_output)
#define jpeg_free_large FOXIT_PREFIX(jpeg_free_large)
#define jpeg_free_small FOXIT_PREFIX(jpeg_free_small)
+#define jpeg_gen_optimal_table FOXIT_PREFIX(jpeg_gen_optimal_table)
#define jpeg_get_large FOXIT_PREFIX(jpeg_get_large)
#define jpeg_get_small FOXIT_PREFIX(jpeg_get_small)
#define jpeg_has_multiple_scans FOXIT_PREFIX(jpeg_has_multiple_scans)
@@ -58,6 +78,7 @@
#define jpeg_idct_ifast FOXIT_PREFIX(jpeg_idct_ifast)
#define jpeg_idct_islow FOXIT_PREFIX(jpeg_idct_islow)
#define jpeg_input_complete FOXIT_PREFIX(jpeg_input_complete)
+#define jpeg_make_c_derived_tbl FOXIT_PREFIX(jpeg_make_c_derived_tbl)
#define jpeg_make_d_derived_tbl FOXIT_PREFIX(jpeg_make_d_derived_tbl)
#define jpeg_mem_available FOXIT_PREFIX(jpeg_mem_available)
#define jpeg_mem_init FOXIT_PREFIX(jpeg_mem_init)
@@ -65,18 +86,32 @@
#define jpeg_natural_order FOXIT_PREFIX(jpeg_natural_order)
#define jpeg_new_colormap FOXIT_PREFIX(jpeg_new_colormap)
#define jpeg_open_backing_store FOXIT_PREFIX(jpeg_open_backing_store)
+#define jpeg_quality_scaling FOXIT_PREFIX(jpeg_quality_scaling)
#define jpeg_read_coefficients FOXIT_PREFIX(jpeg_read_coefficients)
#define jpeg_read_header FOXIT_PREFIX(jpeg_read_header)
#define jpeg_read_raw_data FOXIT_PREFIX(jpeg_read_raw_data)
#define jpeg_read_scanlines FOXIT_PREFIX(jpeg_read_scanlines)
#define jpeg_resync_to_restart FOXIT_PREFIX(jpeg_resync_to_restart)
#define jpeg_save_markers FOXIT_PREFIX(jpeg_save_markers)
+#define jpeg_set_colorspace FOXIT_PREFIX(jpeg_set_colorspace)
+#define jpeg_set_defaults FOXIT_PREFIX(jpeg_set_defaults)
+#define jpeg_set_linear_quality FOXIT_PREFIX(jpeg_set_linear_quality)
#define jpeg_set_marker_processor FOXIT_PREFIX(jpeg_set_marker_processor)
+#define jpeg_set_quality FOXIT_PREFIX(jpeg_set_quality)
+#define jpeg_simple_progression FOXIT_PREFIX(jpeg_simple_progression)
+#define jpeg_start_compress FOXIT_PREFIX(jpeg_start_compress)
#define jpeg_start_decompress FOXIT_PREFIX(jpeg_start_decompress)
#define jpeg_start_output FOXIT_PREFIX(jpeg_start_output)
#define jpeg_std_error FOXIT_PREFIX(jpeg_std_error)
#define jpeg_std_message_table FOXIT_PREFIX(jpeg_std_message_table)
#define jpeg_stdio_src FOXIT_PREFIX(jpeg_stdio_src)
+#define jpeg_suppress_tables FOXIT_PREFIX(jpeg_suppress_tables)
+#define jpeg_write_m_byte FOXIT_PREFIX(jpeg_write_m_byte)
+#define jpeg_write_m_header FOXIT_PREFIX(jpeg_write_m_header)
+#define jpeg_write_marker FOXIT_PREFIX(jpeg_write_marker)
+#define jpeg_write_raw_data FOXIT_PREFIX(jpeg_write_raw_data)
+#define jpeg_write_scanlines FOXIT_PREFIX(jpeg_write_scanlines)
+#define jpeg_write_tables FOXIT_PREFIX(jpeg_write_tables)
#define jround_up FOXIT_PREFIX(jround_up)
#define jzero_far FOXIT_PREFIX(jzero_far)
diff --git a/third_party/libjpeg/jpeglib.h b/third_party/libjpeg/jpeglib.h
index 7de5ab7..f6af4f2 100644
--- a/third_party/libjpeg/jpeglib.h
+++ b/third_party/libjpeg/jpeglib.h
@@ -20,33 +20,53 @@
#define jdiv_round_up FOXIT_PREFIX(jdiv_round_up)
#define jinit_1pass_quantizer FOXIT_PREFIX(jinit_1pass_quantizer)
#define jinit_2pass_quantizer FOXIT_PREFIX(jinit_2pass_quantizer)
+#define jinit_c_coef_controller FOXIT_PREFIX(jinit_c_coef_controller)
+#define jinit_c_main_controller FOXIT_PREFIX(jinit_c_main_controller)
+#define jinit_c_master_control FOXIT_PREFIX(jinit_c_master_control)
+#define jinit_c_prep_controller FOXIT_PREFIX(jinit_c_prep_controller)
+#define jinit_color_converter FOXIT_PREFIX(jinit_color_converter)
#define jinit_color_deconverter FOXIT_PREFIX(jinit_color_deconverter)
+#define jinit_compress_master FOXIT_PREFIX(jinit_compress_master)
#define jinit_d_coef_controller FOXIT_PREFIX(jinit_d_coef_controller)
#define jinit_d_main_controller FOXIT_PREFIX(jinit_d_main_controller)
#define jinit_d_post_controller FOXIT_PREFIX(jinit_d_post_controller)
+#define jinit_downsampler FOXIT_PREFIX(jinit_downsampler)
+#define jinit_forward_dct FOXIT_PREFIX(jinit_forward_dct)
#define jinit_huff_decoder FOXIT_PREFIX(jinit_huff_decoder)
+#define jinit_huff_encoder FOXIT_PREFIX(jinit_huff_encoder)
#define jinit_input_controller FOXIT_PREFIX(jinit_input_controller)
#define jinit_inverse_dct FOXIT_PREFIX(jinit_inverse_dct)
#define jinit_marker_reader FOXIT_PREFIX(jinit_marker_reader)
+#define jinit_marker_writer FOXIT_PREFIX(jinit_marker_writer)
#define jinit_master_decompress FOXIT_PREFIX(jinit_master_decompress)
#define jinit_memory_mgr FOXIT_PREFIX(jinit_memory_mgr)
#define jinit_merged_upsampler FOXIT_PREFIX(jinit_merged_upsampler)
#define jinit_phuff_decoder FOXIT_PREFIX(jinit_phuff_decoder)
+#define jinit_phuff_encoder FOXIT_PREFIX(jinit_phuff_encoder)
#define jinit_upsampler FOXIT_PREFIX(jinit_upsampler)
+#define jpeg_CreateCompress FOXIT_PREFIX(jpeg_CreateCompress)
#define jpeg_CreateDecompress FOXIT_PREFIX(jpeg_CreateDecompress)
#define jpeg_abort FOXIT_PREFIX(jpeg_abort)
+#define jpeg_abort_compress FOXIT_PREFIX(jpeg_abort_compress)
#define jpeg_abort_decompress FOXIT_PREFIX(jpeg_abort_decompress)
+#define jpeg_add_quant_table FOXIT_PREFIX(jpeg_add_quant_table)
#define jpeg_alloc_huff_table FOXIT_PREFIX(jpeg_alloc_huff_table)
#define jpeg_alloc_quant_table FOXIT_PREFIX(jpeg_alloc_quant_table)
#define jpeg_calc_output_dimensions FOXIT_PREFIX(jpeg_calc_output_dimensions)
#define jpeg_consume_input FOXIT_PREFIX(jpeg_consume_input)
+#define jpeg_default_colorspace FOXIT_PREFIX(jpeg_default_colorspace)
#define jpeg_destroy FOXIT_PREFIX(jpeg_destroy)
+#define jpeg_destroy_compress FOXIT_PREFIX(jpeg_destroy_compress)
#define jpeg_destroy_decompress FOXIT_PREFIX(jpeg_destroy_decompress)
+#define jpeg_fdct_ifast FOXIT_PREFIX(jpeg_fdct_ifast)
+#define jpeg_fdct_islow FOXIT_PREFIX(jpeg_fdct_islow)
#define jpeg_fill_bit_buffer FOXIT_PREFIX(jpeg_fill_bit_buffer)
+#define jpeg_finish_compress FOXIT_PREFIX(jpeg_finish_compress)
#define jpeg_finish_decompress FOXIT_PREFIX(jpeg_finish_decompress)
#define jpeg_finish_output FOXIT_PREFIX(jpeg_finish_output)
#define jpeg_free_large FOXIT_PREFIX(jpeg_free_large)
#define jpeg_free_small FOXIT_PREFIX(jpeg_free_small)
+#define jpeg_gen_optimal_table FOXIT_PREFIX(jpeg_gen_optimal_table)
#define jpeg_get_large FOXIT_PREFIX(jpeg_get_large)
#define jpeg_get_small FOXIT_PREFIX(jpeg_get_small)
#define jpeg_has_multiple_scans FOXIT_PREFIX(jpeg_has_multiple_scans)
@@ -58,6 +78,7 @@
#define jpeg_idct_ifast FOXIT_PREFIX(jpeg_idct_ifast)
#define jpeg_idct_islow FOXIT_PREFIX(jpeg_idct_islow)
#define jpeg_input_complete FOXIT_PREFIX(jpeg_input_complete)
+#define jpeg_make_c_derived_tbl FOXIT_PREFIX(jpeg_make_c_derived_tbl)
#define jpeg_make_d_derived_tbl FOXIT_PREFIX(jpeg_make_d_derived_tbl)
#define jpeg_mem_available FOXIT_PREFIX(jpeg_mem_available)
#define jpeg_mem_init FOXIT_PREFIX(jpeg_mem_init)
@@ -65,18 +86,32 @@
#define jpeg_natural_order FOXIT_PREFIX(jpeg_natural_order)
#define jpeg_new_colormap FOXIT_PREFIX(jpeg_new_colormap)
#define jpeg_open_backing_store FOXIT_PREFIX(jpeg_open_backing_store)
+#define jpeg_quality_scaling FOXIT_PREFIX(jpeg_quality_scaling)
#define jpeg_read_coefficients FOXIT_PREFIX(jpeg_read_coefficients)
#define jpeg_read_header FOXIT_PREFIX(jpeg_read_header)
#define jpeg_read_raw_data FOXIT_PREFIX(jpeg_read_raw_data)
#define jpeg_read_scanlines FOXIT_PREFIX(jpeg_read_scanlines)
#define jpeg_resync_to_restart FOXIT_PREFIX(jpeg_resync_to_restart)
#define jpeg_save_markers FOXIT_PREFIX(jpeg_save_markers)
+#define jpeg_set_colorspace FOXIT_PREFIX(jpeg_set_colorspace)
+#define jpeg_set_defaults FOXIT_PREFIX(jpeg_set_defaults)
+#define jpeg_set_linear_quality FOXIT_PREFIX(jpeg_set_linear_quality)
#define jpeg_set_marker_processor FOXIT_PREFIX(jpeg_set_marker_processor)
+#define jpeg_set_quality FOXIT_PREFIX(jpeg_set_quality)
+#define jpeg_simple_progression FOXIT_PREFIX(jpeg_simple_progression)
+#define jpeg_start_compress FOXIT_PREFIX(jpeg_start_compress)
#define jpeg_start_decompress FOXIT_PREFIX(jpeg_start_decompress)
#define jpeg_start_output FOXIT_PREFIX(jpeg_start_output)
#define jpeg_std_error FOXIT_PREFIX(jpeg_std_error)
#define jpeg_std_message_table FOXIT_PREFIX(jpeg_std_message_table)
#define jpeg_stdio_src FOXIT_PREFIX(jpeg_stdio_src)
+#define jpeg_suppress_tables FOXIT_PREFIX(jpeg_suppress_tables)
+#define jpeg_write_m_byte FOXIT_PREFIX(jpeg_write_m_byte)
+#define jpeg_write_m_header FOXIT_PREFIX(jpeg_write_m_header)
+#define jpeg_write_marker FOXIT_PREFIX(jpeg_write_marker)
+#define jpeg_write_raw_data FOXIT_PREFIX(jpeg_write_raw_data)
+#define jpeg_write_scanlines FOXIT_PREFIX(jpeg_write_scanlines)
+#define jpeg_write_tables FOXIT_PREFIX(jpeg_write_tables)
#define jround_up FOXIT_PREFIX(jround_up)
#define jzero_far FOXIT_PREFIX(jzero_far)
--
2.6.1

View file

@ -1,771 +0,0 @@
From 8917b83c677a8c632d5df666f72046f80c74472d Mon Sep 17 00:00:00 2001
From: "edward.baker" <edward.baker@intel.com>
Date: Tue, 6 Oct 2015 09:42:53 -0700
Subject: [PATCH] Use kwalletd5 in KDE 5 environments
KWallet in KDE 5 has updated DBus and desktop names. By default the detected
desktop environment is used to configure KWallet. Alternatively, passing
kwallet5 or kwallet to --password-store will respectively set kwalletd5 or
kwalletd.
* Pass the desktop environment as a parameter to unit tests. Note that
GetAllLoginsErrorHandling is unchanged, but grouped with the rest of
NativeBackendKWalletTest cases.
* Error messages use kwalletd or kwalletd5.
BUG=500281
Review URL: https://codereview.chromium.org/1383303002
Cr-Commit-Position: refs/heads/master@{#352620}
---
.../password_manager/native_backend_kwallet_x.cc | 118 +++++++-------
.../password_manager/native_backend_kwallet_x.h | 11 +-
.../native_backend_kwallet_x_unittest.cc | 170 ++++++++++++---------
.../password_manager/password_store_factory.cc | 4 +-
4 files changed, 181 insertions(+), 122 deletions(-)
diff --git a/chrome/browser/password_manager/native_backend_kwallet_x.cc b/chrome/browser/password_manager/native_backend_kwallet_x.cc
index 50b84b5..37c18cb 100644
--- a/chrome/browser/password_manager/native_backend_kwallet_x.cc
+++ b/chrome/browser/password_manager/native_backend_kwallet_x.cc
@@ -39,8 +39,12 @@ const int kPickleVersion = 7;
const char kKWalletFolder[] = "Chrome Form Data";
// DBus service, path, and interface names for klauncher and kwalletd.
+const char kKWalletDName[] = "kwalletd";
+const char kKWalletD5Name[] = "kwalletd5";
const char kKWalletServiceName[] = "org.kde.kwalletd";
+const char kKWallet5ServiceName[] = "org.kde.kwalletd5";
const char kKWalletPath[] = "/modules/kwalletd";
+const char kKWallet5Path[] = "/modules/kwalletd5";
const char kKWalletInterface[] = "org.kde.KWallet";
const char kKLauncherServiceName[] = "org.kde.klauncher";
const char kKLauncherPath[] = "/KLauncher";
@@ -268,11 +272,22 @@ void UMALogDeserializationStatus(bool success) {
} // namespace
-NativeBackendKWallet::NativeBackendKWallet(LocalProfileId id)
+NativeBackendKWallet::NativeBackendKWallet(
+ LocalProfileId id, base::nix::DesktopEnvironment desktop_env)
: profile_id_(id),
kwallet_proxy_(nullptr),
app_name_(l10n_util::GetStringUTF8(IDS_PRODUCT_NAME)) {
folder_name_ = GetProfileSpecificFolderName();
+
+ if (desktop_env == base::nix::DESKTOP_ENVIRONMENT_KDE5) {
+ dbus_service_name_ = kKWallet5ServiceName;
+ dbus_path_ = kKWallet5Path;
+ kwalletd_name_ = kKWalletD5Name;
+ } else {
+ dbus_service_name_ = kKWalletServiceName;
+ dbus_path_ = kKWalletPath;
+ kwalletd_name_ = kKWalletDName;
+ }
}
NativeBackendKWallet::~NativeBackendKWallet() {
@@ -329,8 +344,8 @@ void NativeBackendKWallet::InitOnDBThread(scoped_refptr<dbus::Bus> optional_bus,
session_bus_ = new dbus::Bus(options);
}
kwallet_proxy_ =
- session_bus_->GetObjectProxy(kKWalletServiceName,
- dbus::ObjectPath(kKWalletPath));
+ session_bus_->GetObjectProxy(dbus_service_name_,
+ dbus::ObjectPath(dbus_path_));
// kwalletd may not be running. If we get a temporary failure initializing it,
// try to start it and then try again. (Note the short-circuit evaluation.)
const InitResult result = InitWallet();
@@ -352,7 +367,7 @@ bool NativeBackendKWallet::StartKWalletd() {
"start_service_by_desktop_name");
dbus::MessageWriter builder(&method_call);
std::vector<std::string> empty;
- builder.AppendString("kwalletd"); // serviceName
+ builder.AppendString(kwalletd_name_); // serviceName
builder.AppendArrayOfStrings(empty); // urls
builder.AppendArrayOfStrings(empty); // envs
builder.AppendString(std::string()); // startup_id
@@ -361,7 +376,7 @@ bool NativeBackendKWallet::StartKWalletd() {
klauncher->CallMethodAndBlock(
&method_call, dbus::ObjectProxy::TIMEOUT_USE_DEFAULT));
if (!response.get()) {
- LOG(ERROR) << "Error contacting klauncher to start kwalletd";
+ LOG(ERROR) << "Error contacting klauncher to start " << kwalletd_name_;
return false;
}
dbus::MessageReader reader(response.get());
@@ -371,13 +386,13 @@ bool NativeBackendKWallet::StartKWalletd() {
int32_t pid = -1;
if (!reader.PopInt32(&ret) || !reader.PopString(&dbus_name) ||
!reader.PopString(&error) || !reader.PopInt32(&pid)) {
- LOG(ERROR) << "Error reading response from klauncher to start kwalletd: "
- << response->ToString();
+ LOG(ERROR) << "Error reading response from klauncher to start "
+ << kwalletd_name_ << ": " << response->ToString();
return false;
}
if (!error.empty() || ret) {
- LOG(ERROR) << "Error launching kwalletd: error '" << error << "' "
- << " (code " << ret << ")";
+ LOG(ERROR) << "Error launching " << kwalletd_name_ << ": error '" << error
+ << "' (code " << ret << ")";
return false;
}
@@ -393,19 +408,19 @@ NativeBackendKWallet::InitResult NativeBackendKWallet::InitWallet() {
kwallet_proxy_->CallMethodAndBlock(
&method_call, dbus::ObjectProxy::TIMEOUT_USE_DEFAULT));
if (!response.get()) {
- LOG(ERROR) << "Error contacting kwalletd (isEnabled)";
+ LOG(ERROR) << "Error contacting " << kwalletd_name_ << " (isEnabled)";
return TEMPORARY_FAIL;
}
dbus::MessageReader reader(response.get());
bool enabled = false;
if (!reader.PopBool(&enabled)) {
- LOG(ERROR) << "Error reading response from kwalletd (isEnabled): "
- << response->ToString();
+ LOG(ERROR) << "Error reading response from " << kwalletd_name_
+ << " (isEnabled): " << response->ToString();
return PERMANENT_FAIL;
}
// Not enabled? Don't use KWallet. But also don't warn here.
if (!enabled) {
- VLOG(1) << "kwalletd reports that KWallet is not enabled.";
+ VLOG(1) << kwalletd_name_ << " reports that KWallet is not enabled.";
return PERMANENT_FAIL;
}
}
@@ -417,13 +432,13 @@ NativeBackendKWallet::InitResult NativeBackendKWallet::InitWallet() {
kwallet_proxy_->CallMethodAndBlock(
&method_call, dbus::ObjectProxy::TIMEOUT_USE_DEFAULT));
if (!response.get()) {
- LOG(ERROR) << "Error contacting kwalletd (networkWallet)";
+ LOG(ERROR) << "Error contacting " << kwalletd_name_ << " (networkWallet)";
return TEMPORARY_FAIL;
}
dbus::MessageReader reader(response.get());
if (!reader.PopString(&wallet_name_)) {
- LOG(ERROR) << "Error reading response from kwalletd (networkWallet): "
- << response->ToString();
+ LOG(ERROR) << "Error reading response from " << kwalletd_name_
+ << " (networkWallet): " << response->ToString();
return PERMANENT_FAIL;
}
}
@@ -582,14 +597,14 @@ bool NativeBackendKWallet::GetLoginsList(
kwallet_proxy_->CallMethodAndBlock(
&method_call, dbus::ObjectProxy::TIMEOUT_USE_DEFAULT));
if (!response.get()) {
- LOG(ERROR) << "Error contacting kwalletd (hasEntry)";
+ LOG(ERROR) << "Error contacting " << kwalletd_name_ << " (hasEntry)";
return false;
}
dbus::MessageReader reader(response.get());
bool has_entry = false;
if (!reader.PopBool(&has_entry)) {
- LOG(ERROR) << "Error reading response from kwalletd (hasEntry): "
- << response->ToString();
+ LOG(ERROR) << "Error reading response from " << kwalletd_name_
+ << " (hasEntry): " << response->ToString();
return false;
}
if (!has_entry) {
@@ -609,15 +624,15 @@ bool NativeBackendKWallet::GetLoginsList(
kwallet_proxy_->CallMethodAndBlock(
&method_call, dbus::ObjectProxy::TIMEOUT_USE_DEFAULT));
if (!response.get()) {
- LOG(ERROR) << "Error contacting kwalletd (readEntry)";
+ LOG(ERROR) << "Error contacting " << kwalletd_name_ << " (readEntry)";
return false;
}
dbus::MessageReader reader(response.get());
const uint8_t* bytes = nullptr;
size_t length = 0;
if (!reader.PopArrayOfBytes(&bytes, &length)) {
- LOG(ERROR) << "Error reading response from kwalletd (readEntry): "
- << response->ToString();
+ LOG(ERROR) << "Error reading response from " << kwalletd_name_
+ << " (readEntry): " << response->ToString();
return false;
}
if (!bytes)
@@ -699,13 +714,13 @@ bool NativeBackendKWallet::GetAllLogins(
kwallet_proxy_->CallMethodAndBlock(
&method_call, dbus::ObjectProxy::TIMEOUT_USE_DEFAULT));
if (!response.get()) {
- LOG(ERROR) << "Error contacting kwalletd (entryList)";
+ LOG(ERROR) << "Error contacting " << kwalletd_name_ << " (entryList)";
return false;
}
dbus::MessageReader reader(response.get());
if (!reader.PopArrayOfStrings(&realm_list)) {
- LOG(ERROR) << "Error reading response from kwalletd (entryList): "
- << response->ToString();
+ LOG(ERROR) << "Error reading response from " << kwalletd_name_
+ << "(entryList): " << response->ToString();
return false;
}
}
@@ -722,15 +737,15 @@ bool NativeBackendKWallet::GetAllLogins(
kwallet_proxy_->CallMethodAndBlock(
&method_call, dbus::ObjectProxy::TIMEOUT_USE_DEFAULT));
if (!response.get()) {
- LOG(ERROR) << "Error contacting kwalletd (readEntry)";
+ LOG(ERROR) << "Error contacting " << kwalletd_name_ << "(readEntry)";
return false;
}
dbus::MessageReader reader(response.get());
const uint8_t* bytes = nullptr;
size_t length = 0;
if (!reader.PopArrayOfBytes(&bytes, &length)) {
- LOG(ERROR) << "Error reading response from kwalletd (readEntry): "
- << response->ToString();
+ LOG(ERROR) << "Error reading response from " << kwalletd_name_
+ << " (readEntry): " << response->ToString();
return false;
}
if (!bytes || !CheckSerializedValue(bytes, length, signon_realm))
@@ -759,14 +774,14 @@ bool NativeBackendKWallet::SetLoginsList(
kwallet_proxy_->CallMethodAndBlock(
&method_call, dbus::ObjectProxy::TIMEOUT_USE_DEFAULT));
if (!response.get()) {
- LOG(ERROR) << "Error contacting kwalletd (removeEntry)";
+ LOG(ERROR) << "Error contacting " << kwalletd_name_ << " (removeEntry)";
return kInvalidKWalletHandle;
}
dbus::MessageReader reader(response.get());
int ret = 0;
if (!reader.PopInt32(&ret)) {
- LOG(ERROR) << "Error reading response from kwalletd (removeEntry): "
- << response->ToString();
+ LOG(ERROR) << "Error reading response from " << kwalletd_name_
+ << " (removeEntry): " << response->ToString();
return false;
}
if (ret != 0)
@@ -789,14 +804,14 @@ bool NativeBackendKWallet::SetLoginsList(
kwallet_proxy_->CallMethodAndBlock(
&method_call, dbus::ObjectProxy::TIMEOUT_USE_DEFAULT));
if (!response.get()) {
- LOG(ERROR) << "Error contacting kwalletd (writeEntry)";
+ LOG(ERROR) << "Error contacting " << kwalletd_name_ << " (writeEntry)";
return kInvalidKWalletHandle;
}
dbus::MessageReader reader(response.get());
int ret = 0;
if (!reader.PopInt32(&ret)) {
- LOG(ERROR) << "Error reading response from kwalletd (writeEntry): "
- << response->ToString();
+ LOG(ERROR) << "Error reading response from " << kwalletd_name_
+ << " (writeEntry): " << response->ToString();
return false;
}
if (ret != 0)
@@ -826,21 +841,21 @@ bool NativeBackendKWallet::RemoveLoginsBetween(
scoped_ptr<dbus::Response> response(kwallet_proxy_->CallMethodAndBlock(
&method_call, dbus::ObjectProxy::TIMEOUT_USE_DEFAULT));
if (!response.get()) {
- LOG(ERROR) << "Error contacting kwalletd (entryList)";
+ LOG(ERROR) << "Error contacting " << kwalletd_name_ << " (entryList)";
return false;
}
dbus::MessageReader reader(response.get());
dbus::MessageReader array(response.get());
if (!reader.PopArray(&array)) {
- LOG(ERROR) << "Error reading response from kwalletd (entryList): "
- << response->ToString();
+ LOG(ERROR) << "Error reading response from " << kwalletd_name_
+ << " (entryList): " << response->ToString();
return false;
}
while (array.HasMoreData()) {
std::string realm;
if (!array.PopString(&realm)) {
- LOG(ERROR) << "Error reading response from kwalletd (entryList): "
- << response->ToString();
+ LOG(ERROR) << "Error reading response from " << kwalletd_name_
+ << " (entryList): " << response->ToString();
return false;
}
realm_list.push_back(realm);
@@ -859,15 +874,15 @@ bool NativeBackendKWallet::RemoveLoginsBetween(
scoped_ptr<dbus::Response> response(kwallet_proxy_->CallMethodAndBlock(
&method_call, dbus::ObjectProxy::TIMEOUT_USE_DEFAULT));
if (!response.get()) {
- LOG(ERROR) << "Error contacting kwalletd (readEntry)";
+ LOG(ERROR) << "Error contacting " << kwalletd_name_ << " (readEntry)";
continue;
}
dbus::MessageReader reader(response.get());
const uint8_t* bytes = nullptr;
size_t length = 0;
if (!reader.PopArrayOfBytes(&bytes, &length)) {
- LOG(ERROR) << "Error reading response from kwalletd (readEntry): "
- << response->ToString();
+ LOG(ERROR) << "Error reading response from " << kwalletd_name_
+ << " (readEntry): " << response->ToString();
continue;
}
if (!bytes || !CheckSerializedValue(bytes, length, signon_realm))
@@ -957,13 +972,13 @@ int NativeBackendKWallet::WalletHandle() {
kwallet_proxy_->CallMethodAndBlock(
&method_call, dbus::ObjectProxy::TIMEOUT_USE_DEFAULT));
if (!response.get()) {
- LOG(ERROR) << "Error contacting kwalletd (open)";
+ LOG(ERROR) << "Error contacting " << kwalletd_name_ << " (open)";
return kInvalidKWalletHandle;
}
dbus::MessageReader reader(response.get());
if (!reader.PopInt32(&handle)) {
- LOG(ERROR) << "Error reading response from kwalletd (open): "
- << response->ToString();
+ LOG(ERROR) << "Error reading response from " << kwalletd_name_
+ << " (open): " << response->ToString();
return kInvalidKWalletHandle;
}
if (handle == kInvalidKWalletHandle) {
@@ -984,13 +999,13 @@ int NativeBackendKWallet::WalletHandle() {
kwallet_proxy_->CallMethodAndBlock(
&method_call, dbus::ObjectProxy::TIMEOUT_USE_DEFAULT));
if (!response.get()) {
- LOG(ERROR) << "Error contacting kwalletd (hasFolder)";
+ LOG(ERROR) << "Error contacting " << kwalletd_name_ << " (hasFolder)";
return kInvalidKWalletHandle;
}
dbus::MessageReader reader(response.get());
if (!reader.PopBool(&has_folder)) {
- LOG(ERROR) << "Error reading response from kwalletd (hasFolder): "
- << response->ToString();
+ LOG(ERROR) << "Error reading response from " << kwalletd_name_
+ << " (hasFolder): " << response->ToString();
return kInvalidKWalletHandle;
}
}
@@ -1006,14 +1021,15 @@ int NativeBackendKWallet::WalletHandle() {
kwallet_proxy_->CallMethodAndBlock(
&method_call, dbus::ObjectProxy::TIMEOUT_USE_DEFAULT));
if (!response.get()) {
- LOG(ERROR) << "Error contacting kwalletd (createFolder)";
+ LOG(ERROR) << "Error contacting << " << kwalletd_name_
+ << " (createFolder)";
return kInvalidKWalletHandle;
}
dbus::MessageReader reader(response.get());
bool success = false;
if (!reader.PopBool(&success)) {
- LOG(ERROR) << "Error reading response from kwalletd (createFolder): "
- << response->ToString();
+ LOG(ERROR) << "Error reading response from " << kwalletd_name_
+ << " (createFolder): " << response->ToString();
return kInvalidKWalletHandle;
}
if (!success) {
diff --git a/chrome/browser/password_manager/native_backend_kwallet_x.h b/chrome/browser/password_manager/native_backend_kwallet_x.h
index 3b0524e..bb63466 100644
--- a/chrome/browser/password_manager/native_backend_kwallet_x.h
+++ b/chrome/browser/password_manager/native_backend_kwallet_x.h
@@ -11,6 +11,7 @@
#include "base/compiler_specific.h"
#include "base/memory/ref_counted.h"
#include "base/memory/scoped_vector.h"
+#include "base/nix/xdg_util.h"
#include "base/time/time.h"
#include "chrome/browser/password_manager/password_store_factory.h"
#include "chrome/browser/password_manager/password_store_x.h"
@@ -34,7 +35,8 @@ class ObjectProxy;
// NativeBackend implementation using KWallet.
class NativeBackendKWallet : public PasswordStoreX::NativeBackend {
public:
- explicit NativeBackendKWallet(LocalProfileId id);
+ NativeBackendKWallet(LocalProfileId id,
+ base::nix::DesktopEnvironment desktop_env);
~NativeBackendKWallet() override;
@@ -150,6 +152,13 @@ class NativeBackendKWallet : public PasswordStoreX::NativeBackend {
// The application name (e.g. "Chromium"), shown in KWallet auth dialogs.
const std::string app_name_;
+ // KWallet DBus name
+ std::string dbus_service_name_;
+ // DBus path to KWallet interfaces
+ std::string dbus_path_;
+ // The name used for logging and by klauncher when starting KWallet
+ std::string kwalletd_name_;
+
DISALLOW_COPY_AND_ASSIGN(NativeBackendKWallet);
};
diff --git a/chrome/browser/password_manager/native_backend_kwallet_x_unittest.cc b/chrome/browser/password_manager/native_backend_kwallet_x_unittest.cc
index fffc533..7186cde 100644
--- a/chrome/browser/password_manager/native_backend_kwallet_x_unittest.cc
+++ b/chrome/browser/password_manager/native_backend_kwallet_x_unittest.cc
@@ -37,6 +37,8 @@ using password_manager::PasswordStoreChange;
using password_manager::PasswordStoreChangeList;
using testing::_;
using testing::Invoke;
+using testing::TestWithParam;
+using testing::Values;
using testing::Return;
namespace {
@@ -144,8 +146,9 @@ const int NativeBackendKWallet::kInvalidKWalletHandle;
// Subclass NativeBackendKWallet to promote some members to public for testing.
class NativeBackendKWalletStub : public NativeBackendKWallet {
public:
- explicit NativeBackendKWalletStub(LocalProfileId id)
- : NativeBackendKWallet(id) {
+ NativeBackendKWalletStub(LocalProfileId id,
+ base::nix::DesktopEnvironment desktop_env)
+ : NativeBackendKWallet(id, desktop_env) {
}
using NativeBackendKWallet::InitWithBus;
using NativeBackendKWallet::kInvalidKWalletHandle;
@@ -153,7 +156,8 @@ class NativeBackendKWalletStub : public NativeBackendKWallet {
};
// Provide some test forms to avoid having to set them up in each test.
-class NativeBackendKWalletTestBase : public testing::Test {
+class NativeBackendKWalletTestBase :
+ public testing::TestWithParam<base::nix::DesktopEnvironment> {
protected:
NativeBackendKWalletTestBase() {
old_form_google_.origin = GURL("http://www.google.com/");
@@ -261,7 +265,8 @@ class NativeBackendKWalletTest : public NativeBackendKWalletTestBase {
: ui_thread_(BrowserThread::UI, &message_loop_),
db_thread_(BrowserThread::DB), klauncher_ret_(0),
klauncher_contacted_(false), kwallet_runnable_(true),
- kwallet_running_(true), kwallet_enabled_(true) {
+ kwallet_running_(true), kwallet_enabled_(true),
+ desktop_env_(GetParam()) {
}
void SetUp() override;
@@ -312,6 +317,9 @@ class NativeBackendKWalletTest : public NativeBackendKWalletTestBase {
bool kwallet_running_;
bool kwallet_enabled_;
+ // Used for switching between kwalletd and kwalletd5
+ base::nix::DesktopEnvironment desktop_env_;
+
TestKWallet wallet_;
// For all method names contained in |failing_methods_|, the mocked KWallet
@@ -341,10 +349,17 @@ void NativeBackendKWalletTest::SetUp() {
.WillRepeatedly(
Invoke(this, &NativeBackendKWalletTest::KLauncherMethodCall));
- mock_kwallet_proxy_ =
- new dbus::MockObjectProxy(mock_session_bus_.get(),
- "org.kde.kwalletd",
- dbus::ObjectPath("/modules/kwalletd"));
+ if (desktop_env_ == base::nix::DESKTOP_ENVIRONMENT_KDE5) {
+ mock_kwallet_proxy_ =
+ new dbus::MockObjectProxy(mock_session_bus_.get(),
+ "org.kde.kwalletd5",
+ dbus::ObjectPath("/modules/kwalletd5"));
+ } else {
+ mock_kwallet_proxy_ =
+ new dbus::MockObjectProxy(mock_session_bus_.get(),
+ "org.kde.kwalletd",
+ dbus::ObjectPath("/modules/kwalletd"));
+ }
EXPECT_CALL(*mock_kwallet_proxy_.get(), MockCallMethodAndBlock(_, _))
.WillRepeatedly(
Invoke(this, &NativeBackendKWalletTest::KWalletMethodCall));
@@ -353,10 +368,19 @@ void NativeBackendKWalletTest::SetUp() {
*mock_session_bus_.get(),
GetObjectProxy("org.kde.klauncher", dbus::ObjectPath("/KLauncher")))
.WillRepeatedly(Return(mock_klauncher_proxy_.get()));
- EXPECT_CALL(
- *mock_session_bus_.get(),
- GetObjectProxy("org.kde.kwalletd", dbus::ObjectPath("/modules/kwalletd")))
- .WillRepeatedly(Return(mock_kwallet_proxy_.get()));
+ if (desktop_env_ == base::nix::DESKTOP_ENVIRONMENT_KDE5) {
+ EXPECT_CALL(
+ *mock_session_bus_.get(),
+ GetObjectProxy("org.kde.kwalletd5",
+ dbus::ObjectPath("/modules/kwalletd5")))
+ .WillRepeatedly(Return(mock_kwallet_proxy_.get()));
+ } else {
+ EXPECT_CALL(
+ *mock_session_bus_.get(),
+ GetObjectProxy("org.kde.kwalletd",
+ dbus::ObjectPath("/modules/kwalletd")))
+ .WillRepeatedly(Return(mock_kwallet_proxy_.get()));
+ }
EXPECT_CALL(*mock_session_bus_.get(), ShutdownAndBlock()).WillOnce(Return())
.WillRepeatedly(Return());
@@ -371,7 +395,7 @@ void NativeBackendKWalletTest::TearDown() {
void NativeBackendKWalletTest::TestRemoveLoginsBetween(
RemoveBetweenMethod date_to_test) {
- NativeBackendKWalletStub backend(42);
+ NativeBackendKWalletStub backend(42, desktop_env_);
EXPECT_TRUE(backend.InitWithBus(mock_session_bus_));
form_google_.date_synced = base::Time();
@@ -459,7 +483,10 @@ dbus::Response* NativeBackendKWalletTest::KLauncherMethodCall(
EXPECT_TRUE(reader.PopString(&startup_id));
EXPECT_TRUE(reader.PopBool(&blind));
- EXPECT_EQ("kwalletd", service_name);
+ if (desktop_env_ == base::nix::DESKTOP_ENVIRONMENT_KDE5)
+ EXPECT_EQ("kwalletd5", service_name);
+ else
+ EXPECT_EQ("kwalletd", service_name);
EXPECT_TRUE(urls.empty());
EXPECT_TRUE(envs.empty());
EXPECT_TRUE(startup_id.empty());
@@ -619,44 +646,44 @@ void NativeBackendKWalletTest::CheckPasswordForms(
}
}
-TEST_F(NativeBackendKWalletTest, NotEnabled) {
- NativeBackendKWalletStub kwallet(42);
+TEST_P(NativeBackendKWalletTest, NotEnabled) {
+ NativeBackendKWalletStub kwallet(42, desktop_env_);
kwallet_enabled_ = false;
EXPECT_FALSE(kwallet.InitWithBus(mock_session_bus_));
EXPECT_FALSE(klauncher_contacted_);
}
-TEST_F(NativeBackendKWalletTest, NotRunnable) {
- NativeBackendKWalletStub kwallet(42);
+TEST_P(NativeBackendKWalletTest, NotRunnable) {
+ NativeBackendKWalletStub kwallet(42, desktop_env_);
kwallet_runnable_ = false;
kwallet_running_ = false;
EXPECT_FALSE(kwallet.InitWithBus(mock_session_bus_));
EXPECT_TRUE(klauncher_contacted_);
}
-TEST_F(NativeBackendKWalletTest, NotRunningOrEnabled) {
- NativeBackendKWalletStub kwallet(42);
+TEST_P(NativeBackendKWalletTest, NotRunningOrEnabled) {
+ NativeBackendKWalletStub kwallet(42, desktop_env_);
kwallet_running_ = false;
kwallet_enabled_ = false;
EXPECT_FALSE(kwallet.InitWithBus(mock_session_bus_));
EXPECT_TRUE(klauncher_contacted_);
}
-TEST_F(NativeBackendKWalletTest, NotRunning) {
- NativeBackendKWalletStub kwallet(42);
+TEST_P(NativeBackendKWalletTest, NotRunning) {
+ NativeBackendKWalletStub kwallet(42, desktop_env_);
kwallet_running_ = false;
EXPECT_TRUE(kwallet.InitWithBus(mock_session_bus_));
EXPECT_TRUE(klauncher_contacted_);
}
-TEST_F(NativeBackendKWalletTest, BasicStartup) {
- NativeBackendKWalletStub kwallet(42);
+TEST_P(NativeBackendKWalletTest, BasicStartup) {
+ NativeBackendKWalletStub kwallet(42, desktop_env_);
EXPECT_TRUE(kwallet.InitWithBus(mock_session_bus_));
EXPECT_FALSE(klauncher_contacted_);
}
-TEST_F(NativeBackendKWalletTest, BasicAddLogin) {
- NativeBackendKWalletStub backend(42);
+TEST_P(NativeBackendKWalletTest, BasicAddLogin) {
+ NativeBackendKWalletStub backend(42, desktop_env_);
EXPECT_TRUE(backend.InitWithBus(mock_session_bus_));
BrowserThread::PostTaskAndReplyWithResult(
@@ -678,8 +705,8 @@ TEST_F(NativeBackendKWalletTest, BasicAddLogin) {
CheckPasswordForms("Chrome Form Data (42)", expected);
}
-TEST_F(NativeBackendKWalletTest, BasicUpdateLogin) {
- NativeBackendKWalletStub backend(42);
+TEST_P(NativeBackendKWalletTest, BasicUpdateLogin) {
+ NativeBackendKWalletStub backend(42, desktop_env_);
EXPECT_TRUE(backend.InitWithBus(mock_session_bus_));
BrowserThread::PostTask(
@@ -717,8 +744,8 @@ TEST_F(NativeBackendKWalletTest, BasicUpdateLogin) {
CheckPasswordForms("Chrome Form Data (42)", expected);
}
-TEST_F(NativeBackendKWalletTest, BasicListLogins) {
- NativeBackendKWalletStub backend(42);
+TEST_P(NativeBackendKWalletTest, BasicListLogins) {
+ NativeBackendKWalletStub backend(42, desktop_env_);
EXPECT_TRUE(backend.InitWithBus(mock_session_bus_));
BrowserThread::PostTask(
@@ -747,8 +774,8 @@ TEST_F(NativeBackendKWalletTest, BasicListLogins) {
CheckPasswordForms("Chrome Form Data (42)", expected);
}
-TEST_F(NativeBackendKWalletTest, BasicRemoveLogin) {
- NativeBackendKWalletStub backend(42);
+TEST_P(NativeBackendKWalletTest, BasicRemoveLogin) {
+ NativeBackendKWalletStub backend(42, desktop_env_);
EXPECT_TRUE(backend.InitWithBus(mock_session_bus_));
BrowserThread::PostTask(
@@ -781,8 +808,8 @@ TEST_F(NativeBackendKWalletTest, BasicRemoveLogin) {
CheckPasswordForms("Chrome Form Data (42)", expected);
}
-TEST_F(NativeBackendKWalletTest, UpdateNonexistentLogin) {
- NativeBackendKWalletStub backend(42);
+TEST_P(NativeBackendKWalletTest, UpdateNonexistentLogin) {
+ NativeBackendKWalletStub backend(42, desktop_env_);
EXPECT_TRUE(backend.InitWithBus(mock_session_bus_));
// First add an unrelated login.
@@ -816,8 +843,8 @@ TEST_F(NativeBackendKWalletTest, UpdateNonexistentLogin) {
CheckPasswordForms("Chrome Form Data (42)", expected);
}
-TEST_F(NativeBackendKWalletTest, RemoveNonexistentLogin) {
- NativeBackendKWalletStub backend(42);
+TEST_P(NativeBackendKWalletTest, RemoveNonexistentLogin) {
+ NativeBackendKWalletStub backend(42, desktop_env_);
EXPECT_TRUE(backend.InitWithBus(mock_session_bus_));
// First add an unrelated login.
@@ -861,8 +888,8 @@ TEST_F(NativeBackendKWalletTest, RemoveNonexistentLogin) {
CheckPasswordForms("Chrome Form Data (42)", expected);
}
-TEST_F(NativeBackendKWalletTest, AddDuplicateLogin) {
- NativeBackendKWalletStub backend(42);
+TEST_P(NativeBackendKWalletTest, AddDuplicateLogin) {
+ NativeBackendKWalletStub backend(42, desktop_env_);
EXPECT_TRUE(backend.InitWithBus(mock_session_bus_));
PasswordStoreChangeList changes;
@@ -901,8 +928,8 @@ TEST_F(NativeBackendKWalletTest, AddDuplicateLogin) {
CheckPasswordForms("Chrome Form Data (42)", expected);
}
-TEST_F(NativeBackendKWalletTest, AndroidCredentials) {
- NativeBackendKWalletStub backend(42);
+TEST_P(NativeBackendKWalletTest, AndroidCredentials) {
+ NativeBackendKWalletStub backend(42, desktop_env_);
EXPECT_TRUE(backend.InitWithBus(mock_session_bus_));
PasswordForm observed_android_form;
@@ -940,16 +967,16 @@ TEST_F(NativeBackendKWalletTest, AndroidCredentials) {
CheckPasswordForms("Chrome Form Data (42)", expected);
}
-TEST_F(NativeBackendKWalletTest, RemoveLoginsCreatedBetween) {
+TEST_P(NativeBackendKWalletTest, RemoveLoginsCreatedBetween) {
TestRemoveLoginsBetween(CREATED);
}
-TEST_F(NativeBackendKWalletTest, RemoveLoginsSyncedBetween) {
+TEST_P(NativeBackendKWalletTest, RemoveLoginsSyncedBetween) {
TestRemoveLoginsBetween(SYNCED);
}
-TEST_F(NativeBackendKWalletTest, ReadDuplicateForms) {
- NativeBackendKWalletStub backend(42);
+TEST_P(NativeBackendKWalletTest, ReadDuplicateForms) {
+ NativeBackendKWalletStub backend(42, desktop_env_);
EXPECT_TRUE(backend.InitWithBus(mock_session_bus_));
// Add 2 slightly different password forms.
@@ -1000,6 +1027,36 @@ TEST_F(NativeBackendKWalletTest, ReadDuplicateForms) {
CheckPasswordForms("Chrome Form Data (42)", expected);
}
+// Check that if KWallet fails to respond, the backend propagates the error.
+TEST_P(NativeBackendKWalletTest, GetAllLoginsErrorHandling) {
+ NativeBackendKWalletStub backend(42, desktop_env_);
+ EXPECT_TRUE(backend.InitWithBus(mock_session_bus_));
+ // Make KWallet fail on calling readEntry.
+ failing_methods_.insert("readEntry");
+
+ // Store some non-blacklisted logins to be potentially returned.
+ BrowserThread::PostTaskAndReplyWithResult(
+ BrowserThread::DB, FROM_HERE,
+ base::Bind(&NativeBackendKWalletStub::AddLogin,
+ base::Unretained(&backend), form_google_),
+ base::Bind(&CheckPasswordChanges,
+ PasswordStoreChangeList(1, PasswordStoreChange(
+ PasswordStoreChange::ADD, form_google_))));
+
+ // Verify that nothing is in fact returned, because KWallet fails to respond.
+ ScopedVector<autofill::PasswordForm> form_list;
+ BrowserThread::PostTask(BrowserThread::DB, FROM_HERE,
+ base::Bind(&CheckGetAutofillableLoginsFails,
+ base::Unretained(&backend), &form_list));
+ RunDBThread();
+ EXPECT_EQ(0u, form_list.size());
+}
+
+INSTANTIATE_TEST_CASE_P(,
+ NativeBackendKWalletTest,
+ ::testing::Values(base::nix::DESKTOP_ENVIRONMENT_KDE4,
+ base::nix::DESKTOP_ENVIRONMENT_KDE5));
+
// TODO(mdm): add more basic tests here at some point.
// (For example tests for storing >1 password per realm pickle.)
@@ -1196,31 +1253,6 @@ void NativeBackendKWalletPickleTest::CheckVersion0Pickle(
CheckPasswordForm(form, *form_list[0], false);
}
-// Check that if KWallet fails to respond, the backend propagates the error.
-TEST_F(NativeBackendKWalletTest, GetAllLoginsErrorHandling) {
- NativeBackendKWalletStub backend(42);
- EXPECT_TRUE(backend.InitWithBus(mock_session_bus_));
- // Make KWallet fail on calling readEntry.
- failing_methods_.insert("readEntry");
-
- // Store some non-blacklisted logins to be potentially returned.
- BrowserThread::PostTaskAndReplyWithResult(
- BrowserThread::DB, FROM_HERE,
- base::Bind(&NativeBackendKWalletStub::AddLogin,
- base::Unretained(&backend), form_google_),
- base::Bind(&CheckPasswordChanges,
- PasswordStoreChangeList(1, PasswordStoreChange(
- PasswordStoreChange::ADD, form_google_))));
-
- // Verify that nothing is in fact returned, because KWallet fails to respond.
- ScopedVector<autofill::PasswordForm> form_list;
- BrowserThread::PostTask(BrowserThread::DB, FROM_HERE,
- base::Bind(&CheckGetAutofillableLoginsFails,
- base::Unretained(&backend), &form_list));
- RunDBThread();
- EXPECT_EQ(0u, form_list.size());
-}
-
// We try both SCHEME_HTML and SCHEME_BASIC since the scheme is stored right
// after the size in the pickle, so it's what gets read as part of the count
// when reading 32-bit pickles on 64-bit systems. SCHEME_HTML is 0 (so we'll
diff --git a/chrome/browser/password_manager/password_store_factory.cc b/chrome/browser/password_manager/password_store_factory.cc
index 887df78..a35215c 100644
--- a/chrome/browser/password_manager/password_store_factory.cc
+++ b/chrome/browser/password_manager/password_store_factory.cc
@@ -276,6 +276,8 @@ KeyedService* PasswordStoreFactory::BuildServiceInstanceFor(
LinuxBackendUsed used_backend = PLAINTEXT;
if (store_type == "kwallet") {
used_desktop_env = base::nix::DESKTOP_ENVIRONMENT_KDE4;
+ } else if (store_type == "kwallet5") {
+ used_desktop_env = base::nix::DESKTOP_ENVIRONMENT_KDE5;
} else if (store_type == "gnome") {
used_desktop_env = base::nix::DESKTOP_ENVIRONMENT_GNOME;
} else if (store_type == "basic") {
@@ -296,7 +298,7 @@ KeyedService* PasswordStoreFactory::BuildServiceInstanceFor(
used_desktop_env == base::nix::DESKTOP_ENVIRONMENT_KDE5) {
// KDE3 didn't use DBus, which our KWallet store uses.
VLOG(1) << "Trying KWallet for password storage.";
- backend.reset(new NativeBackendKWallet(id));
+ backend.reset(new NativeBackendKWallet(id, used_desktop_env));
if (backend->Init()) {
VLOG(1) << "Using KWallet for password storage.";
used_backend = KWALLET;
--
2.6.4

View file

@ -18,7 +18,7 @@
buildarch=4
pkgname=chromium
pkgver=47.0.2526.111
pkgver=48.0.2564.82
pkgrel=1
_launcher_ver=3
pkgdesc="The open-source project behind Google Chrome, an attempt at creating a safer, faster, and more stable browser"
@ -40,21 +40,19 @@ install=chromium.install
source=(https://commondatastorage.googleapis.com/chromium-browser-official/$pkgname-$pkgver.tar.xz
chromium-launcher-$_launcher_ver.tar.gz::https://github.com/foutrelis/chromium-launcher/archive/v$_launcher_ver.tar.gz
chromium.desktop
chromium-use-non-versioned-icu-namespace.patch
chromium-fix-print-preview-on-en_GB-locale.patch
0001-Add-FPDFAPIJPEG_-prefix-to-more-libjpeg-functions.patch
0001-Use-kwalletd5-in-KDE-5-environments.patch
arm-webrtc-fix.patch
chromium-arm-r0.patch
chromium-widevine.patch)
sha256sums=('179a9189634eb344078c5728fb429bc8581015437ff857261268ab7dbe093708'
sha256sums=('cda64bf427d01bae7d45863812edcd7fa43176238ec07c7752e42afd3e1714fd'
'8b01fb4efe58146279858a754d90b49e5a38c9a0b36a1f84cbb7d12f92b84c28'
'028a748a5c275de9b8f776f97909f999a8583a4b77fd1cd600b4fc5c0c3e91e9'
'e4192446cc0ab6a5c540599c8a149f4f2208f0014da2786ada6c9544913d7426'
'6fff45aafa31fb35a032b4e2175a341e08f9d2a9b37c5cf080c318180f558378'
'd114def156d60d5f4c9e42f2955ba19bdebe38037a330ef947af24ace25db39d'
'5a4c852ee40c29a2317c3175452aafaf72ecc6d09f0e6d2106ae403ec419ec2d'
'9db0f01517c52e3236ff52e8a664840542a19144a54923ae6aabea3dcfa92c52'
'df4be49770d508b772f98eda9fc5f37fa71d4c0459437e12f7f3db5892aa1611'
'379b746e187de28f80f5a7cd19edcfa31859656826f802a1ede054fcb6dfb221')
'4660344789c45c9b9e52cb6d86f7cb6edb297b39320d04f6947e5216d6e5f64c')
# Google API keys (see http://www.chromium.org/developers/how-tos/api-keys)
# Note: These are for Arch Linux use ONLY. For your own distribution, please
@ -74,19 +72,14 @@ prepare() {
# https://code.google.com/p/chromium/issues/detail?id=541273
sed -i "/'target_name': 'libvpx'/s/libvpx/&_new/" build/linux/unbundle/libvpx.gyp
# https://codereview.chromium.org/1505763002
patch -Np1 -i ../chromium-use-non-versioned-icu-namespace.patch
# https://code.google.com/p/chromium/issues/detail?id=480415
patch -Np1 -i ../chromium-fix-print-preview-on-en_GB-locale.patch
# https://code.google.com/p/chromium/issues/detail?id=505226
patch -d third_party/pdfium -Np1 <../0001-Add-FPDFAPIJPEG_-prefix-to-more-libjpeg-functions.patch
# https://code.google.com/p/chromium/issues/detail?id=500281
patch -Np1 -i ../0001-Use-kwalletd5-in-KDE-5-environments.patch
# Enable support for the Widevine CDM plugin
# The actual libraries are not included, but can be copied over from Chrome:
# libwidevinecdmadapter.so
# libwidevinecdm.so
# libwidevinecdm.so is not included, but can be copied over from Chrome
# (Version string doesn't seem to matter so let's go with "Pinkie Pie")
sed "s/@WIDEVINE_VERSION@/Pinkie Pie/" ../chromium-widevine.patch |
patch -Np1
@ -108,8 +101,8 @@ prepare() {
find . -name '*.py' -exec sed -i -r 's|/usr/bin/python$|&2|g' {} +
# There are still a lot of relative calls which need a workaround
mkdir "$srcdir/python2-path"
ln -s /usr/bin/python2 "$srcdir/python2-path/python"
mkdir -p "$srcdir/python2-path"
ln -sf /usr/bin/python2 "$srcdir/python2-path/python"
}
build() {
@ -169,6 +162,7 @@ build() {
-Duse_mojo=0
-Duse_gconf=0
-Denable_hangout_services_extension=1
-Denable_widevine=1
-Ddisable_fatal_linker_warnings=1
-Ddisable_glibc=1
-Ddisable_sse2=1
@ -208,7 +202,10 @@ package() {
install -Dm4755 out/Release/chrome_sandbox \
"$pkgdir/usr/lib/chromium/chrome-sandbox"
cp out/Release/{*.pak,*.bin} "$pkgdir/usr/lib/chromium/"
cp out/Release/{*.pak,*.bin,libwidevinecdmadapter.so} \
"$pkgdir/usr/lib/chromium/"
strip $STRIP_SHARED "$pkgdir/usr/lib/chromium/libwidevinecdmadapter.so"
cp -a out/Release/locales "$pkgdir/usr/lib/chromium/"

View file

@ -0,0 +1,14 @@
Index: components/autofill/core/common/autofill_l10n_util.cc
diff --git a/components/autofill/core/common/autofill_l10n_util.cc b/components/autofill/core/common/autofill_l10n_util.cc
index 2ee517faf82b1feb224f83ae533092ae3b31f5af..c29b0a299b7215895874adf9241e4705247161ab 100644
--- a/components/autofill/core/common/autofill_l10n_util.cc
+++ b/components/autofill/core/common/autofill_l10n_util.cc
@@ -22,7 +22,7 @@ CaseInsensitiveCompare::CaseInsensitiveCompare(const icu::Locale& locale) {
// library. This could be due to a device-specific issue (has been seen in
// the wild on Android devices). In the failure case, |collator_| will be
// null. See http://crbug.com/558625.
- icu_54::UnicodeString name;
+ icu::UnicodeString name;
std::string locale_name;
locale.getDisplayName(name).toUTF8String(locale_name);
LOG(ERROR) << "Failed to initialize the ICU Collator for "

View file

@ -1,12 +1,53 @@
diff -upr chromium-42.0.2311.90.orig/third_party/widevine/cdm/widevine_cdm_version.h chromium-42.0.2311.90/third_party/widevine/cdm/widevine_cdm_version.h
--- chromium-42.0.2311.90.orig/third_party/widevine/cdm/widevine_cdm_version.h 2015-04-15 01:18:59.000000000 +0300
+++ chromium-42.0.2311.90/third_party/widevine/cdm/widevine_cdm_version.h 2015-04-15 09:09:49.157260050 +0300
@@ -14,4 +14,8 @@
// - WIDEVINE_CDM_VERSION_STRING (with the version of the CDM that's available
// as a string, e.g., "1.0.123.456").
diff -upr chromium-48.0.2564.82.orig/chrome/common/chrome_content_client.cc chromium-48.0.2564.82/chrome/common/chrome_content_client.cc
--- chromium-48.0.2564.82.orig/chrome/common/chrome_content_client.cc 2016-01-20 22:01:20.000000000 +0200
+++ chromium-48.0.2564.82/chrome/common/chrome_content_client.cc 2016-01-21 20:02:02.788936626 +0200
@@ -158,7 +158,12 @@ void ComputeBuiltInPlugins(std::vector<c
#if defined(WIDEVINE_CDM_AVAILABLE) && defined(ENABLE_PEPPER_CDMS) && \
!defined(WIDEVINE_CDM_IS_COMPONENT)
static bool skip_widevine_cdm_file_check = false;
- if (PathService::Get(chrome::FILE_WIDEVINE_CDM_ADAPTER, &path)) {
+ bool widevine_cdm_present =
+ skip_widevine_cdm_file_check ||
+ (PathService::Get(chrome::FILE_WIDEVINE_CDM, &path) &&
+ base::PathExists(path));
+ if (widevine_cdm_present &&
+ PathService::Get(chrome::FILE_WIDEVINE_CDM_ADAPTER, &path)) {
if (skip_widevine_cdm_file_check || base::PathExists(path)) {
content::PepperPluginInfo widevine_cdm;
widevine_cdm.is_out_of_process = true;
diff -upr chromium-48.0.2564.82.orig/chrome/common/chrome_paths.cc chromium-48.0.2564.82/chrome/common/chrome_paths.cc
--- chromium-48.0.2564.82.orig/chrome/common/chrome_paths.cc 2016-01-20 22:01:20.000000000 +0200
+++ chromium-48.0.2564.82/chrome/common/chrome_paths.cc 2016-01-21 19:18:51.287978456 +0200
@@ -375,6 +375,11 @@ bool PathProvider(int key, base::FilePat
return false;
cur = cur.AppendASCII(kWidevineCdmAdapterFileName);
break;
+ case chrome::FILE_WIDEVINE_CDM:
+ if (!GetInternalPluginsDirectory(&cur))
+ return false;
+ cur = cur.AppendASCII(kWidevineCdmFileName);
+ break;
#endif // defined(WIDEVINE_CDM_AVAILABLE) && defined(ENABLE_PEPPER_CDMS)
case chrome::FILE_RESOURCES_PACK:
#if defined(OS_MACOSX) && !defined(OS_IOS)
diff -upr chromium-48.0.2564.82.orig/chrome/common/chrome_paths.h chromium-48.0.2564.82/chrome/common/chrome_paths.h
--- chromium-48.0.2564.82.orig/chrome/common/chrome_paths.h 2016-01-14 03:49:22.000000000 +0200
+++ chromium-48.0.2564.82/chrome/common/chrome_paths.h 2016-01-21 19:18:51.287978456 +0200
@@ -99,6 +99,7 @@ enum {
DIR_COMPONENT_WIDEVINE_CDM, // Directory that contains component-updated
// Widevine CDM files.
FILE_WIDEVINE_CDM_ADAPTER, // Full path to the Widevine CDM adapter file.
+ FILE_WIDEVINE_CDM, // Full path to the Widevine CDM file.
FILE_RESOURCES_PACK, // Full path to the .pak file containing
// binary data (e.g., html files and images
// used by internal pages).
diff -upr chromium-48.0.2564.82.orig/third_party/widevine/cdm/stub/widevine_cdm_version.h chromium-48.0.2564.82/third_party/widevine/cdm/stub/widevine_cdm_version.h
--- chromium-48.0.2564.82.orig/third_party/widevine/cdm/stub/widevine_cdm_version.h 2016-01-14 01:05:17.000000000 +0200
+++ chromium-48.0.2564.82/third_party/widevine/cdm/stub/widevine_cdm_version.h 2016-01-21 19:18:51.287978456 +0200
@@ -12,4 +12,6 @@
#define WIDEVINE_CDM_AVAILABLE
+#include "third_party/widevine/cdm/widevine_cdm_common.h"
+#define WIDEVINE_CDM_AVAILABLE
+#define WIDEVINE_CDM_VERSION_STRING "@WIDEVINE_VERSION@"
+
#endif // WIDEVINE_CDM_VERSION_H_