summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJüri Valdmann <juri.valdmann@qt.io>2020-08-13 15:12:32 +0200
committerJüri Valdmann <juri.valdmann@qt.io>2020-08-13 13:59:08 +0000
commitc153fafb306d118a610d1a0acc55b54c564ae87d (patch)
tree0f0e5864a6ee8eeb157f883acfe3c14f051c9c83
parent30a0c954b97ae86385ff022d6c101fe900295695 (diff)
downloadqtwebengine-chromium-c153fafb306d118a610d1a0acc55b54c564ae87d.tar.gz
Fix invalid dbus bus name error in MPRIS
Task-number: QTBUG-85626 Change-Id: I67544564d352d86d559cac21448a78ea4de38cb8 Reviewed-by: Allan Sandfeld Jensen <allan.jensen@qt.io>
-rw-r--r--chromium/components/system_media_controls/linux/system_media_controls_linux.cc23
-rw-r--r--chromium/dbus/string_util.cc16
-rw-r--r--chromium/dbus/string_util.h3
3 files changed, 38 insertions, 4 deletions
diff --git a/chromium/components/system_media_controls/linux/system_media_controls_linux.cc b/chromium/components/system_media_controls/linux/system_media_controls_linux.cc
index fcaa2fbca0e..5e136979537 100644
--- a/chromium/components/system_media_controls/linux/system_media_controls_linux.cc
+++ b/chromium/components/system_media_controls/linux/system_media_controls_linux.cc
@@ -25,6 +25,7 @@
#include "dbus/message.h"
#include "dbus/object_path.h"
#include "dbus/property.h"
+#include "dbus/string_util.h"
#include "media/audio/audio_manager.h"
namespace system_media_controls {
@@ -43,6 +44,14 @@ namespace {
constexpr int kNumMethodsToExport = 11;
+#if BUILDFLAG(GOOGLE_CHROME_BRANDING)
+const char kMprisAPIServiceNameFallback[] =
+ "chrome";
+#else
+const char kMprisAPIServiceNameFallback[] =
+ "chromium";
+#endif
+
} // namespace
const char kMprisAPIServiceNamePrefix[] =
@@ -57,11 +66,17 @@ SystemMediaControlsLinux* SystemMediaControlsLinux::GetInstance() {
return base::Singleton<SystemMediaControlsLinux>::get();
}
+static std::string MakeServiceName() {
+ std::string baseName = media::AudioManager::GetGlobalAppName();
+ if (baseName.size() > 100 || !dbus::IsValidServiceNameElement(baseName))
+ baseName = kMprisAPIServiceNameFallback;
+ return std::string(kMprisAPIServiceNamePrefix) + baseName +
+ std::string(".instance") +
+ base::NumberToString(base::Process::Current().Pid());
+}
+
SystemMediaControlsLinux::SystemMediaControlsLinux()
- : service_name_(std::string(kMprisAPIServiceNamePrefix) +
- base::ToLowerASCII(media::AudioManager::GetGlobalAppName()) +
- std::string(".instance") +
- base::NumberToString(base::Process::Current().Pid()))
+ : service_name_(MakeServiceName())
{
}
diff --git a/chromium/dbus/string_util.cc b/chromium/dbus/string_util.cc
index 7f71015c480..bb2087bee8e 100644
--- a/chromium/dbus/string_util.cc
+++ b/chromium/dbus/string_util.cc
@@ -45,4 +45,20 @@ bool IsValidObjectPath(const std::string& value) {
return true;
}
+bool IsValidServiceNameElement(const std::string& value) {
+ if (value.empty())
+ return false;
+ for (size_t i = 0; i < value.size(); ++i) {
+ const char c = value[i];
+ // Each element must only contain "[A-Z][a-z][0-9]_-", but can not start with a digit.
+ const bool is_valid_character =
+ ('A' <= c && c <= 'Z') || ('a' <= c && c <= 'z') ||
+ (i > 0 && '0' <= c && c <= '9') || c == '_' || c == '-';
+ if (!is_valid_character)
+ return false;
+ }
+
+ return true;
+}
+
} // namespace dbus
diff --git a/chromium/dbus/string_util.h b/chromium/dbus/string_util.h
index 60c02d17418..454b14e5fb6 100644
--- a/chromium/dbus/string_util.h
+++ b/chromium/dbus/string_util.h
@@ -14,6 +14,9 @@ namespace dbus {
// Returns true if the specified string is a valid object path.
CHROME_DBUS_EXPORT bool IsValidObjectPath(const std::string& value);
+// Returns true if the specified string is a valid element of a service name.
+CHROME_DBUS_EXPORT bool IsValidServiceNameElement(const std::string& value);
+
} // namespace dbus
#endif // DBUS_STRING_UTIL_H_