Commit 78312f3a authored by lfg's avatar lfg Committed by Commit bot

Adds more webview tests to app_shell_browsertests.

This CL adds a few more tests to app_shell_browsertests:
WebViewAPITest.TestAllowTransparencyAttribute
WebViewAPITest.TestAutosizeAfterNavigation
WebViewAPITest.TestAutosizeBeforeNavigation
WebViewAPITest.TestAutosizeHeight
WebViewAPITest.TestAutosizeRemoveAttributes
WebViewAPITest.TestAutosizeWithPartialAttributes

BUG=352293

Review URL: https://codereview.chromium.org/604443003

Cr-Commit-Position: refs/heads/master@{#296570}
parent ff374b7f
...@@ -30,6 +30,7 @@ ...@@ -30,6 +30,7 @@
#include "extensions/browser/app_window/native_app_window.h" #include "extensions/browser/app_window/native_app_window.h"
#include "extensions/browser/guest_view/guest_view_manager.h" #include "extensions/browser/guest_view/guest_view_manager.h"
#include "extensions/browser/guest_view/guest_view_manager_factory.h" #include "extensions/browser/guest_view/guest_view_manager_factory.h"
#include "extensions/browser/guest_view/web_view/test_guest_view_manager.h"
#include "extensions/common/extension.h" #include "extensions/common/extension.h"
#include "extensions/common/extensions_client.h" #include "extensions/common/extensions_client.h"
#include "extensions/test/extension_test_message_listener.h" #include "extensions/test/extension_test_message_listener.h"
...@@ -95,85 +96,6 @@ class TestInterstitialPageDelegate : public content::InterstitialPageDelegate { ...@@ -95,85 +96,6 @@ class TestInterstitialPageDelegate : public content::InterstitialPageDelegate {
virtual std::string GetHTMLContents() OVERRIDE { return std::string(); } virtual std::string GetHTMLContents() OVERRIDE { return std::string(); }
}; };
class TestGuestViewManager : public extensions::GuestViewManager {
public:
explicit TestGuestViewManager(content::BrowserContext* context) :
GuestViewManager(context),
seen_guest_removed_(false),
web_contents_(NULL) {}
content::WebContents* WaitForGuestCreated() {
if (web_contents_)
return web_contents_;
created_message_loop_runner_ = new content::MessageLoopRunner;
created_message_loop_runner_->Run();
return web_contents_;
}
void WaitForGuestDeleted() {
if (seen_guest_removed_)
return;
deleted_message_loop_runner_ = new content::MessageLoopRunner;
deleted_message_loop_runner_->Run();
}
private:
// GuestViewManager override:
virtual void AddGuest(int guest_instance_id,
content::WebContents* guest_web_contents) OVERRIDE{
extensions::GuestViewManager::AddGuest(
guest_instance_id, guest_web_contents);
web_contents_ = guest_web_contents;
seen_guest_removed_ = false;
if (created_message_loop_runner_.get())
created_message_loop_runner_->Quit();
}
virtual void RemoveGuest(int guest_instance_id) OVERRIDE {
extensions::GuestViewManager::RemoveGuest(guest_instance_id);
web_contents_ = NULL;
seen_guest_removed_ = true;
if (deleted_message_loop_runner_.get())
deleted_message_loop_runner_->Quit();
}
bool seen_guest_removed_;
content::WebContents* web_contents_;
scoped_refptr<content::MessageLoopRunner> created_message_loop_runner_;
scoped_refptr<content::MessageLoopRunner> deleted_message_loop_runner_;
};
// Test factory for creating test instances of GuestViewManager.
class TestGuestViewManagerFactory :
public extensions::GuestViewManagerFactory {
public:
TestGuestViewManagerFactory() :
test_guest_view_manager_(NULL) {}
virtual ~TestGuestViewManagerFactory() {}
virtual extensions::GuestViewManager* CreateGuestViewManager(
content::BrowserContext* context) OVERRIDE {
return GetManager(context);
}
TestGuestViewManager* GetManager(content::BrowserContext* context) {
if (!test_guest_view_manager_) {
test_guest_view_manager_ = new TestGuestViewManager(context);
}
return test_guest_view_manager_;
}
private:
TestGuestViewManager* test_guest_view_manager_;
DISALLOW_COPY_AND_ASSIGN(TestGuestViewManagerFactory);
};
class WebContentsHiddenObserver : public content::WebContentsObserver { class WebContentsHiddenObserver : public content::WebContentsObserver {
public: public:
WebContentsHiddenObserver(content::WebContents* web_contents, WebContentsHiddenObserver(content::WebContents* web_contents,
...@@ -744,8 +666,10 @@ class WebViewTest : public extensions::PlatformAppBrowserTest { ...@@ -744,8 +666,10 @@ class WebViewTest : public extensions::PlatformAppBrowserTest {
return embedder_web_contents_; return embedder_web_contents_;
} }
TestGuestViewManager* GetGuestViewManager() { extensions::TestGuestViewManager* GetGuestViewManager() {
return factory_.GetManager(browser()->profile()); return static_cast<extensions::TestGuestViewManager*>(
extensions::TestGuestViewManager::FromBrowserContext(
browser()->profile()));
} }
WebViewTest() : guest_web_contents_(NULL), WebViewTest() : guest_web_contents_(NULL),
...@@ -766,7 +690,7 @@ class WebViewTest : public extensions::PlatformAppBrowserTest { ...@@ -766,7 +690,7 @@ class WebViewTest : public extensions::PlatformAppBrowserTest {
scoped_ptr<content::FakeSpeechRecognitionManager> scoped_ptr<content::FakeSpeechRecognitionManager>
fake_speech_recognition_manager_; fake_speech_recognition_manager_;
TestGuestViewManagerFactory factory_; extensions::TestGuestViewManagerFactory factory_;
// Note that these are only set if you launch app using LoadAppWithGuest(). // Note that these are only set if you launch app using LoadAppWithGuest().
content::WebContents* guest_web_contents_; content::WebContents* guest_web_contents_;
content::WebContents* embedder_web_contents_; content::WebContents* embedder_web_contents_;
......
// Copyright 2014 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.
#include "extensions/browser/guest_view/web_view/test_guest_view_manager.h"
#include "base/path_service.h"
#include "base/strings/stringprintf.h"
#include "content/public/test/browser_test_utils.h"
#include "extensions/browser/app_window/app_window.h"
#include "extensions/browser/app_window/app_window_registry.h"
#include "extensions/browser/extension_host.h"
#include "extensions/browser/process_manager.h"
#include "extensions/common/extension.h"
#include "extensions/common/extension_paths.h"
#include "extensions/shell/browser/shell_extension_system.h"
#include "extensions/shell/test/shell_test.h"
#include "extensions/test/extension_test_message_listener.h"
namespace extensions {
TestGuestViewManager::TestGuestViewManager(content::BrowserContext* context)
: GuestViewManager(context),
seen_guest_removed_(false),
web_contents_(NULL) {
}
TestGuestViewManager::~TestGuestViewManager() {
}
content::WebContents* TestGuestViewManager::WaitForGuestCreated() {
if (web_contents_)
return web_contents_;
created_message_loop_runner_ = new content::MessageLoopRunner;
created_message_loop_runner_->Run();
return web_contents_;
}
void TestGuestViewManager::WaitForGuestDeleted() {
if (seen_guest_removed_)
return;
deleted_message_loop_runner_ = new content::MessageLoopRunner;
deleted_message_loop_runner_->Run();
}
void TestGuestViewManager::AddGuest(int guest_instance_id,
content::WebContents* guest_web_contents) {
GuestViewManager::AddGuest(guest_instance_id, guest_web_contents);
web_contents_ = guest_web_contents;
seen_guest_removed_ = false;
if (created_message_loop_runner_.get())
created_message_loop_runner_->Quit();
}
void TestGuestViewManager::RemoveGuest(int guest_instance_id) {
GuestViewManager::RemoveGuest(guest_instance_id);
web_contents_ = NULL;
seen_guest_removed_ = true;
if (deleted_message_loop_runner_.get())
deleted_message_loop_runner_->Quit();
}
// Test factory for creating test instances of GuestViewManager.
TestGuestViewManagerFactory::TestGuestViewManagerFactory()
: test_guest_view_manager_(NULL) {
}
TestGuestViewManagerFactory::~TestGuestViewManagerFactory() {
}
GuestViewManager* TestGuestViewManagerFactory::CreateGuestViewManager(
content::BrowserContext* context) {
return GetManager(context);
}
// This function gets called from GuestViewManager::FromBrowserContext(),
// where test_guest_view_manager_ is assigned to a linked_ptr that takes care
// of deleting it.
TestGuestViewManager* TestGuestViewManagerFactory::GetManager(
content::BrowserContext* context) {
DCHECK(!test_guest_view_manager_);
test_guest_view_manager_ = new TestGuestViewManager(context);
return test_guest_view_manager_;
}
} // namespace extensions
// Copyright 2014 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.
#ifndef EXTENSIONS_BROWSER_GUEST_VIEW_WEB_VIEW_TEST_GUEST_VIEW_MANAGER_H_
#define EXTENSIONS_BROWSER_GUEST_VIEW_WEB_VIEW_TEST_GUEST_VIEW_MANAGER_H_
#include "content/public/test/test_utils.h"
#include "extensions/browser/guest_view/guest_view_manager.h"
#include "extensions/browser/guest_view/guest_view_manager_factory.h"
namespace extensions {
class TestGuestViewManager : public GuestViewManager {
public:
explicit TestGuestViewManager(content::BrowserContext* context);
virtual ~TestGuestViewManager();
content::WebContents* WaitForGuestCreated();
void WaitForGuestDeleted();
private:
// GuestViewManager override:
virtual void AddGuest(int guest_instance_id,
content::WebContents* guest_web_contents) OVERRIDE;
virtual void RemoveGuest(int guest_instance_id) OVERRIDE;
bool seen_guest_removed_;
content::WebContents* web_contents_;
scoped_refptr<content::MessageLoopRunner> created_message_loop_runner_;
scoped_refptr<content::MessageLoopRunner> deleted_message_loop_runner_;
DISALLOW_COPY_AND_ASSIGN(TestGuestViewManager);
};
// Test factory for creating test instances of GuestViewManager.
class TestGuestViewManagerFactory : public GuestViewManagerFactory {
public:
TestGuestViewManagerFactory();
virtual ~TestGuestViewManagerFactory();
virtual GuestViewManager* CreateGuestViewManager(
content::BrowserContext* context) OVERRIDE;
TestGuestViewManager* GetManager(content::BrowserContext* context);
private:
TestGuestViewManager* test_guest_view_manager_;
DISALLOW_COPY_AND_ASSIGN(TestGuestViewManagerFactory);
};
} // namespace extensions
#endif // EXTENSIONS_BROWSER_GUEST_VIEW_WEB_VIEW_TEST_GUEST_VIEW_MANAGER_H_
...@@ -11,6 +11,7 @@ ...@@ -11,6 +11,7 @@
#include "extensions/browser/extension_host.h" #include "extensions/browser/extension_host.h"
#include "extensions/browser/guest_view/guest_view_manager.h" #include "extensions/browser/guest_view/guest_view_manager.h"
#include "extensions/browser/guest_view/guest_view_manager_factory.h" #include "extensions/browser/guest_view/guest_view_manager_factory.h"
#include "extensions/browser/guest_view/web_view/test_guest_view_manager.h"
#include "extensions/browser/process_manager.h" #include "extensions/browser/process_manager.h"
#include "extensions/common/extension.h" #include "extensions/common/extension.h"
#include "extensions/common/extension_paths.h" #include "extensions/common/extension_paths.h"
...@@ -18,91 +19,6 @@ ...@@ -18,91 +19,6 @@
#include "extensions/shell/test/shell_test.h" #include "extensions/shell/test/shell_test.h"
#include "extensions/test/extension_test_message_listener.h" #include "extensions/test/extension_test_message_listener.h"
namespace {
// TODO(lfg) Merge TestGuestViewManager and its factory with the one in chrome
// web_view_browsertest.cc.
class TestGuestViewManager : public extensions::GuestViewManager {
public:
explicit TestGuestViewManager(content::BrowserContext* context)
: GuestViewManager(context),
seen_guest_removed_(false),
web_contents_(NULL) {}
content::WebContents* WaitForGuestCreated() {
if (web_contents_)
return web_contents_;
created_message_loop_runner_ = new content::MessageLoopRunner;
created_message_loop_runner_->Run();
return web_contents_;
}
void WaitForGuestDeleted() {
if (seen_guest_removed_)
return;
deleted_message_loop_runner_ = new content::MessageLoopRunner;
deleted_message_loop_runner_->Run();
}
private:
// GuestViewManager override:
virtual void AddGuest(int guest_instance_id,
content::WebContents* guest_web_contents) OVERRIDE {
extensions::GuestViewManager::AddGuest(guest_instance_id,
guest_web_contents);
web_contents_ = guest_web_contents;
seen_guest_removed_ = false;
if (created_message_loop_runner_.get())
created_message_loop_runner_->Quit();
}
virtual void RemoveGuest(int guest_instance_id) OVERRIDE {
extensions::GuestViewManager::RemoveGuest(guest_instance_id);
web_contents_ = NULL;
seen_guest_removed_ = true;
if (deleted_message_loop_runner_.get())
deleted_message_loop_runner_->Quit();
}
bool seen_guest_removed_;
content::WebContents* web_contents_;
scoped_refptr<content::MessageLoopRunner> created_message_loop_runner_;
scoped_refptr<content::MessageLoopRunner> deleted_message_loop_runner_;
};
// Test factory for creating test instances of GuestViewManager.
class TestGuestViewManagerFactory : public extensions::GuestViewManagerFactory {
public:
TestGuestViewManagerFactory() : test_guest_view_manager_(NULL) {}
virtual ~TestGuestViewManagerFactory() {}
virtual extensions::GuestViewManager* CreateGuestViewManager(
content::BrowserContext* context) OVERRIDE {
return GetManager(context);
}
// This function gets called from GuestViewManager::FromBrowserContext(),
// where test_guest_view_manager_ is assigned to a linked_ptr that takes care
// of deleting it.
TestGuestViewManager* GetManager(content::BrowserContext* context) {
DCHECK(!test_guest_view_manager_);
test_guest_view_manager_ = new TestGuestViewManager(context);
return test_guest_view_manager_;
}
private:
TestGuestViewManager* test_guest_view_manager_;
DISALLOW_COPY_AND_ASSIGN(TestGuestViewManagerFactory);
};
} // namespace
namespace extensions { namespace extensions {
// This class intercepts download request from the guest. // This class intercepts download request from the guest.
...@@ -110,7 +26,7 @@ class WebViewAPITest : public AppShellTest { ...@@ -110,7 +26,7 @@ class WebViewAPITest : public AppShellTest {
protected: protected:
void RunTest(const std::string& test_name, const std::string& app_location) { void RunTest(const std::string& test_name, const std::string& app_location) {
base::FilePath test_data_dir; base::FilePath test_data_dir;
PathService::Get(extensions::DIR_TEST_DATA, &test_data_dir); PathService::Get(DIR_TEST_DATA, &test_data_dir);
test_data_dir = test_data_dir.AppendASCII(app_location.c_str()); test_data_dir = test_data_dir.AppendASCII(app_location.c_str());
ASSERT_TRUE(extension_system_->LoadApp(test_data_dir)); ASSERT_TRUE(extension_system_->LoadApp(test_data_dir));
...@@ -136,16 +52,38 @@ class WebViewAPITest : public AppShellTest { ...@@ -136,16 +52,38 @@ class WebViewAPITest : public AppShellTest {
ASSERT_TRUE(done_listener.WaitUntilSatisfied()); ASSERT_TRUE(done_listener.WaitUntilSatisfied());
} }
WebViewAPITest() { WebViewAPITest() { GuestViewManager::set_factory_for_testing(&factory_); }
extensions::GuestViewManager::set_factory_for_testing(&factory_);
}
private: private:
TestGuestViewManagerFactory factory_; TestGuestViewManagerFactory factory_;
}; };
IN_PROC_BROWSER_TEST_F(WebViewAPITest, TestAllowTransparencyAttribute) {
RunTest("testAllowTransparencyAttribute", "web_view/apitest");
}
IN_PROC_BROWSER_TEST_F(WebViewAPITest, TestAPIMethodExistence) { IN_PROC_BROWSER_TEST_F(WebViewAPITest, TestAPIMethodExistence) {
RunTest("testAPIMethodExistence", "web_view/apitest"); RunTest("testAPIMethodExistence", "web_view/apitest");
} }
IN_PROC_BROWSER_TEST_F(WebViewAPITest, TestAutosizeAfterNavigation) {
RunTest("testAutosizeAfterNavigation", "web_view/apitest");
}
IN_PROC_BROWSER_TEST_F(WebViewAPITest, TestAutosizeBeforeNavigation) {
RunTest("testAutosizeBeforeNavigation", "web_view/apitest");
}
IN_PROC_BROWSER_TEST_F(WebViewAPITest, TestAutosizeHeight) {
RunTest("testAutosizeHeight", "web_view/apitest");
}
IN_PROC_BROWSER_TEST_F(WebViewAPITest, TestAutosizeRemoveAttributes) {
RunTest("testAutosizeRemoveAttributes", "web_view/apitest");
}
IN_PROC_BROWSER_TEST_F(WebViewAPITest, TestAutosizeWithPartialAttributes) {
RunTest("testAutosizeWithPartialAttributes", "web_view/apitest");
}
} // namespace extensions } // namespace extensions
...@@ -951,6 +951,8 @@ ...@@ -951,6 +951,8 @@
'browser/extension_error_test_util.h', 'browser/extension_error_test_util.h',
'browser/extensions_test.cc', 'browser/extensions_test.cc',
'browser/extensions_test.h', 'browser/extensions_test.h',
'browser/guest_view/web_view/test_guest_view_manager.cc',
'browser/guest_view/web_view/test_guest_view_manager.h',
'browser/mock_extension_system.cc', 'browser/mock_extension_system.cc',
'browser/mock_extension_system.h', 'browser/mock_extension_system.h',
'browser/test_extensions_browser_client.cc', 'browser/test_extensions_browser_client.cc',
......
...@@ -50,6 +50,26 @@ embedder.test.succeed = function() { ...@@ -50,6 +50,26 @@ embedder.test.succeed = function() {
// Tests begin. // Tests begin.
// This test verifies that the allowtransparency property cannot be changed
// once set. The attribute can only be deleted.
function testAllowTransparencyAttribute() {
var webview = document.createElement('webview');
webview.src = 'data:text/html,webview test';
webview.allowtransparency = true;
webview.addEventListener('loadstop', function(e) {
embedder.test.assertTrue(webview.hasAttribute('allowtransparency'));
webview.allowtransparency = false;
embedder.test.assertTrue(webview.allowtransparency);
embedder.test.assertTrue(webview.hasAttribute('allowtransparency'));
webview.removeAttribute('allowtransparency');
embedder.test.assertFalse(webview.allowtransparency);
embedder.test.succeed();
});
document.body.appendChild(webview);
}
function testAPIMethodExistence() { function testAPIMethodExistence() {
var apiMethodsToCheck = [ var apiMethodsToCheck = [
'back', 'back',
...@@ -91,8 +111,242 @@ function testAPIMethodExistence() { ...@@ -91,8 +111,242 @@ function testAPIMethodExistence() {
document.body.appendChild(webview); document.body.appendChild(webview);
} }
// Makes sure 'sizechanged' event is fired only if autosize attribute is
// specified.
// After loading <webview> without autosize attribute and a size, say size1,
// we set autosize attribute and new min size with size2. We would get (only
// one) sizechanged event with size1 as old size and size2 as new size.
function testAutosizeAfterNavigation() {
var webview = document.createElement('webview');
var step = 1;
var sizeChangeHandler = function(e) {
switch (step) {
case 1:
// This would be triggered after we set autosize attribute.
embedder.test.assertEq(50, e.oldWidth);
embedder.test.assertEq(100, e.oldHeight);
embedder.test.assertTrue(e.newWidth >= 60 && e.newWidth <= 70);
embedder.test.assertTrue(e.newHeight >= 110 && e.newHeight <= 120);
// Remove autosize attribute and expect webview to return to its
// original size.
webview.removeAttribute('autosize');
break;
case 2:
// Expect 50x100.
embedder.test.assertEq(50, e.newWidth);
embedder.test.assertEq(100, e.newHeight);
embedder.test.succeed();
break;
default:
window.console.log('Unexpected sizechanged event, step = ' + step);
embedder.test.fail();
break;
}
++step;
};
webview.addEventListener('sizechanged', sizeChangeHandler);
webview.addEventListener('loadstop', function(e) {
webview.setAttribute('autosize', true);
webview.setAttribute('minwidth', 60);
webview.setAttribute('maxwidth', 70);
webview.setAttribute('minheight', 110);
webview.setAttribute('maxheight', 120);
});
webview.style.width = '50px';
webview.style.height = '100px';
webview.setAttribute('src', 'data:text/html,webview test sizechanged event');
document.body.appendChild(webview);
}
// This test verifies that if a browser plugin is in autosize mode before
// navigation then the guest starts auto-sized.
function testAutosizeBeforeNavigation() {
var webview = document.createElement('webview');
webview.setAttribute('autosize', 'true');
webview.setAttribute('minwidth', 200);
webview.setAttribute('maxwidth', 210);
webview.setAttribute('minheight', 100);
webview.setAttribute('maxheight', 110);
webview.addEventListener('sizechanged', function(e) {
embedder.test.assertEq(0, e.oldWidth);
embedder.test.assertEq(0, e.oldHeight);
embedder.test.assertTrue(e.newWidth >= 200 && e.newWidth <= 210);
embedder.test.assertTrue(e.newHeight >= 100 && e.newHeight <= 110);
embedder.test.succeed();
});
webview.setAttribute('src', 'data:text/html,webview test sizechanged event');
document.body.appendChild(webview);
}
// This test verifies that a lengthy page with autosize enabled will report
// the correct height in the sizechanged event.
function testAutosizeHeight() {
var webview = document.createElement('webview');
webview.autosize = true;
webview.minwidth = 200;
webview.maxwidth = 210;
webview.minheight = 40;
webview.maxheight = 200;
var step = 1;
webview.addEventListener('sizechanged', function(e) {
switch (step) {
case 1:
embedder.test.assertEq(0, e.oldHeight);
embedder.test.assertEq(200, e.newHeight);
// Change the maxheight to verify that we see the change.
webview.maxheight = 50;
break;
case 2:
embedder.test.assertEq(200, e.oldHeight);
embedder.test.assertEq(50, e.newHeight);
embedder.test.succeed();
break;
default:
window.console.log('Unexpected sizechanged event, step = ' + step);
embedder.test.fail();
break;
}
++step;
});
webview.src = 'data:text/html,' +
'a<br/>b<br/>c<br/>d<br/>e<br/>f<br/>' +
'a<br/>b<br/>c<br/>d<br/>e<br/>f<br/>' +
'a<br/>b<br/>c<br/>d<br/>e<br/>f<br/>' +
'a<br/>b<br/>c<br/>d<br/>e<br/>f<br/>' +
'a<br/>b<br/>c<br/>d<br/>e<br/>f<br/>';
document.body.appendChild(webview);
}
// This test verifies that all autosize attributes can be removed
// without crashing the plugin, or throwing errors.
function testAutosizeRemoveAttributes() {
var webview = document.createElement('webview');
var step = 1;
var sizeChangeHandler = function(e) {
switch (step) {
case 1:
// This is the sizechanged event for autosize.
// Remove attributes.
webview.removeAttribute('minwidth');
webview.removeAttribute('maxwidth');
webview.removeAttribute('minheight');
webview.removeAttribute('maxheight');
webview.removeAttribute('autosize');
// We'd get one more sizechanged event after we turn off
// autosize.
webview.style.width = '500px';
webview.style.height = '500px';
break;
case 2:
embedder.test.succeed();
break;
}
++step;
};
webview.addEventListener('loadstop', function(e) {
webview.minwidth = 300;
webview.maxwidth = 700;
webview.minheight = 600;
webview.maxheight = 400;
webview.autosize = true;
});
webview.addEventListener('sizechanged', sizeChangeHandler);
webview.style.width = '640px';
webview.style.height = '480px';
webview.setAttribute('src', 'data:text/html,webview check autosize');
document.body.appendChild(webview);
}
// This test verifies that autosize works when some of the parameters are unset.
function testAutosizeWithPartialAttributes() {
window.console.log('testAutosizeWithPartialAttributes');
var webview = document.createElement('webview');
var step = 1;
var sizeChangeHandler = function(e) {
window.console.log('sizeChangeHandler, new: ' +
e.newWidth + ' X ' + e.newHeight);
switch (step) {
case 1:
// Expect 300x200.
embedder.test.assertEq(300, e.newWidth);
embedder.test.assertEq(200, e.newHeight);
// Change the min size to cause a relayout.
webview.minwidth = 500;
break;
case 2:
embedder.test.assertTrue(e.newWidth >= webview.minwidth);
embedder.test.assertTrue(e.newWidth <= webview.maxwidth);
// Tests when minwidth > maxwidth, minwidth = maxwidth.
// i.e. minwidth is essentially 700.
webview.minwidth = 800;
break;
case 3:
// Expect 700X?
embedder.test.assertEq(700, e.newWidth);
embedder.test.assertTrue(e.newHeight >= 200);
embedder.test.assertTrue(e.newHeight <= 600);
embedder.test.succeed();
break;
default:
window.console.log('Unexpected sizechanged event, step = ' + step);
embedder.test.fail();
break;
}
++step;
};
webview.addEventListener('sizechanged', sizeChangeHandler);
webview.addEventListener('loadstop', function(e) {
webview.minwidth = 300;
webview.maxwidth = 700;
webview.minheight = 200;
webview.maxheight = 600;
webview.autosize = true;
});
webview.style.width = '640px';
webview.style.height = '480px';
webview.setAttribute('src', 'data:text/html,webview check autosize');
document.body.appendChild(webview);
}
// Tests end.
embedder.test.testList = { embedder.test.testList = {
'testAPIMethodExistence': testAPIMethodExistence 'testAllowTransparencyAttribute': testAllowTransparencyAttribute,
'testAPIMethodExistence': testAPIMethodExistence,
'testAutosizeAfterNavigation': testAutosizeAfterNavigation,
'testAutosizeBeforeNavigation': testAutosizeBeforeNavigation,
'testAutosizeHeight': testAutosizeHeight,
'testAutosizeRemoveAttributes': testAutosizeRemoveAttributes,
'testAutosizeWithPartialAttributes': testAutosizeWithPartialAttributes
}; };
onload = function() { onload = function() {
......
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