From 64ecf6214ff4bb740014942739b6fc700f18e35b Mon Sep 17 00:00:00 2001 From: Adam Barth Date: Wed, 29 Jul 2015 18:45:09 -0700 Subject: [PATCH] Add a flag to sky_viewer to enable checked mode This flag will let clients who use release builds enable checked mode. Fixes #22 --- services/sky/runtime_flags.cc | 4 +++ services/sky/runtime_flags.h | 4 ++- services/sky/viewer.cc | 2 ++ sky/engine/core/script/dart_init.cc | 25 +++++++++++++------ sky/engine/platform/RuntimeEnabledFeatures.in | 1 + sky/engine/public/web/WebRuntimeFeatures.h | 2 ++ sky/engine/web/WebRuntimeFeatures.cpp | 5 ++++ 7 files changed, 35 insertions(+), 8 deletions(-) diff --git a/services/sky/runtime_flags.cc b/services/sky/runtime_flags.cc index 360fbea06..973b5b60f 100644 --- a/services/sky/runtime_flags.cc +++ b/services/sky/runtime_flags.cc @@ -16,11 +16,15 @@ RuntimeFlags flags; // Load the viewer in testing mode so we can dump pixels. const char kTesting[] = "--testing"; +// Instruct the DartVM to report type errors. +const char kEnableCheckedMode[] = "--enable-checked-mode"; + } // namespace void RuntimeFlags::Initialize(mojo::ApplicationImpl* app) { DCHECK(!initialized); flags.testing_ = app->HasArg(kTesting); + flags.enable_checked_mode_ = app->HasArg(kEnableCheckedMode); initialized = true; } diff --git a/services/sky/runtime_flags.h b/services/sky/runtime_flags.h index a16d32573..c4bf96492 100644 --- a/services/sky/runtime_flags.h +++ b/services/sky/runtime_flags.h @@ -17,9 +17,11 @@ class RuntimeFlags { static const RuntimeFlags& Get(); bool testing() const { return testing_; } + bool enable_checked_mode() const { return enable_checked_mode_; } private: - bool testing_; + bool testing_ = false; + bool enable_checked_mode_ = false; }; } // namespace sky diff --git a/services/sky/viewer.cc b/services/sky/viewer.cc index 879c9f673..c22e4a3e7 100644 --- a/services/sky/viewer.cc +++ b/services/sky/viewer.cc @@ -37,6 +37,8 @@ class Viewer : public mojo::ApplicationDelegate, blink::WebRuntimeFeatures::enableObservatory( !RuntimeFlags::Get().testing()); + blink::WebRuntimeFeatures::enableDartCheckedMode( + RuntimeFlags::Get().enable_checked_mode()); platform_impl_.reset(new PlatformImpl()); blink::initialize(platform_impl_.get()); diff --git a/sky/engine/core/script/dart_init.cc b/sky/engine/core/script/dart_init.cc index 8efc44f94..574d37f29 100644 --- a/sky/engine/core/script/dart_init.cc +++ b/sky/engine/core/script/dart_init.cc @@ -75,15 +75,16 @@ void CreateEmptyRootLibraryIfNeeded() { static const char* kDartArgs[] = { "--enable_mirrors=false", -#if ENABLE(DART_STRICT) - "--enable_asserts", - "--enable_type_checks", - "--error_on_bad_type", - "--error_on_bad_override", #if WTF_OS_IOS || WTF_OS_MACOSX "--no-profile" #endif -#endif +}; + +static const char* kDartCheckedModeArgs[] = { + "--enable_asserts", + "--enable_type_checks", + "--error_on_bad_type", + "--error_on_bad_override", }; void UnhandledExceptionCallback(Dart_Handle error) { @@ -172,7 +173,17 @@ Dart_Isolate IsolateCreateCallback(const char* script_uri, void InitDartVM() { dart::bin::BootstrapDartIo(); - CHECK(Dart_SetVMFlags(arraysize(kDartArgs), kDartArgs)); + bool enable_checked_mode = RuntimeEnabledFeatures::dartCheckedModeEnabled(); +#if ENABLE(DART_STRICT) + enable_checked_mode = true; +#endif + + Vector args; + args.append(kDartArgs, arraysize(kDartArgs)); + if (enable_checked_mode) + args.append(kDartCheckedModeArgs, arraysize(kDartCheckedModeArgs)); + + CHECK(Dart_SetVMFlags(args.size(), args.data())); // This should be called before calling Dart_Initialize. DartDebugger::InitDebugger(); CHECK(Dart_Initialize(kDartVmIsolateSnapshotBuffer, diff --git a/sky/engine/platform/RuntimeEnabledFeatures.in b/sky/engine/platform/RuntimeEnabledFeatures.in index 4edc8107f..00403a060 100644 --- a/sky/engine/platform/RuntimeEnabledFeatures.in +++ b/sky/engine/platform/RuntimeEnabledFeatures.in @@ -120,3 +120,4 @@ PseudoClassesInMatchingCriteriaInAuthorShadowTrees status=test CredentialManager status=test Observatory status=stable +DartCheckedMode diff --git a/sky/engine/public/web/WebRuntimeFeatures.h b/sky/engine/public/web/WebRuntimeFeatures.h index 245a508fe..0feb2319a 100644 --- a/sky/engine/public/web/WebRuntimeFeatures.h +++ b/sky/engine/public/web/WebRuntimeFeatures.h @@ -94,6 +94,8 @@ public: BLINK_EXPORT static void enableObservatory(bool); + BLINK_EXPORT static void enableDartCheckedMode(bool); + private: WebRuntimeFeatures(); }; diff --git a/sky/engine/web/WebRuntimeFeatures.cpp b/sky/engine/web/WebRuntimeFeatures.cpp index d38a3a6ae..55543b963 100644 --- a/sky/engine/web/WebRuntimeFeatures.cpp +++ b/sky/engine/web/WebRuntimeFeatures.cpp @@ -175,4 +175,9 @@ void WebRuntimeFeatures::enableObservatory(bool enable) RuntimeEnabledFeatures::setObservatoryEnabled(enable); } +void WebRuntimeFeatures::enableDartCheckedMode(bool enable) +{ + RuntimeEnabledFeatures::setDartCheckedModeEnabled(enable); +} + } // namespace blink -- GitLab