1 // Copyright 2017 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 "chrome/browser/chromeos/arc/fileapi/chrome_content_provider_url_util.h"
6 
7 #include <string>
8 
9 #include "base/strings/string_util.h"
10 #include "net/base/escape.h"
11 
12 namespace arc {
13 
14 namespace {
15 
16 constexpr char kChromeContentProviderUrl[] =
17     "content://org.chromium.arc.chromecontentprovider/";
18 
19 }  // namespace
20 
EncodeToChromeContentProviderUrl(const GURL & url)21 GURL EncodeToChromeContentProviderUrl(const GURL& url) {
22   const std::string escaped =
23       net::EscapeQueryParamValue(url.spec(), false /* use_plus */);
24   return GURL(kChromeContentProviderUrl).Resolve(escaped);
25 }
26 
DecodeFromChromeContentProviderUrl(const GURL & chrome_content_provider_url)27 GURL DecodeFromChromeContentProviderUrl(
28     const GURL& chrome_content_provider_url) {
29   const std::string spec = chrome_content_provider_url.spec();
30   if (!base::StartsWith(spec, kChromeContentProviderUrl,
31                         base::CompareCase::SENSITIVE))
32     return GURL();
33   const std::string escaped = spec.substr(strlen(kChromeContentProviderUrl));
34   return GURL(net::UnescapeBinaryURLComponent(escaped));
35 }
36 
37 }  // namespace arc
38