Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(336)

Unified Diff: net/base/mac/url_conversions.mm

Issue 747773002: Upstream "nsurl_util.{h,mm}" from Chrome on iOS repository. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Comments from mmenke. Created 6 years ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: net/base/mac/url_conversions.mm
diff --git a/net/base/mac/url_conversions.mm b/net/base/mac/url_conversions.mm
new file mode 100644
index 0000000000000000000000000000000000000000..369abccd15507a5afb06828ea562f3858c8abb28
--- /dev/null
+++ b/net/base/mac/url_conversions.mm
@@ -0,0 +1,56 @@
+// 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.
+
+#import "net/base/mac/url_conversions.h"
+
+#import <Foundation/Foundation.h>
+
+#include "base/mac/scoped_nsobject.h"
+#include "net/base/escape.h"
+#include "url/gurl.h"
+#include "url/url_canon.h"
+
+namespace net {
+
+NSURL* NSURLWithGURL(const GURL& url) {
+ if (!url.is_valid())
+ return nil;
+
+ // NSURL strictly enforces RFC 1738 which requires that certain characters
+ // are always encoded. These characters are: "<", ">", """, "#", "%", "{",
+ // "}", "|", "\", "^", "~", "[", "]", and "`".
+ //
+ // GURL leaves these characters unencoded in the path, query, and ref. This
mmenke 2014/12/03 15:30:13 Maybe "GURL leaves some of these characters..."
erikchen 2014/12/03 18:14:01 Done.
+ // function manually encodes those components, and then passes the result to
+ // NSURL.
+ GURL::Replacements replacements;
+ std::string escaped_path = EscapeNSURLPrecursor(url.path());
+ std::string escaped_query = EscapeNSURLPrecursor(url.query());
+ std::string escaped_ref = EscapeNSURLPrecursor(url.ref());
+ if (!escaped_path.empty()) {
+ replacements.SetPath(escaped_path.c_str(),
+ url::Component(0, escaped_path.size()));
+ }
+ if (!escaped_query.empty()) {
+ replacements.SetQuery(escaped_query.c_str(),
+ url::Component(0, escaped_query.size()));
+ }
+ if (!escaped_ref.empty()) {
+ replacements.SetRef(escaped_ref.c_str(),
+ url::Component(0, escaped_ref.size()));
+ }
+ GURL escaped_url = url.ReplaceComponents(replacements);
+
+ base::scoped_nsobject<NSString> escaped_url_string(
+ [[NSString alloc] initWithUTF8String:escaped_url.spec().c_str()]);
+ return [NSURL URLWithString:escaped_url_string];
mmenke 2014/12/03 15:30:12 Returning a NSString from a scoped_nsobject doesn'
droger 2014/12/03 15:39:51 This code looks fine. In objective C, everything i
+}
+
+GURL GURLWithNSURL(NSURL* url) {
+ if (url)
+ return GURL([[url absoluteString] UTF8String]);
+ return GURL();
+}
+
+} // namespace net

Powered by Google App Engine
This is Rietveld 408576698