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="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); }
public static FirefoxProfile FromBase64String(string base64) { string text = FileUtilities.GenerateRandomTempDirectoryName("webdriver.{0}.duplicated"); byte[] buffer = Convert.FromBase64String(base64); using (MemoryStream memoryStream = new MemoryStream(buffer)) { using (ZipStorer zipStorer = ZipStorer.Open(memoryStream, 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(text, path); zipStorer.ExtractFile(current, destinationFileName); } } } return(new FirefoxProfile(text, true)); }
/// <summary> /// Converts a base64-encoded string into a <see cref="FirefoxProfile"/>. /// </summary> /// <param name="base64">The base64-encoded string containing the profile contents.</param> /// <returns>The constructed <see cref="FirefoxProfile"/>.</returns> public static FirefoxProfile FromBase64String(string base64) { string destinationDirectory = FileUtilities.GenerateRandomTempDirectoryName("webdriver.{0}.duplicated"); byte[] zipContent = Convert.FromBase64String(base64); using (MemoryStream zipStream = new MemoryStream(zipContent)) { using (ZipStorer profileZipArchive = ZipStorer.Open(zipStream, FileAccess.Read)) { List <ZipStorer.ZipFileEntry> entryList = profileZipArchive.ReadCentralDirectory(); foreach (ZipStorer.ZipFileEntry entry in entryList) { string fileName = entry.FilenameInZip.Replace('/', Path.DirectorySeparatorChar); string destinationFile = Path.Combine(destinationDirectory, fileName); profileZipArchive.ExtractFile(entry, destinationFile); } } } return(new FirefoxProfile(destinationDirectory, true)); }