blob: 7730b80ab7cc5efc3d0fcc9111fc67dca6c0abee [file] [log] [blame]
// 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.
window.onload = function() {
var FILES_APP_ORIGIN = 'chrome-extension://hhaomjibdihmijegdhdafkllkbggdgoj';
var messageSource;
var content = document.querySelector('#content');
window.addEventListener('message', function(event) {
if (event.origin !== FILES_APP_ORIGIN) {
console.error('Unknown origin: ' + event.origin);
return;
}
messageSource = event.source;
switch (event.data.type) {
case 'html':
content.textContent = '';
contentChanged(null);
fetch(event.data.src).then((response) => {
return response.text();
}).then((text) => {
content.textContent = text;
contentChanged(text);
});
break;
default:
content.src = event.data.src;
contentChanged(content.src);
break;
}
});
document.addEventListener('contextmenu', function(e) {
e.preventDefault();
return false;
});
document.addEventListener('click', function(e) {
sendMessage((e.target === content) ? 'tap-inside' : 'tap-outside');
});
function contentChanged(src) {
sendMessage(src ? 'webview-loaded' : 'webview-cleared');
}
function sendMessage(message) {
if (messageSource) {
messageSource.postMessage(message, FILES_APP_ORIGIN);
}
}
// TODO(oka): This is a workaround to fix FOUC problem, where sometimes
// immature view with smaller window size than outer window is rendered for a
// moment. Remove this after the root cause is fixed. http://crbug.com/640525
window.addEventListener('resize', function() {
// Remove hidden attribute on event of resize to avoid FOUC. The window's
// initial size is 100 x 100 and it's fit into the outer window size after a
// moment. Due to Files App's window size constraint, resized window must be
// larger than 100 x 100. So this event is always invoked.
content.removeAttribute('hidden');
});
// Fallback for the case of webview bug is fixed and above code is not
// executed.
setTimeout(function() {
content.removeAttribute('hidden');
}, 500);
};