// Copyright 2016 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 COMPONENTS_TEST_RUNNER_WEB_WIDGET_TEST_CLIENT_H_
#define COMPONENTS_TEST_RUNNER_WEB_WIDGET_TEST_CLIENT_H_

#include "base/macros.h"
#include "base/memory/weak_ptr.h"
#include "third_party/WebKit/public/web/WebWidgetClient.h"

namespace test_runner {

class TestRunner;
class TestRunnerForSpecificView;
class WebTestDelegate;
class WebWidgetTestProxyBase;

// WebWidgetTestClient implements WebWidgetClient interface, providing behavior
// expected by tests.  WebWidgetTestClient ends up used by WebViewTestProxy
// which coordinates forwarding WebWidgetClient calls either to
// WebWidgetTestClient or to the product code (i.e. currently to
// RenderViewImpl).
class WebWidgetTestClient : public blink::WebWidgetClient {
 public:
  // Caller has to ensure that all arguments (i.e. |test_runner| and |delegate|)
  // live longer than |this|.
  WebWidgetTestClient(WebWidgetTestProxyBase* web_widget_test_proxy_base);

  virtual ~WebWidgetTestClient();

  // WebWidgetClient overrides needed by WebWidgetTestProxy.
  blink::WebScreenInfo screenInfo() override;
  void scheduleAnimation() override;
  bool requestPointerLock() override;
  void requestPointerUnlock() override;
  bool isPointerLocked() override;
  void setToolTipText(const blink::WebString& text,
                      blink::WebTextDirection direction) override;
  void startDragging(blink::WebReferrerPolicy policy,
                     const blink::WebDragData& data,
                     blink::WebDragOperationsMask mask,
                     const blink::WebImage& image,
                     const blink::WebPoint& point) override;

 private:
  void AnimateNow();

  WebTestDelegate* delegate();
  TestRunnerForSpecificView* view_test_runner();
  TestRunner* test_runner();

  // Borrowed pointer to WebWidgetTestProxyBase.
  WebWidgetTestProxyBase* web_widget_test_proxy_base_;

  bool animation_scheduled_;

  base::WeakPtrFactory<WebWidgetTestClient> weak_factory_;

  DISALLOW_COPY_AND_ASSIGN(WebWidgetTestClient);
};

}  // namespace test_runner

#endif  // COMPONENTS_TEST_RUNNER_WEB_WIDGET_TEST_CLIENT_H_
