Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(1170)

Unified Diff: content/public/test/web_contents_observer_sanity_checker.h

Issue 803873004: ContentBrowserSanityChecker (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Jiggle the comments. Created 6 years ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: content/public/test/web_contents_observer_sanity_checker.h
diff --git a/content/public/test/web_contents_observer_sanity_checker.h b/content/public/test/web_contents_observer_sanity_checker.h
new file mode 100644
index 0000000000000000000000000000000000000000..76cc3c3f9691178bcfb95dee0d6c39a57916be2a
--- /dev/null
+++ b/content/public/test/web_contents_observer_sanity_checker.h
@@ -0,0 +1,99 @@
+// Copyright 2014 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_PUBLIC_TEST_WEB_CONTENTS_OBSERVER_SANITY_CHECKER_H_
+#define CONTENT_PUBLIC_TEST_WEB_CONTENTS_OBSERVER_SANITY_CHECKER_H_
+
+#include <set>
+#include <string>
+
+#include "base/supports_user_data.h"
+#include "content/public/browser/web_contents_observer.h"
+
+namespace content {
+
+// If your test framework enables a ContentBrowserSanityChecker, this sanity
+// check is automatically installed on all WebContentses during your test.
+//
+// WebContentsObserverSanityChecker is a WebContentsObserver that sanity-checks
+// the sequence of observer calls, and CHECK()s if they are inconsistent. These
+// checks are test-only code designed to find bugs in the implementation of the
+// content layer by validating the contract between WebContents and its
+// observers.
+//
+// For example, WebContentsObserver::RenderFrameCreated announces the existence
+// of a new RenderFrameHost, so that method call must occur before the
+// RenderFrameHost is referenced by some other WebContentsObserver method.
+class WebContentsObserverSanityChecker : public WebContentsObserver,
+ public base::SupportsUserData::Data {
+ public:
+ // Enables these checks on |web_contents|. Usually ContentBrowserSanityChecker
+ // should call this for you.
+ static void Enable(WebContents* web_contents);
+
+ // WebContentsObserver implementation.
+ void RenderFrameCreated(RenderFrameHost* render_frame_host) override;
+ void RenderFrameDeleted(RenderFrameHost* render_frame_host) override;
+ void RenderFrameForInterstitialPageCreated(
+ RenderFrameHost* render_frame_host) override;
+ void RenderFrameHostChanged(RenderFrameHost* old_host,
+ RenderFrameHost* new_host) override;
+ void DidStartProvisionalLoadForFrame(RenderFrameHost* render_frame_host,
+ const GURL& validated_url,
+ bool is_error_page,
+ bool is_iframe_srcdoc) override;
+ void DidCommitProvisionalLoadForFrame(
+ RenderFrameHost* render_frame_host,
+ const GURL& url,
+ ui::PageTransition transition_type) override;
+ void DidFailProvisionalLoad(RenderFrameHost* render_frame_host,
+ const GURL& validated_url,
+ int error_code,
+ const base::string16& error_description) override;
+ void DidNavigateMainFrame(const LoadCommittedDetails& details,
+ const FrameNavigateParams& params) override;
+ void DidNavigateAnyFrame(RenderFrameHost* render_frame_host,
+ const LoadCommittedDetails& details,
+ const FrameNavigateParams& params) override;
+ void DocumentAvailableInMainFrame() override;
+ void DocumentOnLoadCompletedInMainFrame() override;
+ void DocumentLoadedInFrame(RenderFrameHost* render_frame_host) override;
+ void DidFinishLoad(RenderFrameHost* render_frame_host,
+ const GURL& validated_url) override;
+ void DidFailLoad(RenderFrameHost* render_frame_host,
+ const GURL& validated_url,
+ int error_code,
+ const base::string16& error_description) override;
+ void DidGetRedirectForResourceRequest(
+ RenderFrameHost* render_frame_host,
+ const ResourceRedirectDetails& details) override;
+ void DidOpenRequestedURL(WebContents* new_contents,
+ RenderFrameHost* source_render_frame_host,
+ const GURL& url,
+ const Referrer& referrer,
+ WindowOpenDisposition disposition,
+ ui::PageTransition transition) override;
+ void FrameDetached(RenderFrameHost* render_frame_host) override;
+ bool OnMessageReceived(const IPC::Message& message,
+ RenderFrameHost* render_frame_host) override;
+ void WebContentsDestroyed() override;
+
+ private:
+ explicit WebContentsObserverSanityChecker(WebContents* web_contents);
+ ~WebContentsObserverSanityChecker() override;
+
+ std::string Format(RenderFrameHost* render_frame_host);
+ void AssertFrameExists(RenderFrameHost* render_frame_host);
+ void AssertMainFrameExists();
+
+ std::set<std::pair<int, int>> live_routes_;
+ std::set<std::pair<int, int>> deleted_routes_;
+ bool web_contents_destroyed_;
+
+ DISALLOW_COPY_AND_ASSIGN(WebContentsObserverSanityChecker);
+};
+
+} // namespace content
+
+#endif // CONTENT_PUBLIC_TEST_WEB_CONTENTS_OBSERVER_SANITY_CHECKER_H_

Powered by Google App Engine
This is Rietveld 408576698