private static string LoadExtension() { try { string extensionDir = string.Empty; string directory = string.Empty; if (!string.IsNullOrEmpty(directory)) { extensionDir = directory; } else { extensionDir = Path.Combine(Path.GetTempPath(), "webdriver"); if (Directory.Exists(extensionDir)) { Directory.Delete(extensionDir, true); } Directory.CreateDirectory(extensionDir); Stream zipFileStream = ResourceUtilities.GetResourceStream(ExtensionFileName, GetExtensionResourceId()); using (ZipFile extensionZipFile = ZipFile.Read(zipFileStream)) { extensionZipFile.ExtractExistingFile = ExtractExistingFileAction.OverwriteSilently; extensionZipFile.ExtractAll(extensionDir); } } return(CheckExtensionForManifest(extensionDir)); } catch (IOException e) { throw new WebDriverException(string.Empty, e); } }
public void Install(string profileDirectory) { DirectoryInfo directoryInfo = new DirectoryInfo(profileDirectory); string text = Path.Combine(Path.GetTempPath(), directoryInfo.Name + ".staging"); string text2 = Path.Combine(text, Path.GetFileName(this.extensionFileName)); if (Directory.Exists(text2)) { Directory.Delete(text2, true); } Directory.CreateDirectory(text2); Stream resourceStream = ResourceUtilities.GetResourceStream(this.extensionFileName, this.extensionResourceId); using (ZipStorer zipStorer = ZipStorer.Open(resourceStream, FileAccess.Read)) { List <ZipStorer.ZipFileEntry> list = zipStorer.ReadCentralDirectory(); foreach (ZipStorer.ZipFileEntry current in list) { string path = current.FilenameInZip.Replace('/', Path.DirectorySeparatorChar); string destinationFileName = Path.Combine(text2, path); zipStorer.ExtractFile(current, destinationFileName); } } string path2 = FirefoxExtension.ReadIdFromInstallRdf(text2); string text3 = Path.Combine(Path.Combine(profileDirectory, "extensions"), path2); if (Directory.Exists(text3)) { Directory.Delete(text3, true); } Directory.CreateDirectory(text3); FileUtilities.CopyDirectory(text2, text3); FileUtilities.DeleteDirectory(text); }
/// <summary> /// Installs the extension into a profile directory. /// </summary> /// <param name="profileDir">The Firefox profile directory into which to install the extension.</param> public void Install(string profileDir) { string tempFileName = Path.Combine(Path.GetTempPath(), this.extensionFileName); if (Directory.Exists(tempFileName)) { Directory.Delete(tempFileName, true); } // First, expand the .xpi archive into a temporary location. Directory.CreateDirectory(tempFileName); Stream zipFileStream = ResourceUtilities.GetResourceStream(this.extensionFileName, this.extensionResourceId); using (ZipFile extensionZipFile = ZipFile.Read(zipFileStream)) { extensionZipFile.ExtractExistingFile = ExtractExistingFileAction.OverwriteSilently; extensionZipFile.ExtractAll(tempFileName); } // Then, copy the contents of the temporarly location into the // proper location in the Firefox profile directory. string id = ReadIdFromInstallRdf(tempFileName); string extensionDirectory = Path.Combine(Path.Combine(profileDir, "extensions"), id); if (Directory.Exists(extensionDirectory)) { Directory.Delete(extensionDirectory, true); } Directory.CreateDirectory(extensionDirectory); FileUtilities.CopyDirectory(tempFileName, extensionDirectory); Directory.Delete(tempFileName, true); }
/// <summary> /// Installs the WebDriver Safari extension. /// </summary> public void Install() { if (this.skipExtensionInstallation) { return; } this.BackupSafariSettings(); string installLocation = Path.Combine(GetSafariExtensionsDirectory(), ExtensionInstalledFileName); if (!string.IsNullOrEmpty(this.extensionSourcePath) && File.Exists(this.extensionSourcePath)) { // Use File.Copy when possible, as it's *much* faster than using Streams. File.Copy(this.extensionSourcePath, installLocation, true); } else { using (Stream extensionStream = ResourceUtilities.GetResourceStream(ExtensionFileName, ExtensionResourceId)) { using (FileStream outputStream = new FileStream(installLocation, FileMode.Create, FileAccess.Write)) { byte[] buffer = new byte[4096]; int bytesRead = extensionStream.Read(buffer, 0, buffer.Length); while (bytesRead > 0) { outputStream.Write(buffer, 0, bytesRead); bytesRead = extensionStream.Read(buffer, 0, buffer.Length); } } } } WritePropertyListFile(); }
private void InstallExtension() { string tempFileName = Path.Combine(Path.GetTempPath(), "webdriver"); if (Directory.Exists(tempFileName)) { Directory.Delete(tempFileName, true); } Directory.CreateDirectory(tempFileName); Stream zipFileStream = ResourceUtilities.GetResourceStream(ExtensionFileName, ExtensionResourceId); using (ZipFile extensionZipFile = ZipFile.Read(zipFileStream)) { extensionZipFile.ExtractExistingFile = ExtractExistingFileAction.OverwriteSilently; extensionZipFile.ExtractAll(tempFileName); } string id = ReadIdFromInstallRdf(tempFileName); string extensionDirectory = Path.Combine(extensionsDir, id); if (Directory.Exists(extensionDirectory)) { Directory.Delete(extensionDirectory, true); } Directory.CreateDirectory(extensionDirectory); CopyDirectory(tempFileName, extensionDirectory); Directory.Delete(tempFileName, true); }
private static string ReadScript(string script) { string extractedScript = string.Empty; Stream resourceStream = ResourceUtilities.GetResourceStream(script, script); using (TextReader reader = new StreamReader(resourceStream)) { extractedScript = reader.ReadToEnd(); } return(extractedScript); }
/// <summary> /// Prevents a default instance of the <see cref="RelativeBy"/> class. /// </summary> protected RelativeBy() : base() { string atom = string.Empty; using (Stream atomStream = ResourceUtilities.GetResourceStream("find-elements.js", "find-elements.js")) { using (StreamReader atomReader = new StreamReader(atomStream)) { atom = atomReader.ReadToEnd(); } } wrappedAtom = string.Format(CultureInfo.InvariantCulture, "return ({0}).apply(null, arguments);", atom); }
private string GetMutationListenerScript() { string listenerScript = string.Empty; using (Stream resourceStream = ResourceUtilities.GetResourceStream("mutation-listener.js", "mutation-listener.js")) { using (StreamReader resourceReader = new StreamReader(resourceStream)) { listenerScript = resourceReader.ReadToEnd(); } } return(listenerScript); }
private void ReadDefaultPreferences() { using (Stream defaultPrefsStream = ResourceUtilities.GetResourceStream("webdriver.json", "WebDriver.FirefoxPreferences")) { using (StreamReader reader = new StreamReader(defaultPrefsStream)) { string defaultPreferences = reader.ReadToEnd(); Dictionary <string, object> deserializedPreferences = JsonConvert.DeserializeObject <Dictionary <string, object> >(defaultPreferences, new ResponseValueJsonConverter()); Dictionary <string, object> immutableDefaultPreferences = deserializedPreferences["frozen"] as Dictionary <string, object>; Dictionary <string, object> editableDefaultPreferences = deserializedPreferences["mutable"] as Dictionary <string, object>; this.profilePreferences = new Preferences(immutableDefaultPreferences, editableDefaultPreferences); } } }
private void ExtractNativeLibrary() { string nativeLibraryFolderName = string.Format(CultureInfo.InvariantCulture, "webdriver{0}libs", tempFileGenerator.Next()); string nativeLibraryDirectory = Path.Combine(Path.GetTempPath(), nativeLibraryFolderName); if (!Directory.Exists(nativeLibraryDirectory)) { Directory.CreateDirectory(nativeLibraryDirectory); } this.nativeLibraryPath = Path.Combine(nativeLibraryDirectory, LibraryName); string resourceName = GetNativeLibraryResourceName(); Stream libraryStream = ResourceUtilities.GetResourceStream(LibraryName, resourceName); this.WriteNativeLibraryFile(libraryStream); }
private static string GetAtom(string atomResourceName) { string atom = string.Empty; using (Stream atomStream = ResourceUtilities.GetResourceStream(atomResourceName, atomResourceName)) { using (StreamReader atomReader = new StreamReader(atomStream)) { atom = atomReader.ReadToEnd(); } } string wrappedAtom = string.Format(CultureInfo.InvariantCulture, "return ({0}).apply(null, arguments);", atom); return(wrappedAtom); }
private static string ExtractAndCheck(FirefoxProfile profile, string noFocusSoName, string libraryPath32Bit, string libraryPath64Bit) { //// 1. Extract x86/x_ignore_nofocus.so to profile.getLibsDir32bit //// 2. Extract amd64/x_ignore_nofocus.so to profile.getLibsDir64bit //// 3. Create a new LD_LIB_PATH string to contain: //// profile.getLibsDir32bit + ":" + profile.getLibsDir64bit List <string> pathsSet = new List <string>(); pathsSet.Add(libraryPath32Bit); pathsSet.Add(libraryPath64Bit); StringBuilder builtPath = new StringBuilder(); foreach (string path in pathsSet) { string outSoPath = Path.Combine(profile.ProfileDirectory, path); string file = Path.Combine(outSoPath, noFocusSoName); string resourceName = string.Format(CultureInfo.InvariantCulture, "WebDriver.FirefoxNoFocus.{0}.dll", path); if (ResourceUtilities.IsValidResourceName(resourceName)) { using (Stream libraryStream = ResourceUtilities.GetResourceStream(noFocusSoName, resourceName)) { Directory.CreateDirectory(outSoPath); using (FileStream outputStream = File.Create(file)) { byte[] buffer = new byte[1000]; int bytesRead = libraryStream.Read(buffer, 0, buffer.Length); while (bytesRead > 0) { outputStream.Write(buffer, 0, bytesRead); bytesRead = libraryStream.Read(buffer, 0, buffer.Length); } } } } if (!File.Exists(file)) { throw new WebDriverException("Could not locate " + path + ": " + "native events will not work."); } builtPath.Append(outSoPath).Append(Path.PathSeparator); } return(builtPath.ToString()); }
private void ReadDefaultPreferences() { using (Stream resourceStream = ResourceUtilities.GetResourceStream("webdriver.json", "WebDriver.FirefoxPreferences")) { using (StreamReader streamReader = new StreamReader(resourceStream)) { string value = streamReader.ReadToEnd(); Dictionary <string, object> dictionary = JsonConvert.DeserializeObject <Dictionary <string, object> >(value, new JsonConverter[] { new ResponseValueJsonConverter() }); Dictionary <string, object> defaultImmutablePreferences = dictionary["frozen"] as Dictionary <string, object>; Dictionary <string, object> defaultPreferences = dictionary["mutable"] as Dictionary <string, object>; this.profilePreferences = new Preferences(defaultImmutablePreferences, defaultPreferences); } } }
private static PianoAnnotationSource GetAnnotationSource(string resourcePath) { if (resourcePath == null) { return(null); } var ndbPath = $"UnitTests.Resources.{resourcePath}.ndb"; var refPath = $"UnitTests.Resources.{resourcePath}.bases"; var ndbStream = ResourceUtilities.GetResourceStream(ndbPath); var refStream = ResourceUtilities.GetResourceStream(refPath); var compressedSequence = new CompressedSequence(); var compressedSequenceReader = new CompressedSequenceReader(refStream, compressedSequence); return(new PianoAnnotationSource(ndbStream, compressedSequenceReader)); }
/// <summary> /// Installs the extension into a profile directory. /// </summary> /// <param name="profileDirectory">The Firefox profile directory into which to install the extension.</param> public void Install(string profileDirectory) { DirectoryInfo info = new DirectoryInfo(profileDirectory); string stagingDirectoryName = Path.Combine(Path.GetTempPath(), info.Name + ".staging"); string tempFileName = Path.Combine(stagingDirectoryName, Path.GetFileName(this.extensionFileName)); if (Directory.Exists(tempFileName)) { Directory.Delete(tempFileName, true); } // First, expand the .xpi archive into a temporary location. Directory.CreateDirectory(tempFileName); Stream zipFileStream = ResourceUtilities.GetResourceStream(this.extensionFileName, this.extensionResourceId); using (ZipStorer extensionZipFile = ZipStorer.Open(zipFileStream, FileAccess.Read)) { List <ZipStorer.ZipFileEntry> entryList = extensionZipFile.ReadCentralDirectory(); foreach (ZipStorer.ZipFileEntry entry in entryList) { string localFileName = entry.FilenameInZip.Replace('/', Path.DirectorySeparatorChar); string destinationFile = Path.Combine(tempFileName, localFileName); extensionZipFile.ExtractFile(entry, destinationFile); } } // Then, copy the contents of the temporarly location into the // proper location in the Firefox profile directory. string id = ReadIdFromInstallRdf(tempFileName); string extensionDirectory = Path.Combine(Path.Combine(profileDirectory, "extensions"), id); if (Directory.Exists(extensionDirectory)) { Directory.Delete(extensionDirectory, true); } Directory.CreateDirectory(extensionDirectory); FileUtilities.CopyDirectory(tempFileName, extensionDirectory); // By deleting the staging directory, we also delete the temporarily // expanded extension, which we copied into the profile. FileUtilities.DeleteDirectory(stagingDirectoryName); }
private static string ExtractAndCheck(FirefoxProfile profile, string noFocusSoName, string libraryPath32Bit, string libraryPath64Bit) { List <string> list = new List <string>(); list.Add(libraryPath32Bit); list.Add(libraryPath64Bit); StringBuilder stringBuilder = new StringBuilder(); foreach (string current in list) { string text = Path.Combine(profile.ProfileDirectory, current); string path = Path.Combine(text, noFocusSoName); string resourceId = string.Format(CultureInfo.InvariantCulture, "WebDriver.FirefoxNoFocus.{0}.dll", new object[] { current }); if (ResourceUtilities.IsValidResourceName(resourceId)) { using (Stream resourceStream = ResourceUtilities.GetResourceStream(noFocusSoName, resourceId)) { Directory.CreateDirectory(text); using (FileStream fileStream = File.Create(path)) { byte[] array = new byte[1000]; for (int i = resourceStream.Read(array, 0, array.Length); i > 0; i = resourceStream.Read(array, 0, array.Length)) { fileStream.Write(array, 0, i); } } } } if (!File.Exists(path)) { throw new WebDriverException("Could not locate " + current + ": native events will not work."); } stringBuilder.Append(text).Append(Path.PathSeparator); } return(stringBuilder.ToString()); }
/// <summary> /// Installs the extension into a profile directory. /// </summary> /// <param name="profileDirectory">The Firefox profile directory into which to install the extension.</param> public void Install(string profileDirectory) { DirectoryInfo info = new DirectoryInfo(profileDirectory); string stagingDirectoryName = Path.Combine(Path.GetTempPath(), info.Name + ".staging"); string tempFileName = Path.Combine(stagingDirectoryName, Path.GetFileName(this.extensionFileName)); if (Directory.Exists(tempFileName)) { Directory.Delete(tempFileName, true); } // First, expand the .xpi archive into a temporary location. Directory.CreateDirectory(tempFileName); Stream zipFileStream = ResourceUtilities.GetResourceStream(this.extensionFileName, this.extensionResourceId); using (ZipArchive extensionZipArchive = new ZipArchive(zipFileStream, ZipArchiveMode.Read)) { extensionZipArchive.ExtractToDirectory(tempFileName); } // Then, copy the contents of the temporarly location into the // proper location in the Firefox profile directory. string id = GetExtensionId(tempFileName); string extensionDirectory = Path.Combine(Path.Combine(profileDirectory, "extensions"), id); if (Directory.Exists(extensionDirectory)) { Directory.Delete(extensionDirectory, true); } Directory.CreateDirectory(extensionDirectory); FileUtilities.CopyDirectory(tempFileName, extensionDirectory); // By deleting the staging directory, we also delete the temporarily // expanded extension, which we copied into the profile. FileUtilities.DeleteDirectory(stagingDirectoryName); }