1// Copyright (c) 2012 The Chromium Authors. All rights reserved. 2// Use of this source code is governed by a BSD-style license that can be 3// found in the LICENSE file. 4 5#ifndef CONTENT_BROWSER_BROWSER_URL_HANDLER_IMPL_H_ 6#define CONTENT_BROWSER_BROWSER_URL_HANDLER_IMPL_H_ 7 8#include <vector> 9#include <utility> 10 11#include "base/gtest_prod_util.h" 12#include "base/memory/singleton.h" 13#include "content/public/browser/browser_url_handler.h" 14 15class GURL; 16 17namespace content { 18class BrowserContext; 19 20class CONTENT_EXPORT BrowserURLHandlerImpl : public BrowserURLHandler { 21 public: 22 // Returns the singleton instance. 23 static BrowserURLHandlerImpl* GetInstance(); 24 25 // BrowserURLHandler implementation: 26 virtual void RewriteURLIfNecessary(GURL* url, 27 BrowserContext* browser_context, 28 bool* reverse_on_redirect) OVERRIDE; 29 // Add the specified handler pair to the list of URL handlers. 30 virtual void AddHandlerPair(URLHandler handler, 31 URLHandler reverse_handler) OVERRIDE; 32 33 // Reverses the rewriting that was done for |original| using the new |url|. 34 bool ReverseURLRewrite(GURL* url, const GURL& original, 35 BrowserContext* browser_context); 36 37 private: 38 // This object is a singleton: 39 BrowserURLHandlerImpl(); 40 virtual ~BrowserURLHandlerImpl(); 41 friend struct DefaultSingletonTraits<BrowserURLHandlerImpl>; 42 43 // The list of known URLHandlers, optionally with reverse-rewriters. 44 typedef std::pair<URLHandler, URLHandler> HandlerPair; 45 std::vector<HandlerPair> url_handlers_; 46 47 FRIEND_TEST_ALL_PREFIXES(BrowserURLHandlerImplTest, BasicRewriteAndReverse); 48 FRIEND_TEST_ALL_PREFIXES(BrowserURLHandlerImplTest, NullHandlerReverse); 49 50 DISALLOW_COPY_AND_ASSIGN(BrowserURLHandlerImpl); 51}; 52 53} // namespace content 54 55#endif // CONTENT_BROWSER_BROWSER_URL_HANDLER_IMPL_H_ 56