Index: tools/testing/dart/reset_safari.dart |
diff --git a/tools/testing/dart/reset_safari.dart b/tools/testing/dart/reset_safari.dart |
deleted file mode 100644 |
index e1886a5442ca861c7248ae4a9daffe21f0bbd88a..0000000000000000000000000000000000000000 |
--- a/tools/testing/dart/reset_safari.dart |
+++ /dev/null |
@@ -1,227 +0,0 @@ |
-// Copyright (c) 2016, the Dart project authors. Please see the AUTHORS file |
-// for details. All rights reserved. Use of this source code is governed by a |
-// BSD-style license that can be found in the LICENSE file. |
- |
- |
-/// Helper program for killing and resetting all Safari settings to a known |
-/// state that works well for testing dart2js output in Safari. |
-/// |
-/// Warning: this will delete all your Safari settings and bookmarks. |
-library testing.reset_safari; |
- |
-import 'dart:async' show |
- Future, |
- Timer; |
- |
-import 'dart:io' show |
- Directory, |
- File, |
- Platform, |
- Process, |
- ProcessResult; |
- |
-const String defaultSafariBundleLocation = "/Applications/Safari.app/"; |
- |
-const String relativeSafariLocation = "Contents/MacOS/Safari"; |
- |
-const String lsofLocation = "/usr/sbin/lsof"; |
- |
-const String killLocation = "/bin/kill"; |
- |
-const String pkillLocation = "/usr/bin/pkill"; |
- |
-const String safari = "com.apple.Safari"; |
- |
-const String defaultsLocation = "/usr/bin/defaults"; |
- |
-final List<String> safariSettings = <String>[ |
- "Library/Caches/$safari", |
- "Library/Safari", |
- "Library/Saved Application State/$safari.savedState", |
- "Library/Caches/Metadata/Safari", |
- "Library/Preferences/$safari.plist", |
-]; |
- |
-const Duration defaultPollDelay = const Duration(milliseconds: 1); |
- |
-final String cpgi = "$safari.ContentPageGroupIdentifier"; |
- |
-final String knownSafariPreference = ''' |
-{ |
- DefaultBrowserPromptingState2 = 2; |
- StartPageViewControllerMode = 0; |
- TestDriveOriginBrowser = 1; |
- TestDriveUserDecision = 2; |
- TestDriveState = 3; |
- AlwaysRestoreSessionAtLaunch = 0; |
- NewTabBehavior = 1; |
- NewWindowBehavior = 1; |
- LastSafariVersionWithWelcomePage = "9.0"; |
- OpenNewTabsInFront = 0; |
- TabCreationPolicy = 0; |
- |
- IncludeDevelopMenu = 1; |
- WebKitDeveloperExtrasEnabledPreferenceKey = 1; |
- "$cpgi.WebKit2DeveloperExtrasEnabled" = 1; |
- |
- AutoFillCreditCardData = 0; |
- AutoFillMiscellaneousForms = 0; |
- AutoFillPasswords = 0; |
- |
- SuppressSearchSuggestions = 1; |
- |
- PreloadTopHit = 0; |
- ShowFavoritesUnderSmartSearchField = 0; |
- WebsiteSpecificSearchEnabled = 0; |
- |
- WarnAboutFraudulentWebsites = 0; |
- |
- |
- WebKitJavaScriptEnabled = 1; |
- "$cpgi.WebKit2JavaScriptEnabled" = 1; |
- |
- WebKitJavaScriptCanOpenWindowsAutomatically = 1; |
- "$cpgi.WebKit2JavaScriptCanOpenWindowsAutomatically" = 1; |
- |
- "$cpgi.WebKit2WebGLEnabled" = 1; |
- WebGLDefaultLoadPolicy = WebGLPolicyAllowNoSecurityRestrictions; |
- |
- "$cpgi.WebKit2PluginsEnabled" = 0; |
- |
- BlockStoragePolicy = 1; |
- WebKitStorageBlockingPolicy = 0; |
- "$cpgi.WebKit2StorageBlockingPolicy" = 0; |
- |
- |
- SafariGeolocationPermissionPolicy = 0; |
- |
- CanPromptForPushNotifications = 0; |
- |
- InstallExtensionUpdatesAutomatically = 0; |
- |
- ShowFullURLInSmartSearchField = 1; |
- |
- "$cpgi.WebKit2PlugInSnapshottingEnabled" = 0; |
-} |
-'''; |
- |
-Future<Null> get pollDelay => new Future.delayed(defaultPollDelay); |
- |
-String signalArgument( |
- String defaultSignal, |
- {bool force: false, |
- bool testOnly: false}) { |
- if (force && testOnly) { |
- throw new ArgumentError("[force] and [testOnly] can't both be true."); |
- } |
- if (force) return "-KILL"; |
- if (testOnly) return "-0"; |
- return defaultSignal; |
-} |
- |
-Future<int> kill( |
- List<String> pids, |
- {bool force: false, |
- bool testOnly: false}) async { |
- List<String> arguments = |
- <String>[signalArgument("-TERM", force: force, testOnly: testOnly)] |
- ..addAll(pids); |
- ProcessResult result = await Process.run(killLocation, arguments); |
- return result.exitCode; |
-} |
- |
-Future<int> pkill( |
- String pattern, |
- {bool force: false, |
- bool testOnly: false}) async { |
- List<String> arguments = <String>[ |
- signalArgument("-HUP", force: force, testOnly: testOnly), |
- pattern]; |
- ProcessResult result = await Process.run(pkillLocation, arguments); |
- return result.exitCode; |
-} |
- |
-Uri validatedBundleName(Uri bundle) { |
- if (bundle == null) return Uri.base.resolve(defaultSafariBundleLocation); |
- if (!bundle.path.endsWith("/")) { |
- throw new ArgumentError( |
- "Bundle ('$bundle') must end with a slash ('/')."); |
- } |
- return bundle; |
-} |
- |
-Future<Null> killSafari({Uri bundle}) async { |
- bundle = validatedBundleName(bundle); |
- Uri safariBinary = bundle.resolve(relativeSafariLocation); |
- ProcessResult result = await Process.run( |
- lsofLocation, ["-t", safariBinary.toFilePath()]); |
- if (result.exitCode == 0) { |
- String stdout = result.stdout; |
- List<String> pids = new List<String>.from( |
- stdout.split("\n").where((String line) => !line.isEmpty)); |
- Timer timer = new Timer(const Duration(seconds: 10), () { |
- print("Kill -9 Safari $pids"); |
- kill(pids, force: true); |
- }); |
- int exitCode = await kill(pids); |
- while (exitCode == 0) { |
- await pollDelay; |
- print("Polling Safari $pids"); |
- exitCode = await kill(pids, testOnly: true); |
- } |
- timer.cancel(); |
- } |
- Timer timer = new Timer(const Duration(seconds: 10), () { |
- print("Kill -9 $safari"); |
- pkill(safari, force: true); |
- }); |
- int exitCode = await pkill(safari); |
- while (exitCode == 0) { |
- await pollDelay; |
- print("Polling $safari"); |
- exitCode = await pkill(safari, testOnly: true); |
- } |
- timer.cancel(); |
-} |
- |
-Future<Null> deleteIfExists(Uri uri) async { |
- Directory directory = new Directory.fromUri(uri); |
- if (await directory.exists()) { |
- print("Deleting directory '$uri'."); |
- await directory.delete(recursive: true); |
- } else { |
- File file = new File.fromUri(uri); |
- if (await file.exists()) { |
- print("Deleting file '$uri'."); |
- await file.delete(); |
- } else { |
- print("File '$uri' not found."); |
- } |
- } |
-} |
- |
-Future<Null> resetSafariSettings() async { |
- String home = Platform.environment["HOME"]; |
- if (!home.endsWith("/")) { |
- home = "$home/"; |
- } |
- Uri homeDirectory = Uri.base.resolve(home); |
- for (String setting in safariSettings) { |
- await deleteIfExists(homeDirectory.resolve(setting)); |
- } |
- ProcessResult result = await Process.run( |
- defaultsLocation, <String>["write", safari, knownSafariPreference]); |
- if (result.exitCode != 0) { |
- throw "Unable to reset Safari settings: ${result.stdout}${result.stderr}"; |
- } |
-} |
- |
-Future<Null> killAndResetSafari({Uri bundle}) async { |
- bundle = validatedBundleName(bundle); |
- await killSafari(bundle: bundle); |
- await resetSafariSettings(); |
-} |
- |
-Future<Null> main() async { |
- await killAndResetSafari(); |
-} |