• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 // Copyright (c) 2011 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 #include "content/browser/browser_url_handler_impl.h"
6 #include "content/public/test/test_browser_context.h"
7 #include "testing/gtest/include/gtest/gtest.h"
8 #include "url/gurl.h"
9 
10 namespace content {
11 
12 class BrowserURLHandlerImplTest : public testing::Test {
13 };
14 
15 // Test URL rewriter that rewrites all "foo://" URLs to "bar://bar".
FooRewriter(GURL * url,BrowserContext * browser_context)16 static bool FooRewriter(GURL* url, BrowserContext* browser_context) {
17   if (url->scheme() == "foo") {
18     *url = GURL("bar://bar");
19     return true;
20   }
21   return false;
22 }
23 
24 // Test URL rewriter that rewrites all "bar://" URLs to "foo://foo".
BarRewriter(GURL * url,BrowserContext * browser_context)25 static bool BarRewriter(GURL* url, BrowserContext* browser_context) {
26   if (url->scheme() == "bar") {
27     *url = GURL("foo://foo");
28     return true;
29   }
30   return false;
31 }
32 
TEST_F(BrowserURLHandlerImplTest,BasicRewriteAndReverse)33 TEST_F(BrowserURLHandlerImplTest, BasicRewriteAndReverse) {
34   TestBrowserContext browser_context;
35   BrowserURLHandlerImpl handler;
36 
37   handler.AddHandlerPair(FooRewriter, BarRewriter);
38 
39   GURL url("foo://bar");
40   GURL original_url(url);
41   bool reverse_on_redirect = false;
42   handler.RewriteURLIfNecessary(&url, &browser_context, &reverse_on_redirect);
43   ASSERT_TRUE(reverse_on_redirect);
44   ASSERT_EQ("bar://bar", url.spec());
45 
46   // Check that reversing the URL works.
47   GURL saved_url(url);
48   bool reversed = handler.ReverseURLRewrite(&url,
49                                             original_url,
50                                             &browser_context);
51   ASSERT_TRUE(reversed);
52   ASSERT_EQ("foo://foo", url.spec());
53 
54   // Check that reversing the URL only works with a matching |original_url|.
55   url = saved_url;
56   original_url = GURL("bam://bam");  // Won't be matched by FooRewriter.
57   reversed = handler.ReverseURLRewrite(&url, original_url, &browser_context);
58   ASSERT_FALSE(reversed);
59   ASSERT_EQ(saved_url, url);
60 }
61 
TEST_F(BrowserURLHandlerImplTest,NullHandlerReverse)62 TEST_F(BrowserURLHandlerImplTest, NullHandlerReverse) {
63   TestBrowserContext browser_context;
64   BrowserURLHandlerImpl handler;
65 
66   GURL url("bar://foo");
67   GURL original_url(url);
68 
69   handler.AddHandlerPair(BrowserURLHandlerImpl::null_handler(), FooRewriter);
70   bool reversed = handler.ReverseURLRewrite(&url,
71                                             original_url,
72                                             &browser_context);
73   ASSERT_FALSE(reversed);
74   ASSERT_EQ(original_url, url);
75 
76   handler.AddHandlerPair(BrowserURLHandlerImpl::null_handler(), BarRewriter);
77   reversed = handler.ReverseURLRewrite(&url, original_url, &browser_context);
78   ASSERT_TRUE(reversed);
79   ASSERT_EQ("foo://foo", url.spec());
80 }
81 
82 }  // namespace content
83