New issue
Advanced search Search tips
Note: Color blocks (like or ) mean that a user may not be available. Tooltip shows the reason.

Issue 670741 link

Starred by 1 user

Issue metadata

Status: Fixed
Owner:
Closed: Dec 2016
Cc:
Components:
EstimatedDays: ----
NextAction: ----
OS: All
Pri: 2
Type: Bug



Sign in to add a comment

Need a way to share test resources in extension API tests

Project Member Reported by rdevlin....@chromium.org, Dec 2 2016

Issue description

We have a large number of end-to-end extension API tests which consist of the extension executing some javascript and ensuring the correct result.  Unfortunately, there's currently no good way to share common utility code between these tests, since the test packages an extension and extensions aren't allowed to access code from outside their directory.  This leads us to do a number of bad alternatives:
- copy-paste code around (webnavigation api tests [1] are a good example of this - the same framework.js file is copied >20 times).
- making mutant tests that include tons of different unrelated files so that they can all be in one extension
- adding unnecessary methods to the chrome.test API.

Instead, we should have an easy way to share these common test resources, allowing us to effectively "#include" these files through either
<script src=...></script>
or
<link rel="import" href=...>

Looking further ahead, there's also the chance that we greatly reduce (or even totally remove) our chrome.test API - which would be very useful, as it's currently compiled in release builds for reasons*.

*TL;DR: no good way to pass test information to the renderer or conditionally compile resources chrome-included based on built target.

[1] https://chromium.googlesource.com/chromium/src/+/d69748c97ae3e11a2611f498b745fd6fc5b5f301/chrome/test/data/extensions/api_test/webnavigation
 
Project Member

Comment 1 by bugdroid1@chromium.org, Dec 3 2016

The following revision refers to this bug:
  https://chromium.googlesource.com/chromium/src.git/+/647dc9d1109f473f7cf069c3ba019dee5a4e062c

commit 647dc9d1109f473f7cf069c3ba019dee5a4e062c
Author: rdevlin.cronin <rdevlin.cronin@chromium.org>
Date: Sat Dec 03 21:04:02 2016

[Extensions] Allow shared resources between tests via _test_resources

Allow tests to override extension protocols so that tests can include
shared resources via chrome-extension://<id>/_test_resources/foo (which
maps to chrome/test/data/extensions/foo). This allows tests to include
utility files in a "#include" style fashion with e.g.
<script src="_test_resources/common_utility.js"></script>

This removes the need to duplicate a bunch of files between different
test extensions.  Looking longer term, this could also allow us to
remove a number of our chrome.test methods that are purely JS-based
(we could have them in a common "extension_test.js" file). This is
good for a number of reasons, outlined in the bug.

Set up the overrides and utilize it in the webnavigation API tests,
taking out the common framework.js file for a net savings of around
6k lines.

BUG= 670741 

Review-Url: https://codereview.chromium.org/2547523004
Cr-Commit-Position: refs/heads/master@{#436172}

[modify] https://crrev.com/647dc9d1109f473f7cf069c3ba019dee5a4e062c/chrome/browser/extensions/extension_browsertest.cc
[modify] https://crrev.com/647dc9d1109f473f7cf069c3ba019dee5a4e062c/chrome/browser/extensions/extension_browsertest.h
[delete] https://crrev.com/f7c765c5d213236ea8e76b6d6cee1f81c1982fc6/chrome/test/data/extensions/api_test/webnavigation/clientRedirect/framework.js
[modify] https://crrev.com/647dc9d1109f473f7cf069c3ba019dee5a4e062c/chrome/test/data/extensions/api_test/webnavigation/clientRedirect/test_clientRedirect.html
[delete] https://crrev.com/f7c765c5d213236ea8e76b6d6cee1f81c1982fc6/chrome/test/data/extensions/api_test/webnavigation/crash/framework.js
[modify] https://crrev.com/647dc9d1109f473f7cf069c3ba019dee5a4e062c/chrome/test/data/extensions/api_test/webnavigation/crash/test_crash.html
[delete] https://crrev.com/f7c765c5d213236ea8e76b6d6cee1f81c1982fc6/chrome/test/data/extensions/api_test/webnavigation/crossProcess/framework.js
[modify] https://crrev.com/647dc9d1109f473f7cf069c3ba019dee5a4e062c/chrome/test/data/extensions/api_test/webnavigation/crossProcess/test_crossProcess.html
[delete] https://crrev.com/f7c765c5d213236ea8e76b6d6cee1f81c1982fc6/chrome/test/data/extensions/api_test/webnavigation/crossProcessAbort/framework.js
[modify] https://crrev.com/647dc9d1109f473f7cf069c3ba019dee5a4e062c/chrome/test/data/extensions/api_test/webnavigation/crossProcessAbort/test_crossProcessAbort.html
[delete] https://crrev.com/f7c765c5d213236ea8e76b6d6cee1f81c1982fc6/chrome/test/data/extensions/api_test/webnavigation/crossProcessFragment/framework.js
[modify] https://crrev.com/647dc9d1109f473f7cf069c3ba019dee5a4e062c/chrome/test/data/extensions/api_test/webnavigation/crossProcessFragment/test_crossProcessFragment.html
[delete] https://crrev.com/f7c765c5d213236ea8e76b6d6cee1f81c1982fc6/chrome/test/data/extensions/api_test/webnavigation/crossProcessHistory/framework.js
[modify] https://crrev.com/647dc9d1109f473f7cf069c3ba019dee5a4e062c/chrome/test/data/extensions/api_test/webnavigation/crossProcessHistory/test_crossProcessHistory.html
[delete] https://crrev.com/f7c765c5d213236ea8e76b6d6cee1f81c1982fc6/chrome/test/data/extensions/api_test/webnavigation/crossProcessIframe/framework.js
[modify] https://crrev.com/647dc9d1109f473f7cf069c3ba019dee5a4e062c/chrome/test/data/extensions/api_test/webnavigation/crossProcessIframe/test_crossProcessIframe.html
[delete] https://crrev.com/f7c765c5d213236ea8e76b6d6cee1f81c1982fc6/chrome/test/data/extensions/api_test/webnavigation/download/framework.js
[modify] https://crrev.com/647dc9d1109f473f7cf069c3ba019dee5a4e062c/chrome/test/data/extensions/api_test/webnavigation/download/test_download.html
[delete] https://crrev.com/f7c765c5d213236ea8e76b6d6cee1f81c1982fc6/chrome/test/data/extensions/api_test/webnavigation/failures/framework.js
[modify] https://crrev.com/647dc9d1109f473f7cf069c3ba019dee5a4e062c/chrome/test/data/extensions/api_test/webnavigation/failures/test_failures.html
[delete] https://crrev.com/f7c765c5d213236ea8e76b6d6cee1f81c1982fc6/chrome/test/data/extensions/api_test/webnavigation/filtered/framework.js
[modify] https://crrev.com/647dc9d1109f473f7cf069c3ba019dee5a4e062c/chrome/test/data/extensions/api_test/webnavigation/filtered/test_filtered.html
[delete] https://crrev.com/f7c765c5d213236ea8e76b6d6cee1f81c1982fc6/chrome/test/data/extensions/api_test/webnavigation/forwardBack/framework.js
[modify] https://crrev.com/647dc9d1109f473f7cf069c3ba019dee5a4e062c/chrome/test/data/extensions/api_test/webnavigation/forwardBack/test_forwardBack.html
[rename] https://crrev.com/647dc9d1109f473f7cf069c3ba019dee5a4e062c/chrome/test/data/extensions/api_test/webnavigation/framework.js
[delete] https://crrev.com/f7c765c5d213236ea8e76b6d6cee1f81c1982fc6/chrome/test/data/extensions/api_test/webnavigation/getFrame/framework.js
[delete] https://crrev.com/f7c765c5d213236ea8e76b6d6cee1f81c1982fc6/chrome/test/data/extensions/api_test/webnavigation/history/framework.js
[modify] https://crrev.com/647dc9d1109f473f7cf069c3ba019dee5a4e062c/chrome/test/data/extensions/api_test/webnavigation/history/test_history.html
[delete] https://crrev.com/f7c765c5d213236ea8e76b6d6cee1f81c1982fc6/chrome/test/data/extensions/api_test/webnavigation/iframe/framework.js
[modify] https://crrev.com/647dc9d1109f473f7cf069c3ba019dee5a4e062c/chrome/test/data/extensions/api_test/webnavigation/iframe/test_iframe.html
[delete] https://crrev.com/f7c765c5d213236ea8e76b6d6cee1f81c1982fc6/chrome/test/data/extensions/api_test/webnavigation/openTab/framework.js
[modify] https://crrev.com/647dc9d1109f473f7cf069c3ba019dee5a4e062c/chrome/test/data/extensions/api_test/webnavigation/openTab/test_openTab.html
[delete] https://crrev.com/f7c765c5d213236ea8e76b6d6cee1f81c1982fc6/chrome/test/data/extensions/api_test/webnavigation/prerender/framework.js
[modify] https://crrev.com/647dc9d1109f473f7cf069c3ba019dee5a4e062c/chrome/test/data/extensions/api_test/webnavigation/prerender/test_prerender.html
[delete] https://crrev.com/f7c765c5d213236ea8e76b6d6cee1f81c1982fc6/chrome/test/data/extensions/api_test/webnavigation/referenceFragment/framework.js
[modify] https://crrev.com/647dc9d1109f473f7cf069c3ba019dee5a4e062c/chrome/test/data/extensions/api_test/webnavigation/referenceFragment/test_referenceFragment.html
[delete] https://crrev.com/f7c765c5d213236ea8e76b6d6cee1f81c1982fc6/chrome/test/data/extensions/api_test/webnavigation/requestOpenTab/framework.js
[modify] https://crrev.com/647dc9d1109f473f7cf069c3ba019dee5a4e062c/chrome/test/data/extensions/api_test/webnavigation/requestOpenTab/test_requestOpenTab.html
[delete] https://crrev.com/f7c765c5d213236ea8e76b6d6cee1f81c1982fc6/chrome/test/data/extensions/api_test/webnavigation/serverRedirect/framework.js
[modify] https://crrev.com/647dc9d1109f473f7cf069c3ba019dee5a4e062c/chrome/test/data/extensions/api_test/webnavigation/serverRedirect/test_serverRedirect.html
[delete] https://crrev.com/f7c765c5d213236ea8e76b6d6cee1f81c1982fc6/chrome/test/data/extensions/api_test/webnavigation/serverRedirectSingleProcess/framework.js
[modify] https://crrev.com/647dc9d1109f473f7cf069c3ba019dee5a4e062c/chrome/test/data/extensions/api_test/webnavigation/serverRedirectSingleProcess/test_serverRedirectSingleProcess.html
[delete] https://crrev.com/f7c765c5d213236ea8e76b6d6cee1f81c1982fc6/chrome/test/data/extensions/api_test/webnavigation/simpleLoad/framework.js
[modify] https://crrev.com/647dc9d1109f473f7cf069c3ba019dee5a4e062c/chrome/test/data/extensions/api_test/webnavigation/simpleLoad/test_simpleLoad.html
[delete] https://crrev.com/f7c765c5d213236ea8e76b6d6cee1f81c1982fc6/chrome/test/data/extensions/api_test/webnavigation/srcdoc/framework.js
[modify] https://crrev.com/647dc9d1109f473f7cf069c3ba019dee5a4e062c/chrome/test/data/extensions/api_test/webnavigation/srcdoc/test_srcdoc.html
[delete] https://crrev.com/f7c765c5d213236ea8e76b6d6cee1f81c1982fc6/chrome/test/data/extensions/api_test/webnavigation/targetBlank/framework.js
[modify] https://crrev.com/647dc9d1109f473f7cf069c3ba019dee5a4e062c/chrome/test/data/extensions/api_test/webnavigation/targetBlank/test_targetBlank.html
[delete] https://crrev.com/f7c765c5d213236ea8e76b6d6cee1f81c1982fc6/chrome/test/data/extensions/api_test/webnavigation/userAction/framework.js
[modify] https://crrev.com/647dc9d1109f473f7cf069c3ba019dee5a4e062c/chrome/test/data/extensions/api_test/webnavigation/userAction/test_userAction.html
[modify] https://crrev.com/647dc9d1109f473f7cf069c3ba019dee5a4e062c/extensions/browser/extension_protocols.cc
[modify] https://crrev.com/647dc9d1109f473f7cf069c3ba019dee5a4e062c/extensions/browser/extension_protocols.h

Status: Fixed (was: Started)

Sign in to add a comment