Commit 94bb50fa authored by Chris Whelan's avatar Chris Whelan Committed by Commit Bot

[fuchsia] Refactors chromecast/crash to be usable on Fuchsia

Cast is not respnsible for uploading crash dumps on Fuchsia, so
app_state_tracker needs to work with different annotation storing
backends.

Bug: b/67907746
Test: Build
Change-Id: I5cd6a13f9e642cdbf940cc8ada5dd76663e793e2
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/2083956
Commit-Queue: Christopher Whelan <chwhelan@google.com>
Reviewed-by: default avatarRobert Sesek <rsesek@chromium.org>
Reviewed-by: default avatarMichael Spang <spang@chromium.org>
Cr-Commit-Position: refs/heads/master@{#749388}
parent f4733192
......@@ -54,7 +54,6 @@ cast_source_set("cast_crash_client") {
]
if (!is_fuchsia) {
# TODO(crbug.com/753619): Enable crash reporting on Fuchsia.
deps += [
"//chromecast/crash",
"//components/crash/content/app",
......@@ -98,7 +97,6 @@ cast_source_set("unittests") {
if (!is_fuchsia) {
deps += [
# TODO(crbug.com/753619): Enable crash reporting on Fuchsia.
":cast_crash_client",
"//chromecast/crash",
"//chromecast/crash:test_support",
......
......@@ -5,16 +5,48 @@
import("//chromecast/chromecast.gni")
import("//testing/test.gni")
# Crash reporting is not support on Fuchsia yet
# TODO(crbug.com/753619): Enable crash reporting on Fuchsia.
assert(!is_fuchsia)
cast_source_set("crash_storage") {
sources = [
"cast_crash_keys.cc",
"cast_crash_keys.h",
"cast_crash_storage.h",
]
if (is_fuchsia) {
sources += [
"cast_crash_storage_fuchsia.cc",
"fuchsia/cast_crash_storage_impl_fuchsia.cc",
"fuchsia/cast_crash_storage_impl_fuchsia.h",
]
deps = [ "//base" ]
} else {
sources += [
"cast_crash_storage.cc",
"cast_crash_storage_impl.cc",
"cast_crash_storage_impl.h",
]
deps = [
"//base",
"//components/crash/core/common",
]
}
}
cast_source_set("crash") {
sources = [
"app_state_tracker.cc",
"app_state_tracker.h",
"cast_crash_keys.cc",
"cast_crash_keys.h",
]
deps = [
":crash_storage",
"//base",
]
if (!is_fuchsia) {
sources += [
"cast_crashdump_uploader.cc",
"cast_crashdump_uploader.h",
"linux/crash_util.cc",
......@@ -34,8 +66,7 @@ cast_source_set("crash") {
"linux/synchronized_minidump_manager.h",
]
deps = [
"//base",
deps += [
"//chromecast/base",
"//chromecast/base:cast_sys_info_util",
"//chromecast/base:cast_version",
......@@ -44,9 +75,11 @@ cast_source_set("crash") {
"//components/prefs",
"//third_party/breakpad:client",
]
}
}
cast_executable("crash_uploader") {
if (!is_fuchsia) {
cast_executable("crash_uploader") {
sources = [ "linux/crash_uploader.cc" ]
deps = [
......@@ -57,9 +90,9 @@ cast_executable("crash_uploader") {
"//chromecast/public",
"//chromecast/system/reboot:reboot_util",
]
}
}
cast_source_set("test_support") {
cast_source_set("test_support") {
sources = [
"linux/crash_testing_utils.cc",
"linux/crash_testing_utils.h",
......@@ -70,6 +103,7 @@ cast_source_set("test_support") {
"//base",
"//chromecast/base",
]
}
}
if (is_linux) {
......
......@@ -5,8 +5,7 @@
#include "chromecast/crash/app_state_tracker.h"
#include "base/no_destructor.h"
#include "chromecast/crash/cast_crash_keys.h"
#include "components/crash/core/common/crash_key.h"
#include "chromecast/crash/cast_crash_storage.h"
namespace {
......@@ -49,8 +48,7 @@ std::string AppStateTracker::GetStadiaSessionId() {
// static
void AppStateTracker::SetLastLaunchedApp(const std::string& app_id) {
GetAppState()->last_launched_app = app_id;
crash_keys::last_app.Set(app_id);
CastCrashStorage::GetInstance()->SetLastLaunchedApp(app_id);
}
// static
......@@ -59,20 +57,24 @@ void AppStateTracker::SetCurrentApp(const std::string& app_id) {
app_state->previous_app = app_state->current_app;
app_state->current_app = app_id;
static crash_reporter::CrashKeyString<64> current_app("current_app");
current_app.Set(app_id);
CastCrashStorage::GetInstance()->SetCurrentApp(app_id);
CastCrashStorage::GetInstance()->SetPreviousApp(app_state->previous_app);
}
crash_keys::previous_app.Set(app_state->previous_app);
// static
void AppStateTracker::SetPreviousApp(const std::string& app_id) {
GetAppState()->previous_app = app_id;
CastCrashStorage::GetInstance()->SetPreviousApp(app_id);
}
// static
void AppStateTracker::SetStadiaSessionId(const std::string& stadia_session_id) {
if (!stadia_session_id.empty()) {
GetAppState()->stadia_session_id = stadia_session_id;
crash_keys::stadia_session_id.Set(stadia_session_id);
CastCrashStorage::GetInstance()->SetStadiaSessionId(stadia_session_id);
} else {
GetAppState()->stadia_session_id.clear();
crash_keys::stadia_session_id.Clear();
CastCrashStorage::GetInstance()->ClearStadiaSessionId();
}
}
......
......@@ -17,6 +17,9 @@ class AppStateTracker {
// The current app becomes the previous app, |app_id| becomes the current app.
static void SetCurrentApp(const std::string& app_id);
// Record |app_id| as the previous app.
static void SetPreviousApp(const std::string& app_id);
// Set the Stadia session ID, when a Stadia session starts running.
// Clear the Stadia session ID by passing in an empty string
static void SetStadiaSessionId(const std::string& stadia_session_id);
......
......@@ -7,11 +7,13 @@
namespace chromecast {
namespace crash_keys {
crash_reporter::CrashKeyString<64> last_app("last_app");
const char kLastApp[] = "last_app";
crash_reporter::CrashKeyString<64> previous_app("previous_app");
const char kCurrentApp[] = "current_app";
crash_reporter::CrashKeyString<64> stadia_session_id("stadia_session_id");
const char kPreviousApp[] = "previous_app";
const char kStadiaSessionId[] = "stadia_session_id";
} // namespace crash_keys
} // namespace chromecast
......@@ -5,16 +5,17 @@
#ifndef CHROMECAST_CRASH_CAST_CRASH_KEYS_H_
#define CHROMECAST_CRASH_CAST_CRASH_KEYS_H_
#include "components/crash/core/common/crash_key.h"
namespace chromecast {
namespace crash_keys {
extern crash_reporter::CrashKeyString<64> last_app;
// Names of crash keys to be shared by multiple platforms.
extern const char kLastApp[];
extern const char kCurrentApp[];
extern crash_reporter::CrashKeyString<64> previous_app;
extern const char kPreviousApp[];
extern crash_reporter::CrashKeyString<64> stadia_session_id;
extern const char kStadiaSessionId[];
} // namespace crash_keys
} // namespace chromecast
......
// Copyright 2020 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#include "chromecast/crash/cast_crash_storage.h"
#include "base/no_destructor.h"
#include "chromecast/crash/cast_crash_storage_impl.h"
namespace chromecast {
CastCrashStorage* CastCrashStorage::GetInstance() {
static base::NoDestructor<CastCrashStorageImpl> storage;
return storage.get();
}
} // namespace chromecast
// Copyright 2020 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#ifndef CHROMECAST_CASH_CAST_CRASH_STORAGE_H_
#define CHROMECAST_CASH_CAST_CRASH_STORAGE_H_
#include "base/strings/string_piece.h"
namespace chromecast {
// Stores crash key annotations.
// This is used to provide indirection for platform dependent storage
// implementations.
class CastCrashStorage {
public:
static CastCrashStorage* GetInstance();
CastCrashStorage() = default;
virtual ~CastCrashStorage() = default;
virtual void SetLastLaunchedApp(base::StringPiece app_id) = 0;
virtual void ClearLastLaunchedApp() = 0;
virtual void SetCurrentApp(base::StringPiece app_id) = 0;
virtual void ClearCurrentApp() = 0;
virtual void SetPreviousApp(base::StringPiece app_id) = 0;
virtual void ClearPreviousApp() = 0;
virtual void SetStadiaSessionId(base::StringPiece session_id) = 0;
virtual void ClearStadiaSessionId() = 0;
};
} // namespace chromecast
#endif // CHROMECAST_CASH_CAST_CRASH_STORAGE_H_
// Copyright 2020 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#include "chromecast/crash/cast_crash_storage.h"
#include "base/no_destructor.h"
#include "chromecast/crash/fuchsia/cast_crash_storage_impl_fuchsia.h"
namespace chromecast {
CastCrashStorage* CastCrashStorage::GetInstance() {
static base::NoDestructor<CastCrashStorageImplFuchsia> storage;
return storage.get();
}
} // namespace chromecast
// Copyright 2020 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#include "chromecast/crash/cast_crash_storage_impl.h"
#include "chromecast/crash/cast_crash_keys.h"
#include "components/crash/core/common/crash_key.h"
namespace chromecast {
namespace {
crash_reporter::CrashKeyString<64> last_app(crash_keys::kLastApp);
crash_reporter::CrashKeyString<64> current_app(crash_keys::kCurrentApp);
crash_reporter::CrashKeyString<64> previous_app(crash_keys::kPreviousApp);
crash_reporter::CrashKeyString<64> stadia_session_id(
crash_keys::kStadiaSessionId);
} // namespace
CastCrashStorageImpl::CastCrashStorageImpl() = default;
CastCrashStorageImpl::~CastCrashStorageImpl() = default;
void CastCrashStorageImpl::SetLastLaunchedApp(base::StringPiece app_id) {
last_app.Set(app_id);
}
void CastCrashStorageImpl::ClearLastLaunchedApp() {
last_app.Clear();
}
void CastCrashStorageImpl::SetCurrentApp(base::StringPiece app_id) {
current_app.Set(app_id);
}
void CastCrashStorageImpl::ClearCurrentApp() {
current_app.Clear();
}
void CastCrashStorageImpl::SetPreviousApp(base::StringPiece app_id) {
previous_app.Set(app_id);
}
void CastCrashStorageImpl::ClearPreviousApp() {
previous_app.Clear();
}
void CastCrashStorageImpl::SetStadiaSessionId(base::StringPiece session_id) {
stadia_session_id.Set(session_id);
}
void CastCrashStorageImpl::ClearStadiaSessionId() {
stadia_session_id.Clear();
}
} // namespace chromecast
// Copyright 2020 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#ifndef CHROMECAST_CRASH_CAST_CRASH_STORAGE_DEFAULT_H_
#define CHROMECAST_CRASH_CAST_CRASH_STORAGE_DEFAULT_H_
#include "chromecast/crash/cast_crash_storage.h"
namespace chromecast {
class CastCrashStorageImpl : public CastCrashStorage {
public:
CastCrashStorageImpl();
~CastCrashStorageImpl() final;
CastCrashStorageImpl& operator=(const CastCrashStorageImpl&) = delete;
CastCrashStorageImpl(const CastCrashStorageImpl&) = delete;
// CastCrashStorage implementation:
void SetLastLaunchedApp(base::StringPiece app_id) final;
void ClearLastLaunchedApp() final;
void SetCurrentApp(base::StringPiece app_id) final;
void ClearCurrentApp() final;
void SetPreviousApp(base::StringPiece app_id) final;
void ClearPreviousApp() final;
void SetStadiaSessionId(base::StringPiece session_id) final;
void ClearStadiaSessionId() final;
};
} // namespace chromecast
#endif // CHROMECAST_CRASH_CAST_CRASH_STORAGE_DEFAULT_H_
// Copyright 2020 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#include "chromecast/crash/fuchsia/cast_crash_storage_impl_fuchsia.h"
namespace chromecast {
CastCrashStorageImplFuchsia::CastCrashStorageImplFuchsia() = default;
CastCrashStorageImplFuchsia::~CastCrashStorageImplFuchsia() = default;
void CastCrashStorageImplFuchsia::SetLastLaunchedApp(base::StringPiece app_id) {
// TODO(b/67907746): Implement.
}
void CastCrashStorageImplFuchsia::ClearLastLaunchedApp() {
// TODO(b/67907746): Implement.
}
void CastCrashStorageImplFuchsia::SetCurrentApp(base::StringPiece app_id) {
// TODO(b/67907746): Implement.
}
void CastCrashStorageImplFuchsia::ClearCurrentApp() {
// TODO(b/67907746): Implement.
}
void CastCrashStorageImplFuchsia::SetPreviousApp(base::StringPiece app_id) {
// TODO(b/67907746): Implement.
}
void CastCrashStorageImplFuchsia::ClearPreviousApp() {
// TODO(b/67907746): Implement.
}
void CastCrashStorageImplFuchsia::SetStadiaSessionId(
base::StringPiece session_id) {
// TODO(b/67907746): Implement.
}
void CastCrashStorageImplFuchsia::ClearStadiaSessionId() {
// TODO(b/67907746): Implement.
}
} // namespace chromecast
// Copyright 2020 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#ifndef CHROMECAST_CRASH_FUCHSIA_CAST_CRASH_STORAGE_IMPL_FUCHSIA_H_
#define CHROMECAST_CRASH_FUCHSIA_CAST_CRASH_STORAGE_IMPL_FUCHSIA_H_
#include "chromecast/crash/cast_crash_storage.h"
namespace chromecast {
class CastCrashStorageImplFuchsia : public CastCrashStorage {
public:
CastCrashStorageImplFuchsia();
~CastCrashStorageImplFuchsia() final;
CastCrashStorageImplFuchsia& operator=(const CastCrashStorageImplFuchsia&) =
delete;
CastCrashStorageImplFuchsia(const CastCrashStorageImplFuchsia&) = delete;
// CastCrashStorage implementation:
void SetLastLaunchedApp(base::StringPiece app_id) final;
void ClearLastLaunchedApp() final;
void SetCurrentApp(base::StringPiece app_id) final;
void ClearCurrentApp() final;
void SetPreviousApp(base::StringPiece app_id) final;
void ClearPreviousApp() final;
void SetStadiaSessionId(base::StringPiece session_id) final;
void ClearStadiaSessionId() final;
};
} // namespace chromecast
#endif // CHROMECAST_CRASH_FUCHSIA_CAST_CRASH_STORAGE_IMPL_FUCHSIA_H_
......@@ -65,6 +65,7 @@ cast_source_set("renderer") {
"//chromecast/common:queryable_data",
"//chromecast/common/media",
"//chromecast/common/mojom",
"//chromecast/crash",
"//chromecast/media",
"//chromecast/media/base:media_codec_support",
"//components/network_hints/renderer",
......@@ -79,11 +80,6 @@ cast_source_set("renderer") {
"//v8",
]
if (!is_fuchsia) {
# TODO(crbug.com/753619): Enable crash reporting on Fuchsia.
deps += [ "//chromecast/crash" ]
}
if (!is_android) {
sources += [
"memory_pressure_observer_impl.cc",
......
......@@ -12,6 +12,7 @@
#include "chromecast/base/bitstream_audio_codecs.h"
#include "chromecast/base/cast_features.h"
#include "chromecast/base/chromecast_switches.h"
#include "chromecast/crash/app_state_tracker.h"
#include "chromecast/media/base/media_codec_support.h"
#include "chromecast/media/base/supported_codec_profile_levels_memo.h"
#include "chromecast/public/media/media_capabilities_shlib.h"
......@@ -48,10 +49,6 @@
#include "chromecast/renderer/memory_pressure_observer_impl.h"
#endif // OS_ANDROID
#if !defined(OS_FUCHSIA)
#include "chromecast/crash/cast_crash_keys.h"
#endif // !defined(OS_FUCHSIA)
#if BUILDFLAG(ENABLE_CHROMECAST_EXTENSIONS)
#include "chromecast/common/cast_extensions_client.h"
#include "chromecast/renderer/cast_extensions_renderer_client.h"
......@@ -132,20 +129,17 @@ void CastContentRendererClient::RenderThreadStarted() {
memory_pressure_controller->AddObserver(std::move(memory_pressure_proxy));
#endif
#if !defined(OS_FUCHSIA)
// TODO(crbug.com/753619): Enable crash reporting on Fuchsia.
base::CommandLine* command_line = base::CommandLine::ForCurrentProcess();
std::string last_launched_app =
command_line->GetSwitchValueNative(switches::kLastLaunchedApp);
if (!last_launched_app.empty())
crash_keys::last_app.Set(last_launched_app);
AppStateTracker::SetLastLaunchedApp(last_launched_app);
std::string previous_app =
command_line->GetSwitchValueNative(switches::kPreviousApp);
if (!previous_app.empty())
crash_keys::previous_app.Set(previous_app);
#endif // !defined(OS_FUCHSIA)
AppStateTracker::SetPreviousApp(previous_app);
#if BUILDFLAG(ENABLE_CHROMECAST_EXTENSIONS)
extensions_client_ = std::make_unique<extensions::CastExtensionsClient>();
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment