Commit 75861848 authored by Sam McNally's avatar Sam McNally Committed by Commit Bot

Set the view type for mime handler guests.

Mime handler guests currently do not set their view type. Thus, their
foreground pages do not count as foreground pages for the purpose of
deciding whether to keep their background pages alive, resulting in the
background page being shut down while the mime handler remains open.

Set the view type to VIEW_TYPE_EXTENSION_GUEST when creating mime
handler guests to ensure mime handlers keep their background pages alive
while open.

Bug: 819761
Change-Id: Ibc64c93bbb33022375cf91b45785f543a53ca71c
Reviewed-on: https://chromium-review.googlesource.com/1023518
Commit-Queue: Sam McNally <sammc@chromium.org>
Reviewed-by: default avatarEhsan Karamad <ekaramad@chromium.org>
Cr-Commit-Position: refs/heads/master@{#553893}
parent 881f4954
// Copyright 2018 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.
var testComplete = false;
function startBackgroundPageTest(onSuspend) {
chrome.runtime.onSuspend.addListener(() => {
if (!testComplete) {
onSuspend();
}
});
}
function endBackgroundPageTest() {
testComplete = true;
}
...@@ -217,6 +217,25 @@ var tests = [ ...@@ -217,6 +217,25 @@ var tests = [
chrome.test.runWithUserGesture( chrome.test.runWithUserGesture(
() => document.body.webkitRequestFullscreen()); () => document.body.webkitRequestFullscreen());
}, },
function testBackgroundPage() {
checkStreamDetails('testBackgroundPage.csv', false);
chrome.runtime.getBackgroundPage(backgroundPage => {
backgroundPage.startBackgroundPageTest(() => {
// Fail if the background page receives an onSuspend event.
chrome.test.fail('Unexpected onSuspend');
});
// Wait for the background page to timeout. The timeouts are set to 1ms
// for this test, but give it 100ms just in case.
window.setTimeout(() => {
// If the background page has shut down, its window.localStorage will be
// null.
chrome.test.assertTrue(backgroundPage.window.localStorage != null);
backgroundPage.endBackgroundPageTest();
chrome.test.succeed();
}, 100);
});
},
]; ];
var testsByName = {}; var testsByName = {};
......
...@@ -7,6 +7,12 @@ ...@@ -7,6 +7,12 @@
"text/csv" "text/csv"
], ],
"mime_types_handler": "index.html", "mime_types_handler": "index.html",
"background": {
"persistent": false,
"scripts": [
"background.js"
]
},
"permissions": [ "permissions": [
"tabs", "tabs",
"windows" "windows"
......
...@@ -22,6 +22,7 @@ ...@@ -22,6 +22,7 @@
#include "extensions/browser/guest_view/extensions_guest_view_manager_delegate.h" #include "extensions/browser/guest_view/extensions_guest_view_manager_delegate.h"
#include "extensions/browser/guest_view/mime_handler_view/mime_handler_view_guest.h" #include "extensions/browser/guest_view/mime_handler_view/mime_handler_view_guest.h"
#include "extensions/browser/guest_view/mime_handler_view/test_mime_handler_view_guest.h" #include "extensions/browser/guest_view/mime_handler_view/test_mime_handler_view_guest.h"
#include "extensions/browser/process_manager.h"
#include "extensions/test/result_catcher.h" #include "extensions/test/result_catcher.h"
#include "net/test/embedded_test_server/embedded_test_server.h" #include "net/test/embedded_test_server/embedded_test_server.h"
#include "net/url_request/url_request_filter.h" #include "net/url_request/url_request_filter.h"
...@@ -284,3 +285,10 @@ IN_PROC_BROWSER_TEST_P(MimeHandlerViewTest, SingleRequest) { ...@@ -284,3 +285,10 @@ IN_PROC_BROWSER_TEST_P(MimeHandlerViewTest, SingleRequest) {
RunTest("testBasic.csv"); RunTest("testBasic.csv");
EXPECT_EQ(1, request_counter.GetCount()); EXPECT_EQ(1, request_counter.GetCount());
} }
// Test that a mime handler view can keep a background page alive.
IN_PROC_BROWSER_TEST_P(MimeHandlerViewTest, BackgroundPage) {
extensions::ProcessManager::SetEventPageIdleTimeForTesting(1);
extensions::ProcessManager::SetEventPageSuspendingTimeForTesting(1);
RunTest("testBackgroundPage.csv");
}
...@@ -23,6 +23,7 @@ ...@@ -23,6 +23,7 @@
#include "extensions/browser/guest_view/mime_handler_view/mime_handler_view_constants.h" #include "extensions/browser/guest_view/mime_handler_view/mime_handler_view_constants.h"
#include "extensions/browser/guest_view/mime_handler_view/mime_handler_view_guest_delegate.h" #include "extensions/browser/guest_view/mime_handler_view/mime_handler_view_guest_delegate.h"
#include "extensions/browser/process_manager.h" #include "extensions/browser/process_manager.h"
#include "extensions/browser/view_type_utils.h"
#include "extensions/common/constants.h" #include "extensions/common/constants.h"
#include "extensions/common/guest_view/extensions_guest_view_messages.h" #include "extensions/common/guest_view/extensions_guest_view_messages.h"
#include "extensions/strings/grit/extensions_strings.h" #include "extensions/strings/grit/extensions_strings.h"
...@@ -192,7 +193,9 @@ void MimeHandlerViewGuest::CreateWebContents( ...@@ -192,7 +193,9 @@ void MimeHandlerViewGuest::CreateWebContents(
WebContents::CreateParams params(browser_context(), WebContents::CreateParams params(browser_context(),
guest_site_instance.get()); guest_site_instance.get());
params.guest_delegate = this; params.guest_delegate = this;
callback.Run(WebContents::Create(params)); auto* web_contents = WebContents::Create(params);
SetViewType(web_contents, VIEW_TYPE_EXTENSION_GUEST);
callback.Run(web_contents);
registry_.AddInterface( registry_.AddInterface(
base::Bind(&MimeHandlerServiceImpl::Create, stream_->GetWeakPtr())); base::Bind(&MimeHandlerServiceImpl::Create, stream_->GetWeakPtr()));
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment