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);
        }
Beispiel #2
0
        /// <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));
        }
Beispiel #4
0
        /// <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));
        }