summaryrefslogtreecommitdiff
path: root/chromium/third_party/blink/renderer/modules/cache_storage/cache_test.cc
diff options
context:
space:
mode:
authorAllan Sandfeld Jensen <allan.jensen@qt.io>2020-11-18 16:35:47 +0100
committerAllan Sandfeld Jensen <allan.jensen@qt.io>2020-11-18 15:45:54 +0000
commit32f5a1c56531e4210bc4cf8d8c7825d66e081888 (patch)
treeeeeec6822f4d738d8454525233fd0e2e3a659e6d /chromium/third_party/blink/renderer/modules/cache_storage/cache_test.cc
parent99677208ff3b216fdfec551fbe548da5520cd6fb (diff)
downloadqtwebengine-chromium-32f5a1c56531e4210bc4cf8d8c7825d66e081888.tar.gz
BASELINE: Update Chromium to 87.0.4280.67
Change-Id: Ib157360be8c2ffb2c73125751a89f60e049c1d54 Reviewed-by: Allan Sandfeld Jensen <allan.jensen@qt.io>
Diffstat (limited to 'chromium/third_party/blink/renderer/modules/cache_storage/cache_test.cc')
-rw-r--r--chromium/third_party/blink/renderer/modules/cache_storage/cache_test.cc77
1 files changed, 67 insertions, 10 deletions
diff --git a/chromium/third_party/blink/renderer/modules/cache_storage/cache_test.cc b/chromium/third_party/blink/renderer/modules/cache_storage/cache_test.cc
index ad61fb621e3..1a3b3a6d5c1 100644
--- a/chromium/third_party/blink/renderer/modules/cache_storage/cache_test.cc
+++ b/chromium/third_party/blink/renderer/modules/cache_storage/cache_test.cc
@@ -29,6 +29,7 @@
#include "third_party/blink/renderer/bindings/core/v8/v8_request_init.h"
#include "third_party/blink/renderer/bindings/core/v8/v8_response.h"
#include "third_party/blink/renderer/bindings/core/v8/v8_response_init.h"
+#include "third_party/blink/renderer/core/dom/abort_controller.h"
#include "third_party/blink/renderer/core/dom/document.h"
#include "third_party/blink/renderer/core/execution_context/execution_context.h"
#include "third_party/blink/renderer/core/fetch/body_stream_buffer.h"
@@ -55,7 +56,7 @@ class ScopedFetcherForTests final
: public GarbageCollected<ScopedFetcherForTests>,
public GlobalFetch::ScopedFetcher {
public:
- ScopedFetcherForTests() : fetch_count_(0), expected_url_(nullptr) {}
+ ScopedFetcherForTests() = default;
ScriptPromise Fetch(ScriptState* script_state,
const RequestInfo& request_info,
@@ -90,7 +91,7 @@ class ScopedFetcherForTests final
}
void SetResponse(Response* response) { response_ = response; }
- int FetchCount() const { return fetch_count_; }
+ uint32_t FetchCount() const override { return fetch_count_; }
void Trace(Visitor* visitor) const override {
visitor->Trace(response_);
@@ -98,8 +99,8 @@ class ScopedFetcherForTests final
}
private:
- int fetch_count_;
- const String* expected_url_;
+ uint32_t fetch_count_ = 0;
+ const String* expected_url_ = nullptr;
Member<Response> response_;
};
@@ -257,19 +258,46 @@ class NotImplementedErrorCache : public ErrorCacheForTests {
mojom::blink::CacheStorageError::kErrorNotImplemented) {}
};
+class TestCache : public Cache {
+ public:
+ TestCache(
+ GlobalFetch::ScopedFetcher* fetcher,
+ mojo::PendingAssociatedRemote<mojom::blink::CacheStorageCache> remote,
+ scoped_refptr<base::SingleThreadTaskRunner> task_runner)
+ : Cache(fetcher, std::move(remote), std::move(task_runner)) {}
+
+ bool IsAborted() const {
+ return abort_controller_ && abort_controller_->signal()->aborted();
+ }
+
+ void Trace(Visitor* visitor) const override {
+ visitor->Trace(abort_controller_);
+ Cache::Trace(visitor);
+ }
+
+ protected:
+ AbortController* CreateAbortController(ExecutionContext* context) override {
+ if (!abort_controller_)
+ abort_controller_ = AbortController::Create(context);
+ return abort_controller_;
+ }
+
+ private:
+ Member<blink::AbortController> abort_controller_;
+};
+
class CacheStorageTest : public PageTestBase {
public:
void SetUp() override { PageTestBase::SetUp(IntSize(1, 1)); }
- Cache* CreateCache(ScopedFetcherForTests* fetcher,
- std::unique_ptr<ErrorCacheForTests> cache) {
+ TestCache* CreateCache(ScopedFetcherForTests* fetcher,
+ std::unique_ptr<ErrorCacheForTests> cache) {
mojo::AssociatedRemote<mojom::blink::CacheStorageCache> cache_remote;
cache_ = std::move(cache);
receiver_ = std::make_unique<
mojo::AssociatedReceiver<mojom::blink::CacheStorageCache>>(
- cache_.get(),
- cache_remote.BindNewEndpointAndPassDedicatedReceiverForTesting());
- return MakeGarbageCollected<Cache>(
+ cache_.get(), cache_remote.BindNewEndpointAndPassDedicatedReceiver());
+ return MakeGarbageCollected<TestCache>(
fetcher, cache_remote.Unbind(),
blink::scheduler::GetSingleThreadTaskRunnerForTesting());
}
@@ -750,11 +778,40 @@ TEST_F(CacheStorageTest, Add) {
GetScriptState(), RequestToRequestInfo(request), exception_state);
EXPECT_EQ(kNotImplementedString, GetRejectString(add_result));
- EXPECT_EQ(1, fetcher->FetchCount());
+ EXPECT_EQ(1u, fetcher->FetchCount());
EXPECT_EQ("dispatchBatch",
test_cache()->GetAndClearLastErrorWebCacheMethodCalled());
}
+// Verify an error response causes Cache::addAll() to trigger its associated
+// AbortController to cancel outstanding requests.
+TEST_F(CacheStorageTest, AddAllAbort) {
+ ScriptState::Scope scope(GetScriptState());
+ DummyExceptionStateForTesting exception_state;
+ auto* fetcher = MakeGarbageCollected<ScopedFetcherForTests>();
+ const String url = "http://www.cacheadd.test/";
+ const String content_type = "text/plain";
+ const String content = "hello cache";
+
+ TestCache* cache =
+ CreateCache(fetcher, std::make_unique<NotImplementedErrorCache>());
+
+ Request* request = NewRequestFromUrl(url);
+ fetcher->SetExpectedFetchUrl(&url);
+
+ Response* response = Response::error(GetScriptState());
+ fetcher->SetResponse(response);
+
+ HeapVector<RequestInfo> info_list;
+ info_list.push_back(RequestToRequestInfo(request));
+
+ ScriptPromise promise =
+ cache->addAll(GetScriptState(), info_list, exception_state);
+
+ EXPECT_EQ("TypeError: Request failed", GetRejectString(promise));
+ EXPECT_TRUE(cache->IsAborted());
+}
+
} // namespace
} // namespace blink