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

Unified Diff: third_party/WebKit/Source/core/workers/DedicatedWorkerTest.cpp

Issue 2571603003: Worker: Add unittests for UseCounter on DedicatedWorkerGlobalScope (Closed)
Patch Set: add test expectations for console messages Created 4 years 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
« no previous file with comments | « no previous file | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: third_party/WebKit/Source/core/workers/DedicatedWorkerTest.cpp
diff --git a/third_party/WebKit/Source/core/workers/DedicatedWorkerTest.cpp b/third_party/WebKit/Source/core/workers/DedicatedWorkerTest.cpp
index 85b1f075b65e0c8347ad1f62afbf1e471f46eff4..f499ed5ab813a2e2b752c2d091e5f4a5a98a20f8 100644
--- a/third_party/WebKit/Source/core/workers/DedicatedWorkerTest.cpp
+++ b/third_party/WebKit/Source/core/workers/DedicatedWorkerTest.cpp
@@ -3,11 +3,13 @@
// found in the LICENSE file.
#include "core/events/MessageEvent.h"
+#include "core/inspector/ConsoleMessageStorage.h"
#include "core/testing/DummyPageHolder.h"
#include "core/workers/DedicatedWorkerGlobalScope.h"
#include "core/workers/DedicatedWorkerThread.h"
#include "core/workers/InProcessWorkerMessagingProxy.h"
#include "core/workers/InProcessWorkerObjectProxy.h"
+#include "core/workers/WorkerInspectorProxy.h"
#include "core/workers/WorkerThread.h"
#include "core/workers/WorkerThreadStartupData.h"
#include "core/workers/WorkerThreadTestHelper.h"
@@ -52,6 +54,33 @@ class DedicatedWorkerThreadForTest final : public DedicatedWorkerThread {
std::move(startupData->m_starterOriginPrivilegeData),
std::move(startupData->m_workerClients));
}
+
+ // Emulates API use on DedicatedWorkerGlobalScope.
+ void countFeature(UseCounter::Feature feature) {
+ EXPECT_TRUE(isCurrentThread());
+ globalScope()->countFeature(feature);
+ workerReportingProxy()
+ .getParentFrameTaskRunners()
+ ->get(TaskType::Internal)
+ ->postTask(BLINK_FROM_HERE, crossThreadBind(&testing::exitRunLoop));
+ }
+
+ // Emulates deprecated API use on DedicatedWorkerGlobalScope.
+ void countDeprecation(UseCounter::Feature feature) {
+ EXPECT_TRUE(isCurrentThread());
+ EXPECT_EQ(0u, consoleMessageStorage()->size());
+ globalScope()->countDeprecation(feature);
+
+ // countDeprecation() should add a warning message.
+ EXPECT_EQ(1u, consoleMessageStorage()->size());
+ String consoleMessage = consoleMessageStorage()->at(0)->message();
+ EXPECT_TRUE(consoleMessage.contains("deprecated"));
+
+ workerReportingProxy()
+ .getParentFrameTaskRunners()
+ ->get(TaskType::Internal)
+ ->postTask(BLINK_FROM_HERE, crossThreadBind(&testing::exitRunLoop));
+ }
};
class InProcessWorkerMessagingProxyForTest
@@ -71,8 +100,6 @@ class InProcessWorkerMessagingProxyForTest
m_workerThread = WTF::wrapUnique(
new DedicatedWorkerThreadForTest(m_mockWorkerLoaderProxyProvider.get(),
workerObjectProxy(), threadHeapMode));
- workerThreadCreated();
-
m_mockWorkerThreadLifecycleObserver = new MockWorkerThreadLifecycleObserver(
m_workerThread->getWorkerThreadLifecycleContext());
EXPECT_CALL(*m_mockWorkerThreadLifecycleObserver, contextDestroyed())
@@ -85,6 +112,27 @@ class InProcessWorkerMessagingProxyForTest
m_mockWorkerLoaderProxyProvider.get());
}
+ void startWithSourceCode(const String& source) {
+ KURL scriptURL(ParsedURLString, "http://fake.url/");
+ m_securityOrigin = SecurityOrigin::create(scriptURL);
+ std::unique_ptr<Vector<CSPHeaderAndType>> headers =
+ WTF::makeUnique<Vector<CSPHeaderAndType>>();
+ CSPHeaderAndType headerAndType("contentSecurityPolicy",
+ ContentSecurityPolicyHeaderTypeReport);
+ headers->append(headerAndType);
+ workerThread()->start(WorkerThreadStartupData::create(
+ scriptURL, "fake user agent", source, nullptr /* cachedMetaData */,
+ DontPauseWorkerGlobalScopeOnStart, headers.get(),
+ "" /* referrerPolicy */, m_securityOrigin.get(),
+ nullptr /* workerClients */, WebAddressSpaceLocal,
+ nullptr /* originTrialTokens */, nullptr /* workerSettings */,
+ V8CacheOptionsDefault));
+
+ workerInspectorProxy()->workerThreadCreated(
+ toDocument(getExecutionContext()), m_workerThread.get(), scriptURL);
+ workerThreadCreated();
+ }
+
enum class Notification {
MessageConfirmed,
PendingActivityReported,
@@ -145,6 +193,7 @@ class InProcessWorkerMessagingProxyForTest
m_mockWorkerLoaderProxyProvider;
Persistent<MockWorkerThreadLifecycleObserver>
m_mockWorkerThreadLifecycleObserver;
+ RefPtr<SecurityOrigin> m_securityOrigin;
WTF::Deque<Notification> m_events;
bool m_blocking = false;
@@ -162,8 +211,6 @@ class DedicatedWorkerTest
m_workerMessagingProxy =
WTF::wrapUnique(new InProcessWorkerMessagingProxyForTest(
&m_page->document(), m_threadHeapMode));
- m_securityOrigin =
- SecurityOrigin::create(KURL(ParsedURLString, "http://fake.url/"));
}
void TearDown() override {
@@ -172,21 +219,6 @@ class DedicatedWorkerTest
workerMessagingProxy()->waitForNotification());
}
- void startWithSourceCode(const String& source) {
- std::unique_ptr<Vector<CSPHeaderAndType>> headers =
- WTF::makeUnique<Vector<CSPHeaderAndType>>();
- CSPHeaderAndType headerAndType("contentSecurityPolicy",
- ContentSecurityPolicyHeaderTypeReport);
- headers->append(headerAndType);
- workerThread()->start(WorkerThreadStartupData::create(
- KURL(ParsedURLString, "http://fake.url/"), "fake user agent", source,
- nullptr /* cachedMetaData */, DontPauseWorkerGlobalScopeOnStart,
- headers.get(), "" /* referrerPolicy */, m_securityOrigin.get(),
- nullptr /* workerClients */, WebAddressSpaceLocal,
- nullptr /* originTrialTokens */, nullptr /* workerSettings */,
- V8CacheOptionsDefault));
- }
-
void dispatchMessageEvent() {
workerMessagingProxy()->postMessageToWorkerGlobalScope(
nullptr /* message */, nullptr /* channels */);
@@ -200,8 +232,9 @@ class DedicatedWorkerTest
return m_workerMessagingProxy->workerThread();
}
+ Document& document() { return m_page->document(); }
+
private:
- RefPtr<SecurityOrigin> m_securityOrigin;
std::unique_ptr<DummyPageHolder> m_page;
std::unique_ptr<InProcessWorkerMessagingProxyForTest> m_workerMessagingProxy;
const BlinkGC::ThreadHeapMode m_threadHeapMode;
@@ -217,7 +250,7 @@ INSTANTIATE_TEST_CASE_P(PerThreadHeap,
TEST_P(DedicatedWorkerTest, PendingActivity_NoActivity) {
const String sourceCode = "// Do nothing";
- startWithSourceCode(sourceCode);
+ workerMessagingProxy()->startWithSourceCode(sourceCode);
// Worker initialization should be counted as a pending activity.
EXPECT_TRUE(workerMessagingProxy()->hasPendingActivity());
@@ -231,7 +264,7 @@ TEST_P(DedicatedWorkerTest, PendingActivity_NoActivity) {
TEST_P(DedicatedWorkerTest, PendingActivity_SetTimeout) {
// Start an oneshot timer on initial script evaluation.
const String sourceCode = "setTimeout(function() {}, 0);";
- startWithSourceCode(sourceCode);
+ workerMessagingProxy()->startWithSourceCode(sourceCode);
// Worker initialization should be counted as a pending activity.
EXPECT_TRUE(workerMessagingProxy()->hasPendingActivity());
@@ -250,7 +283,7 @@ TEST_P(DedicatedWorkerTest, PendingActivity_SetInterval) {
const String sourceCode =
"var id = setInterval(function() {}, 50);"
"addEventListener('message', function(event) { clearInterval(id); });";
- startWithSourceCode(sourceCode);
+ workerMessagingProxy()->startWithSourceCode(sourceCode);
// Worker initialization should be counted as a pending activity.
EXPECT_TRUE(workerMessagingProxy()->hasPendingActivity());
@@ -276,7 +309,7 @@ TEST_P(DedicatedWorkerTest, PendingActivity_SetTimeoutOnMessageEvent) {
"addEventListener('message', function(event) {"
" setTimeout(function() {}, 0);"
"});";
- startWithSourceCode(sourceCode);
+ workerMessagingProxy()->startWithSourceCode(sourceCode);
// Worker initialization should be counted as a pending activity.
EXPECT_TRUE(workerMessagingProxy()->hasPendingActivity());
@@ -314,7 +347,7 @@ TEST_P(DedicatedWorkerTest, PendingActivity_SetIntervalOnMessageEvent) {
" clearInterval(id);"
" }"
"});";
- startWithSourceCode(sourceCode);
+ workerMessagingProxy()->startWithSourceCode(sourceCode);
// Worker initialization should be counted as a pending activity.
EXPECT_TRUE(workerMessagingProxy()->hasPendingActivity());
@@ -354,4 +387,35 @@ TEST_P(DedicatedWorkerTest, PendingActivity_SetIntervalOnMessageEvent) {
EXPECT_FALSE(workerMessagingProxy()->hasPendingActivity());
}
+TEST_P(DedicatedWorkerTest, UseCounter) {
+ const String sourceCode = "// Do nothing";
+ workerMessagingProxy()->startWithSourceCode(sourceCode);
+
+ // This feature is randomly selected.
+ const UseCounter::Feature feature1 = UseCounter::Feature::RequestFileSystem;
+
+ // API use on the DedicatedWorkerGlobalScope should be recorded in UseCounter
+ // on the Document.
+ EXPECT_FALSE(UseCounter::isCounted(document(), feature1));
+ workerThread()->postTask(
+ BLINK_FROM_HERE,
+ createCrossThreadTask(&DedicatedWorkerThreadForTest::countFeature,
+ crossThreadUnretained(workerThread()), feature1));
+ testing::enterRunLoop();
+ EXPECT_TRUE(UseCounter::isCounted(document(), feature1));
+
+ // This feature is randomly selected from Deprecation::deprecationMessage().
+ const UseCounter::Feature feature2 = UseCounter::Feature::PrefixedStorageInfo;
+
+ // Deprecated API use on the DedicatedWorkerGlobalScope should be recorded in
+ // UseCounter on the Document.
+ EXPECT_FALSE(UseCounter::isCounted(document(), feature2));
+ workerThread()->postTask(
+ BLINK_FROM_HERE,
+ createCrossThreadTask(&DedicatedWorkerThreadForTest::countDeprecation,
+ crossThreadUnretained(workerThread()), feature2));
+ testing::enterRunLoop();
+ EXPECT_TRUE(UseCounter::isCounted(document(), feature2));
+}
+
} // namespace blink
« no previous file with comments | « no previous file | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698