diff options
author | Allan Sandfeld Jensen <allan.jensen@qt.io> | 2020-11-18 16:35:47 +0100 |
---|---|---|
committer | Allan Sandfeld Jensen <allan.jensen@qt.io> | 2020-11-18 15:45:54 +0000 |
commit | 32f5a1c56531e4210bc4cf8d8c7825d66e081888 (patch) | |
tree | eeeec6822f4d738d8454525233fd0e2e3a659e6d /chromium/third_party/blink/renderer/modules/cache_storage/cache_test.cc | |
parent | 99677208ff3b216fdfec551fbe548da5520cd6fb (diff) | |
download | qtwebengine-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.cc | 77 |
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 |