// services/network/public/mojom/web_bundle_handle.mojom-blink-test-utils.h is auto generated by mojom_bindings_generator.py, do not edit

// Copyright 2019 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

#ifndef SERVICES_NETWORK_PUBLIC_MOJOM_WEB_BUNDLE_HANDLE_MOJOM_BLINK_TEST_UTILS_H_
#define SERVICES_NETWORK_PUBLIC_MOJOM_WEB_BUNDLE_HANDLE_MOJOM_BLINK_TEST_UTILS_H_

#include "services/network/public/mojom/web_bundle_handle.mojom-blink.h"
#include "third_party/blink/public/platform/web_common.h"


namespace network::mojom::blink {


class BLINK_PLATFORM_EXPORT WebBundleHandleInterceptorForTesting : public WebBundleHandle {
  virtual WebBundleHandle* GetForwardingInterface() = 0;
  void Clone(::mojo::PendingReceiver<WebBundleHandle> receiver) override;
  void OnWebBundleError(WebBundleErrorType type, const WTF::String& message) override;
  void OnWebBundleLoadFinished(bool success) override;
};
class BLINK_PLATFORM_EXPORT WebBundleHandleAsyncWaiter {
 public:
  explicit WebBundleHandleAsyncWaiter(WebBundleHandle* proxy);

  WebBundleHandleAsyncWaiter(const WebBundleHandleAsyncWaiter&) = delete;
  WebBundleHandleAsyncWaiter& operator=(const WebBundleHandleAsyncWaiter&) = delete;

  ~WebBundleHandleAsyncWaiter();

 private:
  WebBundleHandle* const proxy_;
};




}  // network::mojom::blink

#endif  // SERVICES_NETWORK_PUBLIC_MOJOM_WEB_BUNDLE_HANDLE_MOJOM_BLINK_TEST_UTILS_H_