// Copyright 2012 The Chromium Authors // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. #ifndef CONTENT_PUBLIC_TEST_WEB_CONTENTS_TESTER_H_ #define CONTENT_PUBLIC_TEST_WEB_CONTENTS_TESTER_H_ #include <memory> #include <string> #include <vector> #include "base/time/time.h" #include "content/public/browser/site_instance.h" #include "content/public/browser/web_contents.h" #include "third_party/blink/public/common/input/web_input_event.h" #include "third_party/blink/public/common/tokens/tokens.h" #include "third_party/blink/public/mojom/favicon/favicon_url.mojom-forward.h" #include "ui/base/page_transition_types.h" class GURL; class SkBitmap; namespace gfx { class Size; } namespace content { class BrowserContext; class NavigationSimulator; // This interface allows embedders of content/ to write tests that depend on a // test version of WebContents. This interface can be retrieved from any // WebContents that was retrieved via a call to // RenderViewHostTestHarness::GetWebContents() (directly or indirectly) or // constructed explicitly via CreateTestWebContents. // // Tests within content/ can directly static_cast WebContents objects retrieved // or created as described above to TestWebContents. // // Design note: We considered two alternatives to this separate test interface // approach: // // a) Define a TestWebContents interface that inherits from WebContents, and // have the concrete TestWebContents inherit from it as well as from // WebContentsImpl. This approach was discarded as it introduces a diamond // inheritance pattern, which means we wouldn't be e.g. able to downcast from // WebContents to WebContentsImpl using static_cast. // // b) Define a TestWebContents interface that inherits from WebContents, and // have the concrete TestWebContents implement it, using composition of a // WebContentsImpl to implement most methods. This approach was discarded as // there is a fundamental assumption in content/ that a WebContents* can be // downcast to a WebContentsImpl*, and this wouldn't be true for TestWebContents // objects. // // Tests that use a TestWebContents must also use TestRenderViewHost and // TestRenderFrameHost. They can do so by instantiating a // RenderViewHostTestEnabler. class WebContentsTester { … }; } // namespace content #endif // CONTENT_PUBLIC_TEST_WEB_CONTENTS_TESTER_H_