<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN"
"http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head><meta http-equiv="content-type" content="text/html; charset=utf-8" />
<title>[287289] trunk/Tools</title>
</head>
<body>

<style type="text/css"><!--
#msg dl.meta { border: 1px #006 solid; background: #369; padding: 6px; color: #fff; }
#msg dl.meta dt { float: left; width: 6em; font-weight: bold; }
#msg dt:after { content:':';}
#msg dl, #msg dt, #msg ul, #msg li, #header, #footer, #logmsg { font-family: verdana,arial,helvetica,sans-serif; font-size: 10pt;  }
#msg dl a { font-weight: bold}
#msg dl a:link    { color:#fc3; }
#msg dl a:active  { color:#ff0; }
#msg dl a:visited { color:#cc6; }
h3 { font-family: verdana,arial,helvetica,sans-serif; font-size: 10pt; font-weight: bold; }
#msg pre { overflow: auto; background: #ffc; border: 1px #fa0 solid; padding: 6px; }
#logmsg { background: #ffc; border: 1px #fa0 solid; padding: 1em 1em 0 1em; }
#logmsg p, #logmsg pre, #logmsg blockquote { margin: 0 0 1em 0; }
#logmsg p, #logmsg li, #logmsg dt, #logmsg dd { line-height: 14pt; }
#logmsg h1, #logmsg h2, #logmsg h3, #logmsg h4, #logmsg h5, #logmsg h6 { margin: .5em 0; }
#logmsg h1:first-child, #logmsg h2:first-child, #logmsg h3:first-child, #logmsg h4:first-child, #logmsg h5:first-child, #logmsg h6:first-child { margin-top: 0; }
#logmsg ul, #logmsg ol { padding: 0; list-style-position: inside; margin: 0 0 0 1em; }
#logmsg ul { text-indent: -1em; padding-left: 1em; }#logmsg ol { text-indent: -1.5em; padding-left: 1.5em; }
#logmsg > ul, #logmsg > ol { margin: 0 0 1em 0; }
#logmsg pre { background: #eee; padding: 1em; }
#logmsg blockquote { border: 1px solid #fa0; border-left-width: 10px; padding: 1em 1em 0 1em; background: white;}
#logmsg dl { margin: 0; }
#logmsg dt { font-weight: bold; }
#logmsg dd { margin: 0; padding: 0 0 0.5em 0; }
#logmsg dd:before { content:'\00bb';}
#logmsg table { border-spacing: 0px; border-collapse: collapse; border-top: 4px solid #fa0; border-bottom: 1px solid #fa0; background: #fff; }
#logmsg table th { text-align: left; font-weight: normal; padding: 0.2em 0.5em; border-top: 1px dotted #fa0; }
#logmsg table td { text-align: right; border-top: 1px dotted #fa0; padding: 0.2em 0.5em; }
#logmsg table thead th { text-align: center; border-bottom: 1px solid #fa0; }
#logmsg table th.Corner { text-align: left; }
#logmsg hr { border: none 0; border-top: 2px dashed #fa0; height: 1px; }
#header, #footer { color: #fff; background: #636; border: 1px #300 solid; padding: 6px; }
#patch { width: 100%; }
#patch h4 {font-family: verdana,arial,helvetica,sans-serif;font-size:10pt;padding:8px;background:#369;color:#fff;margin:0;}
#patch .propset h4, #patch .binary h4 {margin:0;}
#patch pre {padding:0;line-height:1.2em;margin:0;}
#patch .diff {width:100%;background:#eee;padding: 0 0 10px 0;overflow:auto;}
#patch .propset .diff, #patch .binary .diff  {padding:10px 0;}
#patch span {display:block;padding:0 10px;}
#patch .modfile, #patch .addfile, #patch .delfile, #patch .propset, #patch .binary, #patch .copfile {border:1px solid #ccc;margin:10px 0;}
#patch ins {background:#dfd;text-decoration:none;display:block;padding:0 10px;}
#patch del {background:#fdd;text-decoration:none;display:block;padding:0 10px;}
#patch .lines, .info {color:#888;background:#fff;}
--></style>
<div id="msg">
<dl class="meta">
<dt>Revision</dt> <dd><a href="http://trac.webkit.org/projects/webkit/changeset/287289">287289</a></dd>
<dt>Author</dt> <dd>dewei_zhu@apple.com</dd>
<dt>Date</dt> <dd>2021-12-20 17:19:32 -0800 (Mon, 20 Dec 2021)</dd>
</dl>

<h3>Log Message</h3>
<pre>'run-benchmark' should launch browsers in a relative clean state.
https://bugs.webkit.org/show_bug.cgi?id=234107

Reviewed by Stephanie Lewis.

Add code to ensure Chrome and Firefox launches in a relative clean state.
Refactor browser drivers for macOS Chrome and Firefox to share more code.

* Scripts/webkitpy/benchmark_runner/browser_driver/osx_chrome_driver.py:
Added '--no-first-run', '--no-default-browser-check', '--disable-extensions' flags.
(OSXChromeDriverBase):
(OSXChromeDriverBase.launch_url):
(OSXChromeDriverBase.launch_driver):
(OSXChromeDriverBase._create_chrome_options):
(OSXChromeDriverBase._window_size_arg):
(OSXChromeDriverBase._set_chrome_binary_location):
(OSXChromeDriver):
(OSXChromeDriver._set_chrome_binary_location):
(OSXChromeCanaryDriver._set_chrome_binary_location):
(OSXChromeDriver.launch_url): Deleted.
(OSXChromeDriver.launch_driver): Deleted.
(OSXChromeCanaryDriver.launch_url): Deleted.
(OSXChromeCanaryDriver.launch_driver): Deleted.
(create_args): Deleted.
(create_chrome_options): Deleted.
(create_window_size_arg): Deleted.
* Scripts/webkitpy/benchmark_runner/browser_driver/osx_firefox_driver.py:
Added code to use profiles to suppress default browser check and privacy notice tab.
(OSXFirefoxDriverBase):
(OSXFirefoxDriverBase.__init__):
(OSXFirefoxDriverBase.prepare_env):
(OSXFirefoxDriverBase.restore_env):
(OSXFirefoxDriverBase.launch_url):
(OSXFirefoxDriverBase.launch_driver):
(OSXFirefoxDriverBase._setup_temporary_profile_directory):
(OSXFirefoxDriverBase._teardown_temporary_profile_directory):
(OSXFirefoxDriverBase._set_firefox_binary_location):
(OSXFirefoxDriver):
(OSXFirefoxDriver._set_firefox_binary_location):
(OSXFirefoxNightlyDriver):
(OSXFirefoxNightlyDriver._set_firefox_binary_location):
(OSXFirefoxDriver.launch_url): Deleted.
(OSXFirefoxDriver.launch_driver): Deleted.
(OSXFirefoxNightlyDriver.launch_url): Deleted.
(OSXFirefoxNightlyDriver.launch_driver): Deleted.
(create_args): Deleted.
* Scripts/webkitpy/benchmark_runner/data/firefox_profile/user.js: Added user preferences
so that Firefox can be launched without checking default browser and privacy notice.</pre>

<h3>Modified Paths</h3>
<ul>
<li><a href="#trunkToolsChangeLog">trunk/Tools/ChangeLog</a></li>
<li><a href="#trunkToolsScriptswebkitpybenchmark_runnerbrowser_driverosx_chrome_driverpy">trunk/Tools/Scripts/webkitpy/benchmark_runner/browser_driver/osx_chrome_driver.py</a></li>
<li><a href="#trunkToolsScriptswebkitpybenchmark_runnerbrowser_driverosx_firefox_driverpy">trunk/Tools/Scripts/webkitpy/benchmark_runner/browser_driver/osx_firefox_driver.py</a></li>
</ul>

<h3>Added Paths</h3>
<ul>
<li>trunk/Tools/Scripts/webkitpy/benchmark_runner/data/firefox_profile/</li>
<li><a href="#trunkToolsScriptswebkitpybenchmark_runnerdatafirefox_profileuserjs">trunk/Tools/Scripts/webkitpy/benchmark_runner/data/firefox_profile/user.js</a></li>
</ul>

</div>
<div id="patch">
<h3>Diff</h3>
<a id="trunkToolsChangeLog"></a>
<div class="modfile"><h4>Modified: trunk/Tools/ChangeLog (287288 => 287289)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Tools/ChangeLog    2021-12-21 00:33:43 UTC (rev 287288)
+++ trunk/Tools/ChangeLog       2021-12-21 01:19:32 UTC (rev 287289)
</span><span class="lines">@@ -1,3 +1,54 @@
</span><ins>+2021-12-20  Dewei Zhu  <dewei_zhu@apple.com>
+
+        'run-benchmark' should launch browsers in a relative clean state.
+        https://bugs.webkit.org/show_bug.cgi?id=234107
+
+        Reviewed by Stephanie Lewis.
+
+        Add code to ensure Chrome and Firefox launches in a relative clean state.
+        Refactor browser drivers for macOS Chrome and Firefox to share more code.
+
+        * Scripts/webkitpy/benchmark_runner/browser_driver/osx_chrome_driver.py:
+        Added '--no-first-run', '--no-default-browser-check', '--disable-extensions' flags.
+        (OSXChromeDriverBase):
+        (OSXChromeDriverBase.launch_url):
+        (OSXChromeDriverBase.launch_driver):
+        (OSXChromeDriverBase._create_chrome_options):
+        (OSXChromeDriverBase._window_size_arg):
+        (OSXChromeDriverBase._set_chrome_binary_location):
+        (OSXChromeDriver):
+        (OSXChromeDriver._set_chrome_binary_location):
+        (OSXChromeCanaryDriver._set_chrome_binary_location):
+        (OSXChromeDriver.launch_url): Deleted.
+        (OSXChromeDriver.launch_driver): Deleted.
+        (OSXChromeCanaryDriver.launch_url): Deleted.
+        (OSXChromeCanaryDriver.launch_driver): Deleted.
+        (create_args): Deleted.
+        (create_chrome_options): Deleted.
+        (create_window_size_arg): Deleted.
+        * Scripts/webkitpy/benchmark_runner/browser_driver/osx_firefox_driver.py:
+        Added code to use profiles to suppress default browser check and privacy notice tab.
+        (OSXFirefoxDriverBase):
+        (OSXFirefoxDriverBase.__init__):
+        (OSXFirefoxDriverBase.prepare_env):
+        (OSXFirefoxDriverBase.restore_env):
+        (OSXFirefoxDriverBase.launch_url):
+        (OSXFirefoxDriverBase.launch_driver):
+        (OSXFirefoxDriverBase._setup_temporary_profile_directory):
+        (OSXFirefoxDriverBase._teardown_temporary_profile_directory):
+        (OSXFirefoxDriverBase._set_firefox_binary_location):
+        (OSXFirefoxDriver):
+        (OSXFirefoxDriver._set_firefox_binary_location):
+        (OSXFirefoxNightlyDriver):
+        (OSXFirefoxNightlyDriver._set_firefox_binary_location):
+        (OSXFirefoxDriver.launch_url): Deleted.
+        (OSXFirefoxDriver.launch_driver): Deleted.
+        (OSXFirefoxNightlyDriver.launch_url): Deleted.
+        (OSXFirefoxNightlyDriver.launch_driver): Deleted.
+        (create_args): Deleted.
+        * Scripts/webkitpy/benchmark_runner/data/firefox_profile/user.js: Added user preferences
+        so that Firefox can be launched without checking default browser and privacy notice.
+
</ins><span class="cx"> 2021-12-20  J Pascoe  <j_pascoe@apple.com>
</span><span class="cx"> 
</span><span class="cx">         [WebAuthn] Add option to change requestWebAuthenticationNoGesture delegate for api tests.
</span></span></pre></div>
<a id="trunkToolsScriptswebkitpybenchmark_runnerbrowser_driverosx_chrome_driverpy"></a>
<div class="modfile"><h4>Modified: trunk/Tools/Scripts/webkitpy/benchmark_runner/browser_driver/osx_chrome_driver.py (287288 => 287289)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Tools/Scripts/webkitpy/benchmark_runner/browser_driver/osx_chrome_driver.py        2021-12-21 00:33:43 UTC (rev 287288)
+++ trunk/Tools/Scripts/webkitpy/benchmark_runner/browser_driver/osx_chrome_driver.py   2021-12-21 01:19:32 UTC (rev 287289)
</span><span class="lines">@@ -9,30 +9,55 @@
</span><span class="cx"> _log = logging.getLogger(__name__)
</span><span class="cx"> 
</span><span class="cx"> 
</span><del>-class OSXChromeDriver(OSXBrowserDriver):
-    process_name = 'Google Chrome'
-    browser_name = 'chrome'
-    app_name = 'Google Chrome.app'
-    bundle_id = 'com.google.Chrome'
</del><ins>+class OSXChromeDriverBase(OSXBrowserDriver):
+    app_name = None
</ins><span class="cx"> 
</span><span class="cx">     def launch_url(self, url, options, browser_build_path, browser_path):
</span><span class="cx">         # FIXME: handle self._browser_path.
</span><del>-        args_with_url = self._insert_url(create_args(), 2, url)
</del><ins>+        args_with_url = ['--args', '--homepage', url, self._window_size_arg(), '--no-first-run',
+                         '--no-default-browser-check', '--disable-extensions']
</ins><span class="cx">         self._launch_process(build_dir=browser_build_path, app_name=self.app_name, url=url, args=args_with_url)
</span><span class="cx"> 
</span><span class="cx">     def launch_driver(self, url, options, browser_build_path):
</span><span class="cx">         from selenium import webdriver
</span><del>-        chrome_options = create_chrome_options()
-        if browser_build_path:
-            app_path = os.path.join(browser_build_path, self.app_name)
-            binary_path = os.path.join(app_path, "Contents/MacOS", self.process_name)
-            chrome_options.binary_location = binary_path
</del><ins>+        chrome_options = self._create_chrome_options(browser_build_path)
</ins><span class="cx">         driver_executable = self.webdriver_binary_path
</span><span class="cx">         driver = webdriver.Chrome(chrome_options=chrome_options, executable_path=driver_executable)
</span><span class="cx">         self._launch_webdriver(url=url, driver=driver)
</span><span class="cx">         return driver
</span><span class="cx"> 
</span><ins>+    def _create_chrome_options(self, browser_build_path):
+        from selenium.webdriver.chrome.options import Options
+        chrome_options = Options()
+        chrome_options.add_argument("--disable-web-security")
+        chrome_options.add_argument("--user-data-dir")
+        chrome_options.add_argument("--disable-extensions")
+        chrome_options.add_argument(self._window_size_arg())
+        self._set_chrome_binary_location(chrome_options, browser_build_path)
+        return chrome_options
</ins><span class="cx"> 
</span><ins>+    def _window_size_arg(self):
+        screen_size = self._screen_size()
+        return '--window-size={width},{height}'.format(width=int(screen_size.width), height=int(screen_size.height))
+
+    def _set_chrome_binary_location(self, options, browser_build_path):
+        pass
+
+
+class OSXChromeDriver(OSXChromeDriverBase):
+    process_name = 'Google Chrome'
+    browser_name = 'chrome'
+    app_name = 'Google Chrome.app'
+    bundle_id = 'com.google.Chrome'
+
+    def _set_chrome_binary_location(self, options, browser_build_path):
+        if not browser_build_path:
+            return
+        app_path = os.path.join(browser_build_path, self.app_name)
+        binary_path = os.path.join(app_path, "Contents/MacOS", self.process_name)
+        options.binary_location = binary_path
+
+
</ins><span class="cx"> class OSXChromeCanaryDriver(OSXBrowserDriver):
</span><span class="cx">     process_name = 'Google Chrome Canary'
</span><span class="cx">     browser_name = 'chrome-canary'
</span><span class="lines">@@ -39,40 +64,9 @@
</span><span class="cx">     app_name = 'Google Chrome Canary.app'
</span><span class="cx">     bundle_id = 'com.google.Chrome.canary'
</span><span class="cx"> 
</span><del>-    def launch_url(self, url, options, browser_build_path, browser_path):
-        # FIXME: handle self._browser_path.
-        args_with_url = self._insert_url(create_args(), 2, url)
-        self._launch_process(build_dir=browser_build_path, app_name=self.app_name, url=url, args=args_with_url)
-
-    def launch_driver(self, url, options, browser_build_path):
-        from selenium import webdriver
-        chrome_options = create_chrome_options()
</del><ins>+    def _set_chrome_binary_location(self, options, browser_build_path):
</ins><span class="cx">         if not browser_build_path:
</span><span class="cx">             browser_build_path = '/Applications/'
</span><span class="cx">         app_path = os.path.join(browser_build_path, self.app_name)
</span><span class="cx">         binary_path = os.path.join(app_path, "Contents/MacOS", self.process_name)
</span><del>-        chrome_options.binary_location = binary_path
-        driver_executable = self.webdriver_binary_path
-        driver = webdriver.Chrome(chrome_options=chrome_options, executable_path=driver_executable)
-        self._launch_webdriver(url=url, driver=driver)
-        return driver
-
-
-def create_args():
-    args = ['--args', '--homepage', create_window_size_arg()]
-    return args
-
-
-def create_chrome_options():
-    from selenium.webdriver.chrome.options import Options
-    chrome_options = Options()
-    chrome_options.add_argument("--disable-web-security")
-    chrome_options.add_argument("--user-data-dir")
-    chrome_options.add_argument("--disable-extensions")
-    chrome_options.add_argument(create_window_size_arg())
-    return chrome_options
-
-
-def create_window_size_arg():
-    window_size_arg = '--window-size={width},{height}'.format(width=int(OSXBrowserDriver._screen_size().width), height=int(OSXBrowserDriver._screen_size().height))
-    return window_size_arg
</del><ins>+        options.binary_location = binary_path
</ins></span></pre></div>
<a id="trunkToolsScriptswebkitpybenchmark_runnerbrowser_driverosx_firefox_driverpy"></a>
<div class="modfile"><h4>Modified: trunk/Tools/Scripts/webkitpy/benchmark_runner/browser_driver/osx_firefox_driver.py (287288 => 287289)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Tools/Scripts/webkitpy/benchmark_runner/browser_driver/osx_firefox_driver.py       2021-12-21 00:33:43 UTC (rev 287288)
+++ trunk/Tools/Scripts/webkitpy/benchmark_runner/browser_driver/osx_firefox_driver.py  2021-12-21 01:19:32 UTC (rev 287289)
</span><span class="lines">@@ -2,22 +2,38 @@
</span><span class="cx"> 
</span><span class="cx"> import logging
</span><span class="cx"> import os
</span><ins>+import shutil
+import tempfile
</ins><span class="cx"> 
</span><span class="cx"> from webkitpy.benchmark_runner.browser_driver.osx_browser_driver import OSXBrowserDriver
</span><span class="cx"> 
</span><span class="cx"> 
</span><span class="cx"> _log = logging.getLogger(__name__)
</span><ins>+test_profile_directory = os.path.join(os.path.dirname(__file__), '../data/firefox_profile/')
</ins><span class="cx"> 
</span><span class="cx"> 
</span><del>-class OSXFirefoxDriver(OSXBrowserDriver):
-    process_name = 'firefox'
-    browser_name = 'firefox'
-    app_name = 'Firefox.app'
-    bundle_id = 'org.mozilla.firefox'
</del><ins>+class OSXFirefoxDriverBase(OSXBrowserDriver):
+    app_name = None
</ins><span class="cx"> 
</span><ins>+    def __init__(self, *args, **kwargs):
+        super(OSXFirefoxDriverBase, self).__init__(*args, **kwargs)
+        self._profile_directory = None
+
+    def prepare_env(self, config):
+        super(OSXFirefoxDriverBase, self).prepare_env(config)
+        self._setup_temporary_profile_directory()
+
+    def restore_env(self):
+        super(OSXFirefoxDriverBase, self).restore_env()
+        self._teardown_temporary_profile_directory()
+
</ins><span class="cx">     def launch_url(self, url, options, browser_build_path, browser_path):
</span><span class="cx">         # FIXME: handle self._browser_path.
</span><del>-        args_with_url = self._insert_url(create_args(), 0, url)
</del><ins>+        screen_size = self._screen_size()
+        args_with_url = ['--args', '-width', str(int(screen_size.width)), '-height', str(int(screen_size.height))]
+        if self._profile_directory and os.path.exists(self._profile_directory):
+            args_with_url.extend(['--profile', self._profile_directory])
+        args_with_url.append(url)
</ins><span class="cx">         self._launch_process(build_dir=browser_build_path, app_name=self.app_name, url=url, args=args_with_url)
</span><span class="cx"> 
</span><span class="cx">     def launch_driver(self, url, options, browser_build_path):
</span><span class="lines">@@ -24,43 +40,47 @@
</span><span class="cx">         from selenium import webdriver
</span><span class="cx">         from selenium.webdriver.firefox.options import Options
</span><span class="cx">         firefox_options = Options()
</span><del>-        if browser_build_path:
-            app_path = os.path.join(browser_build_path, self.app_name)
-            binary_path = os.path.join(app_path, "Contents/MacOS", self.process_name)
-            firefox_options.binary_location = binary_path
</del><ins>+        self._set_firefox_binary_location(options, browser_build_path)
</ins><span class="cx">         driver_executable = self.webdriver_binary_path
</span><span class="cx">         driver = webdriver.Firefox(firefox_options=firefox_options, executable_path=driver_executable)
</span><span class="cx">         self._launch_webdriver(url=url, driver=driver)
</span><span class="cx">         return driver
</span><span class="cx"> 
</span><ins>+    def _setup_temporary_profile_directory(self):
+        self._profile_directory = os.path.join(tempfile.mkdtemp(), 'firefox_profile')
+        shutil.copytree(test_profile_directory, self._profile_directory)
</ins><span class="cx"> 
</span><del>-class OSXFirefoxNightlyDriver(OSXBrowserDriver):
</del><ins>+    def _teardown_temporary_profile_directory(self):
+        if self._profile_directory and os.path.exists(self._profile_directory):
+            shutil.rmtree(os.path.dirname(self._profile_directory))
+
+    def _set_firefox_binary_location(self, options, browser_build_path):
+        pass
+
+
+class OSXFirefoxDriver(OSXFirefoxDriverBase):
</ins><span class="cx">     process_name = 'firefox'
</span><ins>+    browser_name = 'firefox'
+    app_name = 'Firefox.app'
+    bundle_id = 'org.mozilla.firefox'
+
+    def _set_firefox_binary_location(self, options, browser_build_path):
+        if not browser_build_path:
+            return
+        app_path = os.path.join(browser_build_path, self.app_name)
+        binary_path = os.path.join(app_path, "Contents/MacOS", self.process_name)
+        options.binary_location = binary_path
+
+
+class OSXFirefoxNightlyDriver(OSXFirefoxDriverBase):
+    process_name = 'firefox'
</ins><span class="cx">     browser_name = 'firefox-nightly'
</span><span class="cx">     app_name = 'FirefoxNightly.app'
</span><span class="cx">     bundle_id = 'org.mozilla.firefox'
</span><span class="cx"> 
</span><del>-
-    def launch_url(self, url, options, browser_build_path, browser_path):
-        # FIXME: handle self._browser_path.
-        args_with_url = self._insert_url(create_args(), 0, url)
-        self._launch_process(build_dir=browser_build_path, app_name=self.app_name, url=url, args=args_with_url)
-
-    def launch_driver(self, url, options, browser_build_path):
-        from selenium import webdriver
-        from selenium.webdriver.firefox.options import Options
-        firefox_options = Options()
</del><ins>+    def _set_firefox_binary_location(self, options, browser_build_path):
</ins><span class="cx">         if not browser_build_path:
</span><span class="cx">             browser_build_path = '/Applications/'
</span><span class="cx">         app_path = os.path.join(browser_build_path, self.app_name)
</span><span class="cx">         binary_path = os.path.join(app_path, "Contents/MacOS", self.process_name)
</span><del>-        firefox_options.binary_location = binary_path
-        driver_executable = self.webdriver_binary_path
-        driver = webdriver.Firefox(firefox_options=firefox_options, executable_path=driver_executable)
-        self._launch_webdriver(url=url, driver=driver)
-        return driver
-
-
-def create_args():
-    args = ['--args', '-width', str(int(OSXBrowserDriver._screen_size().width)), '-height', str(int(OSXBrowserDriver._screen_size().height))]
-    return args
</del><ins>+        options.binary_location = binary_path
</ins></span></pre></div>
<a id="trunkToolsScriptswebkitpybenchmark_runnerdatafirefox_profileuserjs"></a>
<div class="addfile"><h4>Added: trunk/Tools/Scripts/webkitpy/benchmark_runner/data/firefox_profile/user.js (0 => 287289)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Tools/Scripts/webkitpy/benchmark_runner/data/firefox_profile/user.js                               (rev 0)
+++ trunk/Tools/Scripts/webkitpy/benchmark_runner/data/firefox_profile/user.js  2021-12-21 01:19:32 UTC (rev 287289)
</span><span class="lines">@@ -0,0 +1,9 @@
</span><ins>+user_pref("browser.shell.checkDefaultBrowser", false);
+user_pref("browser.startup.couldRestoreSession.count", -1);
+user_pref("browser.webapps.checkForUpdates", 0);
+user_pref("startup.homepage_welcome_url", "");
+user_pref("startup.homepage_welcome_url.additional", "");
+user_pref("app.update.checkInstallTime", false);
+user_pref("app.update.disabledForTesting", true);
+user_pref("extensions.update.enabled", false);
+user_pref("datareporting.policy.dataSubmissionPolicyBypassNotification", true);
</ins><span class="cx">\ No newline at end of file
</span></span></pre>
</div>
</div>

</body>
</html>