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

Side by Side Diff: tools/telemetry/telemetry/browser_credentials.py

Issue 12278015: [Telemetry] Reorganize everything. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Re-add shebangs. Created 7 years, 10 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 unified diff | Download patch | Annotate | Revision Log
OLDNEW
(Empty)
1 # Copyright (c) 2012 The Chromium Authors. All rights reserved.
2 # Use of this source code is governed by a BSD-style license that can be
3 # found in the LICENSE file.
4 import logging
5 import json
6 import os
7
8 from telemetry import facebook_credentials_backend
9 from telemetry import google_credentials_backend
10 from telemetry import options_for_unittests
11
12 class BrowserCredentials(object):
13 def __init__(self, backends = None):
14 self._credentials = {}
15 self._credentials_path = None
16 self._extra_credentials = {}
17
18 if backends is None:
19 backends = [
20 facebook_credentials_backend.FacebookCredentialsBackend(),
21 google_credentials_backend.GoogleCredentialsBackend()]
22
23 self._backends = {}
24 for backend in backends:
25 self._backends[backend.credentials_type] = backend
26
27 def AddBackend(self, backend):
28 assert backend.credentials_type not in self._backends
29 self._backends[backend.credentials_type] = backend
30
31 def IsLoggedIn(self, credentials_type):
32 if credentials_type not in self._backends:
33 raise Exception('Unrecognized credentials type: %s', credentials_type)
34 if credentials_type not in self._credentials:
35 return False
36 return self._backends[credentials_type].IsLoggedIn()
37
38 def CanLogin(self, credentials_type):
39 if credentials_type not in self._backends:
40 raise Exception('Unrecognized credentials type: %s', credentials_type)
41 return credentials_type in self._credentials
42
43 def LoginNeeded(self, tab, credentials_type):
44 if credentials_type not in self._backends:
45 raise Exception('Unrecognized credentials type: %s', credentials_type)
46 if credentials_type not in self._credentials:
47 return False
48 return self._backends[credentials_type].LoginNeeded(
49 tab, self._credentials[credentials_type])
50
51 def LoginNoLongerNeeded(self, tab, credentials_type):
52 assert credentials_type in self._backends
53 self._backends[credentials_type].LoginNoLongerNeeded(tab)
54
55 @property
56 def credentials_path(self):
57 return self._credentials_path
58
59 @credentials_path.setter
60 def credentials_path(self, credentials_path):
61 self._credentials_path = credentials_path
62 self._RebuildCredentials()
63
64 def Add(self, credentials_type, data):
65 if credentials_type not in self._extra_credentials:
66 self._extra_credentials[credentials_type] = {}
67 for k, v in data.items():
68 assert k not in self._extra_credentials[credentials_type]
69 self._extra_credentials[credentials_type][k] = v
70 self._RebuildCredentials()
71
72 def _ResetLoggedInState(self):
73 """Makes the backends think we're not logged in even though we are.
74 Should only be used in unit tests to simulate --dont-override-profile.
75 """
76 for backend in self._backends.keys():
77 self._backends[backend]._ResetLoggedInState() # pylint: disable=W0212
78
79 def _RebuildCredentials(self):
80 credentials = {}
81 if self._credentials_path == None:
82 pass
83 elif os.path.exists(self._credentials_path):
84 with open(self._credentials_path, 'r') as f:
85 credentials = json.loads(f.read())
86
87 # TODO(nduca): use system keychain, if possible.
88 homedir_credentials_path = os.path.expanduser('~/.telemetry-credentials')
89 homedir_credentials = {}
90
91 if (not options_for_unittests.GetCopy() and
92 os.path.exists(homedir_credentials_path)):
93 logging.info("Found ~/.telemetry-credentials. Its contents will be used "
94 "when no other credentials can be found.")
95 with open(homedir_credentials_path, 'r') as f:
96 homedir_credentials = json.loads(f.read())
97
98 self._credentials = {}
99 all_keys = set(credentials.keys()).union(
100 homedir_credentials.keys()).union(
101 self._extra_credentials.keys())
102
103 for k in all_keys:
104 if k in credentials:
105 self._credentials[k] = credentials[k]
106 if k in homedir_credentials:
107 logging.info("Will use ~/.telemetry-credentials for %s logins." % k)
108 self._credentials[k] = homedir_credentials[k]
109 if k in self._extra_credentials:
110 self._credentials[k] = self._extra_credentials[k]
111
112 def WarnIfMissingCredentials(self, page_set):
113 num_pages_missing_login = 0
114 missing_credentials = set()
115 for page in page_set:
116 if (page.credentials
117 and not self.CanLogin(page.credentials)):
118 num_pages_missing_login += 1
119 missing_credentials.add(page.credentials)
120
121 if num_pages_missing_login > 0:
122 files_to_tweak = []
123 if page_set.credentials_path:
124 files_to_tweak.append(
125 os.path.relpath(os.path.join(os.path.dirname(page_set.file_path),
126 page_set.credentials_path)))
127 files_to_tweak.append('~/.telemetry-credentials')
128
129 example_credentials_file = (
130 os.path.relpath(
131 os.path.join(
132 os.path.dirname(__file__),
133 '..', 'examples', 'credentials_example.json')))
134
135 logging.warning("""
136 Credentials for %s were not found. %i pages will not be benchmarked.
137
138 To fix this, either add svn-internal to your .gclient using
139 http://goto/read-src-internal, or add your own credentials to:
140 %s
141 An example credentials file you can copy from is here:
142 %s\n""" % (', '.join(missing_credentials),
143 num_pages_missing_login,
144 ' or '.join(files_to_tweak),
145 example_credentials_file))
OLDNEW
« no previous file with comments | « tools/telemetry/telemetry/browser_backend.py ('k') | tools/telemetry/telemetry/browser_credentials_unittest.py » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698