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

Unified Diff: chrome/renderer/net/net_error_helper_core.h

Issue 570253002: Componentize NetErrorHelperCore (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Fix Win64 Created 6 years, 3 months 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: chrome/renderer/net/net_error_helper_core.h
diff --git a/chrome/renderer/net/net_error_helper_core.h b/chrome/renderer/net/net_error_helper_core.h
deleted file mode 100644
index b09535bf5a7dc28d801bd179bf6f1f0710d86897..0000000000000000000000000000000000000000
--- a/chrome/renderer/net/net_error_helper_core.h
+++ /dev/null
@@ -1,266 +0,0 @@
-// Copyright 2013 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 CHROME_RENDERER_NET_NET_ERROR_HELPER_CORE_H_
-#define CHROME_RENDERER_NET_NET_ERROR_HELPER_CORE_H_
-
-#include <string>
-
-#include "base/callback.h"
-#include "base/memory/scoped_ptr.h"
-#include "base/memory/weak_ptr.h"
-#include "base/timer/timer.h"
-#include "chrome/common/localized_error.h"
-#include "chrome/common/net/net_error_info.h"
-#include "url/gurl.h"
-
-namespace base {
-class ListValue;
-}
-
-namespace blink {
-struct WebURLError;
-}
-
-// Class that contains the logic for how the NetErrorHelper. This allows for
-// testing the logic without a RenderView or WebFrame, which are difficult to
-// mock, and for testing races which are impossible to reliably reproduce
-// with real RenderViews or WebFrames.
-class NetErrorHelperCore {
- public:
- enum FrameType {
- MAIN_FRAME,
- SUB_FRAME,
- };
-
- enum PageType {
- NON_ERROR_PAGE,
- ERROR_PAGE,
- };
-
- enum Button {
- NO_BUTTON,
- RELOAD_BUTTON,
- LOAD_STALE_BUTTON,
- MORE_BUTTON,
- };
-
- // The Delegate handles all interaction with the RenderView, WebFrame, and
- // the network, as well as the generation of error pages.
- class Delegate {
- public:
- // Generates an error page's HTML for the given error.
- virtual void GenerateLocalizedErrorPage(
- const blink::WebURLError& error,
- bool is_failed_post,
- scoped_ptr<LocalizedError::ErrorPageParams> params,
- bool* reload_button_shown,
- bool* load_stale_button_shown,
- std::string* html) const = 0;
-
- // Loads the given HTML in the main frame for use as an error page.
- virtual void LoadErrorPageInMainFrame(const std::string& html,
- const GURL& failed_url) = 0;
-
- // Create extra Javascript bindings in the error page.
- virtual void EnablePageHelperFunctions() = 0;
-
- // Updates the currently displayed error page with a new error code. The
- // currently displayed error page must have finished loading, and must have
- // been generated by a call to GenerateLocalizedErrorPage.
- virtual void UpdateErrorPage(const blink::WebURLError& error,
- bool is_failed_post) = 0;
-
- // Fetches an error page and calls into OnErrorPageFetched when done. Any
- // previous fetch must either be canceled or finished before calling. Can't
- // be called synchronously after a previous fetch completes.
- virtual void FetchNavigationCorrections(
- const GURL& navigation_correction_url,
- const std::string& navigation_correction_request_body) = 0;
-
- // Cancels fetching navigation corrections. Does nothing if no fetch is
- // ongoing.
- virtual void CancelFetchNavigationCorrections() = 0;
-
- // Sends an HTTP request used to track which link on the page was clicked to
- // the navigation correction service.
- virtual void SendTrackingRequest(
- const GURL& tracking_url,
- const std::string& tracking_request_body) = 0;
-
- // Starts a reload of the page in the observed frame.
- virtual void ReloadPage() = 0;
-
- // Load the original page from cache.
- virtual void LoadPageFromCache(const GURL& page_url) = 0;
-
- protected:
- virtual ~Delegate() {}
- };
-
- struct NavigationCorrectionParams {
- NavigationCorrectionParams();
- ~NavigationCorrectionParams();
-
- // URL used both for getting the suggestions and tracking clicks.
- GURL url;
-
- std::string language;
- std::string country_code;
- std::string api_key;
- GURL search_url;
- };
-
- NetErrorHelperCore(Delegate* delegate,
- bool auto_reload_enabled,
- bool auto_reload_visible_only,
- bool is_visible);
- ~NetErrorHelperCore();
-
- // Examines |frame| and |error| to see if this is an error worthy of a DNS
- // probe. If it is, initializes |error_strings| based on |error|,
- // |is_failed_post|, and |locale| with suitable strings and returns true.
- // If not, returns false, in which case the caller should look up error
- // strings directly using LocalizedError::GetNavigationErrorStrings.
- //
- // Updates the NetErrorHelper with the assumption the page will be loaded
- // immediately.
- void GetErrorHTML(FrameType frame_type,
- const blink::WebURLError& error,
- bool is_failed_post,
- std::string* error_html);
-
- // These methods handle tracking the actual state of the page.
- void OnStartLoad(FrameType frame_type, PageType page_type);
- void OnCommitLoad(FrameType frame_type, const GURL& url);
- void OnFinishLoad(FrameType frame_type);
- void OnStop();
- void OnWasShown();
- void OnWasHidden();
-
- void CancelPendingFetches();
-
- // Called when an error page have has been retrieved over the network. |html|
- // must be an empty string on error.
- void OnNavigationCorrectionsFetched(const std::string& corrections,
- const std::string& accept_languages,
- bool is_rtl);
-
- // Notifies |this| that network error information from the browser process
- // has been received.
- void OnNetErrorInfo(chrome_common_net::DnsProbeStatus status);
-
- void OnSetNavigationCorrectionInfo(const GURL& navigation_correction_url,
- const std::string& language,
- const std::string& country_code,
- const std::string& api_key,
- const GURL& search_url);
- // Notifies |this| that the network's online status changed.
- // Handler for NetworkStateChanged notification from the browser process. If
- // the network state changes to online, this method is responsible for
- // starting the auto-reload process.
- //
- // Warning: if there are many tabs sitting at an error page, this handler will
- // be run at the same time for each of their top-level renderframes, which can
- // cause many requests to be started at the same time. There's no current
- // protection against this kind of "reload storm".
- //
- // TODO(rdsmith): prevent the reload storm.
- void NetworkStateChanged(bool online);
-
- int auto_reload_count() const { return auto_reload_count_; }
-
- bool ShouldSuppressErrorPage(FrameType frame_type, const GURL& url);
-
- void set_timer_for_testing(scoped_ptr<base::Timer> timer) {
- auto_reload_timer_.reset(timer.release());
- }
-
- // Execute the effect of pressing the specified button.
- // Note that the visual effects of the 'MORE' button are taken
- // care of in JavaScript.
- void ExecuteButtonPress(Button button);
-
- // Reports to the correction service that the link with the given tracking
- // ID was clicked. Only pages generated with information from the service
- // have links with tracking IDs. Duplicate requests from the same page with
- // the same tracking ID are ignored.
- void TrackClick(int tracking_id);
-
- private:
- struct ErrorPageInfo;
-
- // Gets HTML for a main frame error page. Depending on
- // |pending_error_page_info|, may use the navigation correction service, or
- // show a DNS probe error page. May modify |pending_error_page_info|.
- void GetErrorHtmlForMainFrame(ErrorPageInfo* pending_error_page_info,
- std::string* error_html);
-
- // Updates the currently displayed error page with a new error based on the
- // most recently received DNS probe result. The page must have finished
- // loading before this is called.
- void UpdateErrorPage();
-
- blink::WebURLError GetUpdatedError(const blink::WebURLError& error) const;
-
- void Reload();
- bool MaybeStartAutoReloadTimer();
- void StartAutoReloadTimer();
- void AutoReloadTimerFired();
- void PauseAutoReloadTimer();
-
- static bool IsReloadableError(const ErrorPageInfo& info);
-
- Delegate* delegate_;
-
- // The last DnsProbeStatus received from the browser.
- chrome_common_net::DnsProbeStatus last_probe_status_;
-
- // Information for the provisional / "pre-provisional" error page. NULL when
- // there's no page pending, or the pending page is not an error page.
- scoped_ptr<ErrorPageInfo> pending_error_page_info_;
-
- // Information for the committed error page. NULL when the committed page is
- // not an error page.
- scoped_ptr<ErrorPageInfo> committed_error_page_info_;
-
- NavigationCorrectionParams navigation_correction_params_;
-
- // True if auto-reload is enabled at all.
- const bool auto_reload_enabled_;
-
- // True if auto-reload should only run when the observed frame is visible.
- const bool auto_reload_visible_only_;
-
- // Timer used to wait for auto-reload attempts.
- scoped_ptr<base::Timer> auto_reload_timer_;
-
- // True if the auto-reload timer would be running but is waiting for an
- // offline->online network transition.
- bool auto_reload_paused_;
-
- // True if there is an uncommitted-but-started load, error page or not. This
- // is used to inhibit starting auto-reload when an error page finishes, in
- // case this happens:
- // Error page starts
- // Error page commits
- // Non-error page starts
- // Error page finishes
- bool uncommitted_load_started_;
-
- // Is the browser online?
- bool online_;
-
- // Is the RenderFrame this object is observing visible?
- bool visible_;
-
- int auto_reload_count_;
-
- // This value is set only when a navigation has been initiated from
- // the error page. It is used to detect when such navigations result
- // in errors.
- Button navigation_from_button_;
-};
-
-#endif // CHROME_RENDERER_NET_NET_ERROR_HELPER_CORE_H_

Powered by Google App Engine
This is Rietveld 408576698