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

Unified Diff: chrome/browser/captive_portal/captive_portal_tab_helper.h

Issue 10837146: Fix how captive portals track which page is loading. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src/
Patch Set: sync Created 8 years, 4 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/browser/captive_portal/captive_portal_tab_helper.h
===================================================================
--- chrome/browser/captive_portal/captive_portal_tab_helper.h (revision 151564)
+++ chrome/browser/captive_portal/captive_portal_tab_helper.h (working copy)
@@ -13,6 +13,7 @@
#include "content/public/browser/notification_observer.h"
#include "content/public/browser/notification_registrar.h"
#include "content/public/browser/web_contents_observer.h"
+#include "webkit/glue/resource_type.h"
class GURL;
class Profile;
@@ -35,9 +36,9 @@
// to inform the tab's CaptivePortalLoginDetector when the tab is at a captive
// portal's login page.
//
-// TODO(mmenke): Support redirects. Needed for HSTS, which simulates redirects
-// at the network layer. Also may reduce the number of
-// unnecessary captive portal checks on high latency connections.
+// The TabHelper assumes that a WebContents can only have one RenderViewHost
+// with a provisional load at a time, and tracks only that navigation. While
+// this may not be perfectly accurate in all cases, it should be good enough.
cbentzel 2012/08/15 17:00:38 Can you be clearer in this comment about a case wh
mmenke 2012/08/16 14:30:03 Done.
//
// For the design doc, see:
// https://docs.google.com/document/d/1k-gP2sswzYNvryu9NcgN7q5XrsMlUdlUdoW9WRaEmfM/edit
@@ -85,16 +86,12 @@
// page. This is set to false when a captive portal is no longer detected.
bool IsLoginTab() const;
- private:
- friend class CaptivePortalBrowserTest;
- friend class CaptivePortalTabHelperTest;
-
+ protected:
cbentzel 2012/08/15 17:00:38 Why are these protected instead of private?
mmenke 2012/08/16 14:30:03 Since I had to override GetProvisionalChildID for
// Called by Observe in response to the corresponding event.
- void OnRedirect(int64 frame_id, const GURL& new_url);
+ void OnRedirect(int child_id,
+ ResourceType::Type resource_type,
+ const GURL& new_url);
- // Called by Observe in response to the corresponding event.
- void OnCaptivePortalResults(Result previous_result, Result result);
-
// Called to indicate a tab is at, or is navigating to, the captive portal
// login page.
void SetIsLoginTab();
@@ -102,11 +99,25 @@
// |this| takes ownership of |tab_reloader|.
void SetTabReloaderForTest(CaptivePortalTabReloader* tab_reloader);
+ const content::RenderViewHost* provisional_render_view_host() const {
+ return provisional_render_view_host_;
+ }
+
+ private:
+ friend class CaptivePortalBrowserTest;
+
+ // Called by Observe in response to the corresponding event.
+ void OnCaptivePortalResults(Result previous_result, Result result);
+
CaptivePortalTabReloader* GetTabReloaderForTest();
// Opens a login tab if the profile's active window doesn't have one already.
void OpenLoginTab();
+ // Returns the child ID of the provisional RenderViewHost's Renderer process.
+ // Returns -1 if there's no such RenderViewHost.
+ virtual int GetProvisionalChildID() const;
+
// Neither of these will ever be NULL.
scoped_ptr<CaptivePortalTabReloader> tab_reloader_;
scoped_ptr<CaptivePortalLoginDetector> login_detector_;
@@ -118,10 +129,11 @@
// net::OK, otherwise.
int pending_error_code_;
- // The ID of the main frame that's currently provisionally loaded, if there is
- // one. -1 (unknown/invalid) when there is no such frame, or when an id of
- // -1 is passed to DidStartProvisionalLoadForFrame.
- int64 provisional_main_frame_id_;
+ // The RenderViewHost with a provisional load, if any. Can either be
+ // the currently displayed RenderViewHost or a pending RenderViewHost for
+ // cross-process navitations. NULL when there's currently no provisional
+ // load.
+ content::RenderViewHost* provisional_render_view_host_;
content::NotificationRegistrar registrar_;

Powered by Google App Engine
This is Rietveld 408576698