| Index: ios/chrome/browser/ui/preload_controller.h
|
| diff --git a/ios/chrome/browser/ui/preload_controller.h b/ios/chrome/browser/ui/preload_controller.h
|
| new file mode 100644
|
| index 0000000000000000000000000000000000000000..6d8494534bb954f446a972757a188e4f04ee615d
|
| --- /dev/null
|
| +++ b/ios/chrome/browser/ui/preload_controller.h
|
| @@ -0,0 +1,122 @@
|
| +// Copyright 2012 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 IOS_CHROME_BROWSER_UI_PRELOAD_CONTROLLER_H_
|
| +#define IOS_CHROME_BROWSER_UI_PRELOAD_CONTROLLER_H_
|
| +
|
| +#import <UIKit/UIKit.h>
|
| +
|
| +#include <memory>
|
| +
|
| +#include "base/mac/scoped_nsobject.h"
|
| +#include "components/prefs/pref_change_registrar.h"
|
| +#import "ios/chrome/browser/net/connection_type_observer_bridge.h"
|
| +#import "ios/chrome/browser/prefs/pref_observer_bridge.h"
|
| +#import "ios/chrome/browser/tabs/tab_delegate.h"
|
| +#import "ios/chrome/browser/ui/omnibox/preload_provider.h"
|
| +#include "ios/web/public/referrer.h"
|
| +#import "ios/web/public/web_state/ui/crw_native_content_provider.h"
|
| +#import "net/url_request/url_fetcher.h"
|
| +#include "ui/base/page_transition_types.h"
|
| +#include "url/gurl.h"
|
| +
|
| +namespace ios {
|
| +class ChromeBrowserState;
|
| +}
|
| +
|
| +class PrefetchDelegate;
|
| +@protocol PreloadControllerDelegate;
|
| +@class Tab;
|
| +
|
| +// ID of the URLFetcher responsible for prefetches.
|
| +extern const int kPreloadControllerURLFetcherID;
|
| +
|
| +// PreloadController owns and manages a Tab that contains a prerendered
|
| +// webpage. This class contains methods to queue and cancel prerendering for a
|
| +// given URL as well as a method to return the prerendered Tab.
|
| +//
|
| +// This class also handles queuing and canceling prefetch requests for a given
|
| +// URL. The prefetched content is stored in the network layer cache so there is
|
| +// no API to expose that content to users of this class.
|
| +@interface PreloadController : NSObject<CRWNativeContentProvider,
|
| + PrefObserverDelegate,
|
| + PreloadProvider,
|
| + TabDelegate,
|
| + CRConnectionTypeObserverBridge> {
|
| + @private
|
| + ios::ChromeBrowserState* browserState_; // Weak.
|
| +
|
| + // The prerendered tab. Can be nil.
|
| + base::scoped_nsobject<Tab> tab_;
|
| +
|
| + // The URL that is prerendered in |tab_|. This can be different from the
|
| + // value returned by |tab_.url|, for example in cases where there was a
|
| + // redirect.
|
| + //
|
| + // When choosing whether or not to use a prerendered Tab,
|
| + // BrowserViewController compares the URL being loaded by the omnibox with the
|
| + // URL of the prerendered Tab. Comparing against the Tab's currently URL
|
| + // could return false negatives in cases of redirect, hence the need to store
|
| + // the originally prerendered URL.
|
| + GURL prerenderedURL_;
|
| +
|
| + // The URL that is scheduled to be prerendered, its associated transition and
|
| + // referrer. |scheduledTransition_| and |scheduledReferrer_| are not valid
|
| + // when |scheduledURL_| is empty.
|
| + GURL scheduledURL_;
|
| + ui::PageTransition scheduledTransition_;
|
| + web::Referrer scheduledReferrer_;
|
| +
|
| + // The most-recently prefetched URL, or nil if there have been no prefetched
|
| + // URLs.
|
| + GURL prefetchedURL_;
|
| +
|
| + // The URLFetcher and associated delegate used to prefetch URLs. The delegate
|
| + // simply forwards callbacks from URLFetcher back to the PrerenderController.
|
| + std::unique_ptr<PrefetchDelegate> prefetcherDelegate_;
|
| + std::unique_ptr<net::URLFetcher> prefetcher_;
|
| +
|
| + // Bridge to listen to pref changes.
|
| + std::unique_ptr<PrefObserverBridge> observerBridge_;
|
| + // Registrar for pref changes notifications.
|
| + PrefChangeRegistrar prefChangeRegistrar_;
|
| + // Observer for the WWAN setting. Contains a valid object only if the
|
| + // instant setting is set to wifi-only.
|
| + std::unique_ptr<ConnectionTypeObserverBridge> connectionTypeObserverBridge_;
|
| +
|
| + // Whether or not the preference is enabled.
|
| + BOOL enabled_;
|
| + // Whether or not prerendering is only when on wifi.
|
| + BOOL wifiOnly_;
|
| + // Whether or not the current connection is using WWAN.
|
| + BOOL usingWWAN_;
|
| +
|
| + // Number of successful prerenders (i.e. the user viewed the prerendered page)
|
| + // during the lifetime of this controller.
|
| + int successfulPrerendersPerSessionCount_;
|
| +
|
| + id<PreloadControllerDelegate> delegate_; // weak
|
| +}
|
| +
|
| +// The URL of the currently prerendered Tab. Empty if there is no prerendered
|
| +// Tab.
|
| +@property(nonatomic, readonly, assign) GURL prerenderedURL;
|
| +// The URL of the currently prefetched content. Empty if there is no prefetched
|
| +// content.
|
| +@property(nonatomic, readonly, assign) GURL prefetchedURL;
|
| +@property(nonatomic, assign) id<PreloadControllerDelegate> delegate;
|
| +
|
| +// Designated initializer.
|
| +- (instancetype)initWithBrowserState:(ios::ChromeBrowserState*)browserState;
|
| +
|
| +// Returns the currently prerendered Tab, or nil if none exists. The caller
|
| +// must retain the returned Tab if needed. After this method is called, the
|
| +// PrerenderController reverts to a non-prerendering state.
|
| +- (Tab*)releasePrerenderContents;
|
| +
|
| +// Returns true if the content of |url| has been prefetched.
|
| +- (BOOL)hasPrefetchedURL:(const GURL&)url;
|
| +@end
|
| +
|
| +#endif // IOS_CHROME_BROWSER_UI_PRELOAD_CONTROLLER_H_
|
|
|