| 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();
|
| -}
|
|
|