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

Side by Side Diff: chrome/browser/resources/chromeos/arc_support/background.js

Issue 1847463002: arc: Use v2/auth LSO page. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: comments addressed Created 4 years, 8 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
OLDNEW
1 // Copyright 2016 The Chromium Authors. All rights reserved. 1 // Copyright 2016 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 /** 5 /**
6 * UI Pages. Note the order must be in sync with the 6 * UI Pages. Note the order must be in sync with the
7 * ArcAuthService::UIPage enum. 7 * ArcAuthService::UIPage enum.
8 * @type {Array<string>} 8 * @type {Array<string>}
9 */ 9 */
10 var UI_PAGES = ['none', 10 var UI_PAGES = ['none',
(...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after
45 */ 45 */
46 function closeWindowInternally() { 46 function closeWindowInternally() {
47 windowClosedInternally = true; 47 windowClosedInternally = true;
48 appWindow.close(); 48 appWindow.close();
49 appWindow = null; 49 appWindow = null;
50 } 50 }
51 51
52 /** 52 /**
53 * Sends a native message to ArcSupportHost. 53 * Sends a native message to ArcSupportHost.
54 * @param {string} code The action code in message. 54 * @param {string} code The action code in message.
55 * @param {Object=} opt_Props Extra properties for the message.
55 */ 56 */
56 function sendNativeMessage(code) { 57 function sendNativeMessage(code, opt_Props) {
57 message = {'action': code}; 58 var message = Object.assign({'action': code}, opt_Props);
58 port.postMessage(message); 59 port.postMessage(message);
59 } 60 }
60 61
61 /** 62 /**
62 * Applies localization for html content. 63 * Applies localization for html content.
63 * @param {!Object} data Localized strings and relevant information. 64 * @param {!Object} data Localized strings and relevant information.
64 */ 65 */
65 function setLocalization(data) { 66 function setLocalization(data) {
66 var doc = appWindow.contentWindow.document; 67 var doc = appWindow.contentWindow.document;
67 var loadTimeData = appWindow.contentWindow.loadTimeData; 68 var loadTimeData = appWindow.contentWindow.loadTimeData;
(...skipping 49 matching lines...) Expand 10 before | Expand all | Expand 10 after
117 return; 118 return;
118 } 119 }
119 120
120 var doc = appWindow.contentWindow.document; 121 var doc = appWindow.contentWindow.document;
121 var pages = doc.getElementsByClassName('section'); 122 var pages = doc.getElementsByClassName('section');
122 for (var i = 0; i < pages.length; i++) { 123 for (var i = 0; i < pages.length; i++) {
123 pages[i].hidden = pages[i].id != pageDivId; 124 pages[i].hidden = pages[i].id != pageDivId;
124 } 125 }
125 126
126 if (pageDivId == 'lso-loading') { 127 if (pageDivId == 'lso-loading') {
127 webview.src = 'https://accounts.google.com/o/oauth2/programmatic_auth?' + 128 webview.src = 'https://accounts.google.com/o/oauth2/v2/auth?client_id=' +
128 'scope=https://www.google.com/accounts/OAuthLogin&client_id' + 129 '1070009224336-sdh77n7uot3oc99ais00jmuft6sk2fg9.apps.' +
129 '=1070009224336-sdh77n7uot3oc99ais00jmuft6sk2fg9.apps.' + 130 'googleusercontent.com&response_type=code&redirect_uri=oob&' +
130 'googleusercontent.com'; 131 'scope=https://www.google.com/accounts/OAuthLogin';
131 } 132 }
132 appWindow.show(); 133 appWindow.show();
133 } 134 }
134 135
135 /** 136 /**
137 * Sets error message.
138 * @param {string} error message.
139 */
140 function setErrorMessage(error) {
141 if (!appWindow) {
142 return;
143 }
144 var doc = appWindow.contentWindow.document;
145 var messageElement = doc.getElementById('error-message');
146 messageElement.innerText = error;
147 }
148
149 /**
136 * Shows requested page. 150 * Shows requested page.
137 * @param {int} pageId Index of the page to show. Must be in the array range of 151 * @param {int} pageId Index of the page to show. Must be in the array range of
138 * UI_PAGES. 152 * UI_PAGES.
139 * @param {string} status associated with page string status, error message for 153 * @param {string} status associated with page string status, error message for
140 * example. 154 * example.
141 */ 155 */
142 function showPageWithStatus(pageId, status) { 156 function showPageWithStatus(pageId, status) {
143 if (!appWindow) { 157 if (!appWindow) {
144 return; 158 return;
145 } 159 }
146 160
147 if (UI_PAGES[pageId] == 'error') { 161 if (UI_PAGES[pageId] == 'error') {
148 var doc = appWindow.contentWindow.document; 162 setErrorMessage(status);
149 var messageElement = doc.getElementById('error-message');
150 messageElement.innerText = status;
151 } 163 }
152 showPage(UI_PAGES[pageId]); 164 showPage(UI_PAGES[pageId]);
153 } 165 }
154 166
155 chrome.app.runtime.onLaunched.addListener(function() { 167 chrome.app.runtime.onLaunched.addListener(function() {
156 var onAppContentLoad = function() { 168 var onAppContentLoad = function() {
157 var doc = appWindow.contentWindow.document; 169 var doc = appWindow.contentWindow.document;
158 webview = doc.getElementById('arc-support'); 170 webview = doc.getElementById('arc-support');
159 171
160 var onWebviewRequestCompleted = function(details) { 172 var isApprovalResponse = function(url) {
161 showPage('lso'); 173 var resultUrlPrefix = 'https://accounts.google.com/o/oauth2/approval?';
162 var resultUrlPrefix = 174 return url.substring(0, resultUrlPrefix.length) == resultUrlPrefix;
163 'https://accounts.google.com/o/oauth2/programmatic_auth?'; 175 };
164 if (details.statusCode == 200 && 176
165 details.url.substring(0, resultUrlPrefix.length) == resultUrlPrefix) { 177 var onWebviewRequestResponseStarted = function(details) {
166 sendNativeMessage('checkAuthCode'); 178 if (isApprovalResponse(details.url)) {
179 showPage('arc-loading');
167 } 180 }
168 }; 181 };
169 182
183 var onWebviewContentLoad = function() {
184 if (!isApprovalResponse(webview.src)) {
185 // Show LSO page when its content is ready.
186 showPage('lso');
187 return;
188 }
189
190 webview.executeScript({code: 'document.title;'}, function(results) {
191 var authCodePrefix = 'Success code=';
192 if (results[0].substring(0, authCodePrefix.length) ==
193 authCodePrefix) {
194 var authCode = results[0].substring(authCodePrefix.length);
195 sendNativeMessage('setAuthCode', {code: authCode});
196 } else {
197 setErrorMessage(appWindow.contentWindow.loadTimeData.getString(
198 'authorizationFailed'));
199 showPage('error');
200 }
201 });
202 };
203
170 var requestFilter = { 204 var requestFilter = {
171 urls: ['<all_urls>'], 205 urls: ['<all_urls>'],
172 types: ['main_frame'] 206 types: ['main_frame']
173 }; 207 };
174 208
175 webview.request.onCompleted.addListener(onWebviewRequestCompleted, 209 webview.request.onResponseStarted.addListener(
176 requestFilter); 210 onWebviewRequestResponseStarted, requestFilter);
211 webview.addEventListener('contentload', onWebviewContentLoad);
177 212
178 var onGetStarted = function() { 213 var onGetStarted = function() {
179 sendNativeMessage('checkAuthCode'); 214 sendNativeMessage('startLSO');
180 }; 215 };
181 216
182 var onRetry = function() { 217 var onRetry = function() {
183 sendNativeMessage('checkAuthCode'); 218 sendNativeMessage('startLSO');
184 }; 219 };
185 220
186 doc.getElementById('get-started').addEventListener('click', onGetStarted); 221 doc.getElementById('get-started').addEventListener('click', onGetStarted);
187 doc.getElementById('retry').addEventListener('click', onRetry); 222 doc.getElementById('retry').addEventListener('click', onRetry);
188 223
189 connectPort(); 224 connectPort();
190 }; 225 };
191 226
192 var onWindowCreated = function(createdWindow) { 227 var onWindowCreated = function(createdWindow) {
193 appWindow = createdWindow; 228 appWindow = createdWindow;
(...skipping 17 matching lines...) Expand all
211 type: 'chrome', 246 type: 'chrome',
212 color: '#67a030' 247 color: '#67a030'
213 }, 248 },
214 'innerBounds': { 249 'innerBounds': {
215 'width': 800, 250 'width': 800,
216 'height': 600 251 'height': 600
217 } 252 }
218 }; 253 };
219 chrome.app.window.create('main.html', options, onWindowCreated); 254 chrome.app.window.create('main.html', options, onWindowCreated);
220 }); 255 });
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698