Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(871)

Unified Diff: tools/privacy_whitepaper/environment.py

Issue 2008283002: Tool to generate screenshots of Chrome in various languages Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 4 years, 7 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: tools/privacy_whitepaper/environment.py
diff --git a/tools/privacy_whitepaper/environment.py b/tools/privacy_whitepaper/environment.py
new file mode 100644
index 0000000000000000000000000000000000000000..d89dc195a5d8575807bb75c0111c4a6c52077eb8
--- /dev/null
+++ b/tools/privacy_whitepaper/environment.py
@@ -0,0 +1,139 @@
+# Copyright 2016 The Chromium Authors. All rights reserved.
+# Use of this source code is governed by a BSD-style license that can be
+# found in the LICENSE file.
+
+"""The screenshot generation Environment class.
+
+It holds the ScreenshotGenerator instances and executes them.
+"""
+
+import glob
+import json
+import os
+import pyautogui
+import shutil
+import time
+
+from selenium import webdriver
+from selenium.webdriver.chrome.options import Options
+
+class Environment:
+ """Sets up the Environment. """
+
+ def __init__(self, chrome_path, chromedriver_path, profile_path, output_path,
+ safebrowsing_path, language, is_rtl_language):
+ """Creates a new Environment, starts Chromedriver.
+
+ Args:
+ chrome_path: The chrome binary file.
+ chromedriver_path: The chromedriver binary file.
+ profile_path: The chrome testing profile folder.
+ output_path: Path into which screenshots are written.
+ safebrowsing_path: Path to a Chrome profile that contains a SafeBrowsing
+ database.
+ language: Language used by Chrome.
+ is_rtl_language: Whether the language is a right-to-left language.
+ """
+ self.chrome_path = chrome_path
+ self.chromedriver_path = chromedriver_path
+ self.profile_path = profile_path
+ self.output_path = output_path
+ self.safebrowsing_path = safebrowsing_path
+ self.language = language
+ self.is_rtl_language = is_rtl_language
+ self.screenshot_generators = []
+ self.downloads_path = os.path.join(self.profile_path, "Downloads")
+ self.downloads_path = os.path.join(self.profile_path, "Downloads")
+ self.screenshot_generators = []
+ # These are initialized in Start():
+ self.driver = None
+ self.website_window = None
+
+ def Start(self):
+ """Starts Chromedriver."""
+ # Cleaning the chrome testing profile folder.
+ if os.path.exists(self.profile_path):
+ shutil.rmtree(self.profile_path)
+ os.mkdir(self.profile_path)
+ os.mkdir(os.path.join(self.profile_path, "Default"))
+
+ # Copy Safe Browsing database from an existing profile for re-use.
+ if self.safebrowsing_path:
+ for f in glob.glob(os.path.join(self.safebrowsing_path,
+ "Safe Browsing*")):
+ shutil.copy(f, self.profile_path)
+
+ # Initialize Default/Preferences.
+ preferences = json.dumps({
+ "browser": {"custom_chrome_frame": True},
+ "download": {"default_directory": self.downloads_path},
+ "safebrowsing": {"enabled": True},
+ "translate": {"enabled": True},
+ "profile": {"default_content_setting_values": {"geolocation": 1}},
+ "search": {"suggest_enabled": True},
+ })
+ with open(os.path.join(self.profile_path, "Default", "Preferences"),
+ "w") as f:
+ f.write(preferences)
+
+ # Initialize Local State.
+ preferences = json.dumps({
+ "user_experience_metrics": {"reporting_enabled": True},
+ })
+ with open(os.path.join(self.profile_path, "Local State"), "w") as f:
+ f.write(preferences)
+
+ # Set OS environment so that Chrome starts int he right language.
+ os.environ['LANGUAGE'] = self.language
+
+ options = Options()
+ options.binary_location = self.chrome_path
+ options.add_argument("user-data-dir=%s" % self.profile_path)
+
+ self.driver = webdriver.Chrome(self.chromedriver_path, 0, options)
+
+ # Always run at fixed window size to simplify screenshot creation.
+ self.driver.set_window_position(0, 0)
+ self.driver.set_window_size(800, 800)
+
+ self.website_window = self.driver.current_window_handle
+
+ def HideChromeDriverIcon(self):
+ if self.is_rtl_language:
+ pyautogui.click(x = 57, y = 62)
+ else:
+ pyautogui.click(x = 746, y = 62)
melandory 2016/05/30 13:51:49 nit: pyautogui.click( x = 57 if self.is_rtl_langua
+ time.sleep(1)
+ if self.is_rtl_language:
+ pyautogui.click(x = 135, y = 176)
+ else:
+ pyautogui.click(x = 817, y = 176)
+ pyautogui.moveTo(x = 1000, y = 1000)
+
+
+ def AddScreenshotGenerator(self, screenshot_generator):
+ """Adds a screenshot_generator to the execution Environment.
+
+ Args:
+ screenshot_generator: The ScreenshotGenerator instance to be added.
+ """
+
+ screenshot_generator.environment = self
+ self.screenshot_generators.append(screenshot_generator)
+
+
+ def GenerateScreenshots(self):
+ """Generates the screenshots."""
+
+ for generator in self.screenshot_generators:
+ self.Start()
+ self.HideChromeDriverIcon()
+ generator.driver = self.driver
+ generator.Execute()
+ self.Quit()
+
+
+ def Quit(self):
+ """Shuts down the driver."""
+
+ self.driver.quit()

Powered by Google App Engine
This is Rietveld 408576698