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

Unified Diff: chrome/browser/resources/chromeos/arc_support/background.js

Issue 2137713002: arc: Provide progress to load TOS content for OptIn. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: comments addressed Created 4 years, 5 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: chrome/browser/resources/chromeos/arc_support/background.js
diff --git a/chrome/browser/resources/chromeos/arc_support/background.js b/chrome/browser/resources/chromeos/arc_support/background.js
index d72b57df6ae25f91600c1f021d5aad971b0da6f7..41a744e6ce24073c875994d60e9492e573faf54e 100644
--- a/chrome/browser/resources/chromeos/arc_support/background.js
+++ b/chrome/browser/resources/chromeos/arc_support/background.js
@@ -8,7 +8,8 @@
* @type {Array<string>}
*/
var UI_PAGES = ['none',
- 'start',
+ 'terms-loading',
+ 'terms',
'lso-loading',
'lso',
'arc-loading',
@@ -59,6 +60,12 @@ var termsReloadTimeout = null;
var currentDeviceId = null;
/**
+ * Indicates that terms were accepted by user.
+ * @type {boolean}
+ */
+var termsAccepted = false;
+
+/**
* Closes current window in response to request from native code. This does not
* issue 'cancelAuthCode' message to native code.
*/
@@ -105,9 +112,6 @@ function initialize(data, deviceId) {
js: { files: ['playstore.js'] },
run_at: 'document_end'
}]);
-
- // Applying localization changes page layout, update terms height.
- updateTermsHeight();
}
/**
@@ -171,6 +175,9 @@ function updateTermsHeight() {
var setTermsHeight = function() {
var doc = appWindow.contentWindow.document;
var termsContainer = doc.getElementById('terms-container');
+ // Reset terms-view height in order to stabilize style computation. For
+ // some reason, child webview affects final result.
+ termsView.style.height = '0px';
var style = window.getComputedStyle(termsContainer, null);
var height = style.getPropertyValue('height');
termsView.style.height = height;
@@ -277,10 +284,17 @@ function showPageWithStatus(pageId, status) {
return;
}
- if (UI_PAGES[pageId] == 'start') {
+ if (UI_PAGES[pageId] == 'terms-loading') {
+ termsAccepted = false;
loadInitialTerms();
- } else if (UI_PAGES[pageId] == 'error' ||
- UI_PAGES[pageId] == 'error-with-feedback') {
+ } else {
+ // Explicit request to start not from start page. Assume terms are
+ // accepted in this case.
+ termsAccepted = true;
+ }
+
+ if (UI_PAGES[pageId] == 'error' ||
+ UI_PAGES[pageId] == 'error-with-feedback') {
setErrorMessage(status);
}
showPage(UI_PAGES[pageId]);
@@ -297,25 +311,32 @@ chrome.app.runtime.onLaunched.addListener(function() {
var onAppContentLoad = function() {
var doc = appWindow.contentWindow.document;
lsoView = doc.getElementById('arc-support');
- // Apply absolute dimension to webview tag in order to avoid UI glitch
- // when embedded content layout is visible for user, even if 100% width and
- // height are set in css file.
- // TODO(khmel): Investigate why relative layout is not enough.
- lsoView.style.width = appWindow.innerBounds.width + 'px';
- lsoView.style.height = appWindow.innerBounds.height + 'px';
var isApprovalResponse = function(url) {
var resultUrlPrefix = 'https://accounts.google.com/o/oauth2/approval?';
return url.substring(0, resultUrlPrefix.length) == resultUrlPrefix;
};
+ var lsoError = false;
var onLsoViewRequestResponseStarted = function(details) {
if (isApprovalResponse(details.url)) {
showPage('arc-loading');
}
+ lsoError = false;
+ };
+
+ var onLsoViewErrorOccurred = function(details) {
+ setErrorMessage(appWindow.contentWindow.loadTimeData.getString(
+ 'serverError'));
+ showPage('error');
+ lsoError = true;
};
var onLsoViewContentLoad = function() {
+ if (lsoError) {
+ return;
+ }
+
if (!isApprovalResponse(lsoView.src)) {
// Show LSO page when its content is ready.
showPage('lso');
@@ -324,8 +345,8 @@ chrome.app.runtime.onLaunched.addListener(function() {
lsoView.executeScript({code: 'document.title;'}, function(results) {
var authCodePrefix = 'Success code=';
- if (results[0].substring(0, authCodePrefix.length) ==
- authCodePrefix) {
+ if (results && results.length == 1 && typeof results[0] == 'string' &&
+ results[0].substring(0, authCodePrefix.length) == authCodePrefix) {
var authCode = results[0].substring(authCodePrefix.length);
sendNativeMessage('setAuthCode', {code: authCode});
} else {
@@ -343,31 +364,40 @@ chrome.app.runtime.onLaunched.addListener(function() {
lsoView.request.onResponseStarted.addListener(
onLsoViewRequestResponseStarted, requestFilter);
+ lsoView.request.onErrorOccurred.addListener(
+ onLsoViewErrorOccurred, requestFilter);
lsoView.addEventListener('contentload', onLsoViewContentLoad);
- termsView = doc.getElementById('terms');
+ termsView = doc.getElementById('terms-view');
- // Handle terms view completed event. Enable button 'Agree' in case terms
- // were loaded successfully and try to reload its content on error.
- var termsReloadRetryTimeMs = 1000; // 1 second
- function onTermsViewRequestCompleted(details) {
- if (termsReloadTimeout) {
- clearTimeout(termsReloadTimeout);
- termsReloadTimeout = null;
- }
- if (details.statusCode == 200) {
- doc.getElementById('button-agree').disabled = false;
- } else {
- termsReloadTimeout = setTimeout(loadInitialTerms,
- termsReloadRetryTimeMs);
- termsReloadRetryTimeMs = termsReloadRetryTimeMs * 2;
- if (termsReloadRetryTimeMs > 30000) {
- termsReloadRetryTimeMs = 30000;
- }
+ var termsError = false;
+ var onTermsViewBeforeRequest = function(details) {
+ showPage('terms-loading');
+ termsError = false;
+ };
+
+ var onTermsViewErrorOccurred = function(details) {
+ termsAccepted = false;
+ setErrorMessage(appWindow.contentWindow.loadTimeData.getString(
+ 'serverError'));
+ showPage('error');
+ termsError = true;
+ };
+
+ var onTermsViewContentLoad = function() {
+ if (termsError) {
+ return;
}
- }
- termsView.request.onCompleted.addListener(onTermsViewRequestCompleted,
- requestFilter);
+ showPage('terms');
+ updateTermsHeight();
+ };
+
+ termsView.request.onBeforeRequest.addListener(onTermsViewBeforeRequest,
+ requestFilter);
+ termsView.request.onErrorOccurred.addListener(onTermsViewErrorOccurred,
+ requestFilter);
+ termsView.addEventListener('contentload', onTermsViewContentLoad);
+
// webview is not allowed to open links in the new window. Hook these events
// and open links in context of main page.
@@ -377,6 +407,8 @@ chrome.app.runtime.onLaunched.addListener(function() {
});
var onAgree = function() {
+ termsAccepted = true;
+
var enableMetrics = doc.getElementById('enable-metrics');
if (!enableMetrics.hidden) {
sendNativeMessage('enableMetrics', {
@@ -401,7 +433,11 @@ chrome.app.runtime.onLaunched.addListener(function() {
};
var onRetry = function() {
- sendNativeMessage('startLso');
+ if (termsAccepted) {
+ sendNativeMessage('startLso');
+ } else {
+ loadInitialTerms();
+ }
};
var onSendFeedback = function() {
« no previous file with comments | « chrome/browser/chromeos/arc/arc_support_host.cc ('k') | chrome/browser/resources/chromeos/arc_support/main.css » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698