| // Copyright 2015 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_WEB_PUBLIC_BROWSER_URL_REWRITER_H_ | 
 | #define IOS_WEB_PUBLIC_BROWSER_URL_REWRITER_H_ | 
 |  | 
 | #include <vector> | 
 |  | 
 | class GURL; | 
 |  | 
 | namespace web { | 
 |  | 
 | class BrowserState; | 
 |  | 
 | // Some special browser-level URLs (like "about:version") are handled before | 
 | // actually being loaded by the web view, allowing the embedder to optionally | 
 | // convert them to app-specific URLs that to be handled using | 
 | // CRWNativeContentProviders. | 
 | class BrowserURLRewriter { | 
 |  public: | 
 |   // The type of functions that can process a URL.  URLRewriters return true if | 
 |   // |url| is ready to be loaded and added to the NavigationManager.  They can | 
 |   // optionally modify |url| regardless of whether they return true or false. | 
 |   typedef bool (*URLRewriter)(GURL* url, BrowserState* browser_state); | 
 |  | 
 |   // Returns the singleton instance. | 
 |   static BrowserURLRewriter* GetInstance(); | 
 |  | 
 |   // Gives every URLRewriter in |rewriters| a chance to process |url|, modifying | 
 |   // it in place.  Returns whether or not a URLRewriter returned |true|. | 
 |   static bool RewriteURLWithWriters( | 
 |       GURL* url, | 
 |       BrowserState* browser_state, | 
 |       const std::vector<BrowserURLRewriter::URLRewriter>& rewriters); | 
 |  | 
 |   // Gives every URLRewriter added via |AddURLRewriter()| a chance to process | 
 |   // |url|, modifying it in place.  Returns whether or not a URLRewriter | 
 |   // returned |true|. | 
 |   virtual bool RewriteURLIfNecessary(GURL* url, | 
 |                                      BrowserState* browser_state) = 0; | 
 |  | 
 |   // Adds |rewriter| to the list of URL rewriters.  |rewriter| must not be null. | 
 |   virtual void AddURLRewriter(URLRewriter rewriter) = 0; | 
 |  | 
 |  protected: | 
 |   virtual ~BrowserURLRewriter() {} | 
 | }; | 
 |  | 
 | }  // namespace web | 
 |  | 
 | #endif  // IOS_WEB_PUBLIC_BROWSER_URL_REWRITER_H_ |