blob: 63b08bb45a7d227187437ae6ee38222a906002f9 [file] [log] [blame]
// Copyright 2019 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 CONTENT_BROWSER_SERVICE_WORKER_FAKE_EMBEDDED_WORKER_INSTANCE_CLIENT_H_
#define CONTENT_BROWSER_SERVICE_WORKER_FAKE_EMBEDDED_WORKER_INSTANCE_CLIENT_H_
#include <string>
#include "base/memory/weak_ptr.h"
#include "mojo/public/cpp/bindings/binding.h"
#include "third_party/blink/public/mojom/service_worker/embedded_worker.mojom.h"
namespace content {
class EmbeddedWorkerTestHelper;
// The default fake for blink::mojom::EmbeddedWorkerInstanceClient. It responds
// to Start/Stop/etc messages without starting an actual service worker thread.
// It is owned by EmbeddedWorkerTestHelper and by default the lifetime is tied
// to the Mojo connection.
class FakeEmbeddedWorkerInstanceClient
: public blink::mojom::EmbeddedWorkerInstanceClient {
public:
// |helper| must outlive this instance.
explicit FakeEmbeddedWorkerInstanceClient(EmbeddedWorkerTestHelper* helper);
~FakeEmbeddedWorkerInstanceClient() override;
EmbeddedWorkerTestHelper* helper() { return helper_; }
base::WeakPtr<FakeEmbeddedWorkerInstanceClient> GetWeakPtr();
blink::mojom::EmbeddedWorkerInstanceHostAssociatedPtr& host() {
return host_;
}
void Bind(blink::mojom::EmbeddedWorkerInstanceClientRequest request);
void RunUntilBound();
// Closes the binding and deletes |this|.
void Disconnect();
protected:
// blink::mojom::EmbeddedWorkerInstanceClient implementation.
void StartWorker(blink::mojom::EmbeddedWorkerStartParamsPtr params) override;
void StopWorker() override;
void ResumeAfterDownload() override;
void AddMessageToConsole(blink::mojom::ConsoleMessageLevel level,
const std::string& message) override {}
void BindDevToolsAgent(
blink::mojom::DevToolsAgentHostAssociatedPtrInfo,
blink::mojom::DevToolsAgentAssociatedRequest) override {}
virtual void EvaluateScript();
void DidPopulateScriptCacheMap();
blink::mojom::EmbeddedWorkerStartParamsPtr& start_params() {
return start_params_;
}
void OnConnectionError();
private:
// |helper_| owns |this|.
EmbeddedWorkerTestHelper* const helper_;
blink::mojom::EmbeddedWorkerStartParamsPtr start_params_;
blink::mojom::EmbeddedWorkerInstanceHostAssociatedPtr host_;
mojo::Binding<blink::mojom::EmbeddedWorkerInstanceClient> binding_;
base::OnceClosure quit_closure_for_bind_;
base::WeakPtrFactory<FakeEmbeddedWorkerInstanceClient> weak_factory_;
DISALLOW_COPY_AND_ASSIGN(FakeEmbeddedWorkerInstanceClient);
};
// A EmbeddedWorkerInstanceClient fake that doesn't respond to the Start/Stop
// message until instructed to do so.
class DelayedFakeEmbeddedWorkerInstanceClient
: public FakeEmbeddedWorkerInstanceClient {
public:
explicit DelayedFakeEmbeddedWorkerInstanceClient(
EmbeddedWorkerTestHelper* helper);
~DelayedFakeEmbeddedWorkerInstanceClient() override;
// Unblocks the Start/StopWorker() call to this instance. May be called before
// or after the Start/StopWorker() call.
void UnblockStartWorker();
void UnblockStopWorker();
// Returns after Start/StopWorker() is called.
void RunUntilStartWorker();
void RunUntilStopWorker();
protected:
void StartWorker(blink::mojom::EmbeddedWorkerStartParamsPtr params) override;
void StopWorker() override;
private:
void CompleteStopWorker();
enum class State { kWillBlock, kWontBlock, kBlocked, kCompleted };
State start_state_ = State::kWillBlock;
State stop_state_ = State::kWillBlock;
base::OnceClosure quit_closure_for_start_worker_;
base::OnceClosure quit_closure_for_stop_worker_;
// Valid after StartWorker() until start is unblocked.
blink::mojom::EmbeddedWorkerStartParamsPtr start_params_;
DISALLOW_COPY_AND_ASSIGN(DelayedFakeEmbeddedWorkerInstanceClient);
};
} // namespace content
#endif // CONTENT_BROWSER_SERVICE_WORKER_FAKE_EMBEDDED_WORKER_INSTANCE_CLIENT_H_