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

Side by Side Diff: ios/web/webui/crw_web_ui_page_builder.mm

Issue 2260023004: [ARC] [Split this CL] Convert ios/web/webui to ARC. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@ios-web-net
Patch Set: Created 4 years, 4 months 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 unified diff | Download patch
« no previous file with comments | « ios/web/webui/crw_web_ui_manager.mm ('k') | ios/web/webui/mojo_facade.mm » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright 2015 The Chromium Authors. All rights reserved. 1 // Copyright 2015 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "ios/web/webui/crw_web_ui_page_builder.h" 5 #include "ios/web/webui/crw_web_ui_page_builder.h"
6 6
7 #include <map> 7 #include <map>
8 #include <string> 8 #include <string>
9 #include <vector> 9 #include <vector>
10 10
11 #include "base/ios/weak_nsobject.h"
12 #include "base/logging.h" 11 #include "base/logging.h"
13 #include "base/mac/bundle_locations.h" 12 #include "base/mac/bundle_locations.h"
14 #include "base/mac/scoped_nsobject.h" 13 #include "base/mac/scoped_nsobject.h"
15 #include "base/strings/sys_string_conversions.h" 14 #include "base/strings/sys_string_conversions.h"
16 15
16 #if !defined(__has_feature) || !__has_feature(objc_arc)
17 #error "This file requires ARC support."
18 #endif
19
17 namespace { 20 namespace {
18 // Prefix for script tags. Used to locate JavaScript subresources. 21 // Prefix for script tags. Used to locate JavaScript subresources.
19 NSString* const kJSTagPrefix = @"<script src=\""; 22 NSString* const kJSTagPrefix = @"<script src=\"";
20 // Suffix for script tags. Used to locate JavaScript subresources. 23 // Suffix for script tags. Used to locate JavaScript subresources.
21 NSString* const kJSTagSuffix = @"\"></script>"; 24 NSString* const kJSTagSuffix = @"\"></script>";
22 // Prefix for stylesheet tags. Used to locate CSS subresources. 25 // Prefix for stylesheet tags. Used to locate CSS subresources.
23 NSString* const kCSSTagPrefix = @"<link rel=\"stylesheet\" href=\""; 26 NSString* const kCSSTagPrefix = @"<link rel=\"stylesheet\" href=\"";
24 // Suffix for stylesheet tags. Used to locate CSS subresources. 27 // Suffix for stylesheet tags. Used to locate CSS subresources.
25 NSString* const kCSSTagSuffix = @"\">"; 28 NSString* const kCSSTagSuffix = @"\">";
26 // Template for creating inlined JavaScript tags. 29 // Template for creating inlined JavaScript tags.
(...skipping 58 matching lines...) Expand 10 before | Expand all | Expand 10 after
85 withSubresources:(const std::map<GURL, std::string>&)subresources; 88 withSubresources:(const std::map<GURL, std::string>&)subresources;
86 89
87 // Returns JavaScript needed for bridging WebUI chrome.send() messages to 90 // Returns JavaScript needed for bridging WebUI chrome.send() messages to
88 // the core.js defined message delivery system. 91 // the core.js defined message delivery system.
89 - (NSString*)webUIJavaScript; 92 - (NSString*)webUIJavaScript;
90 93
91 @end 94 @end
92 95
93 @implementation CRWWebUIPageBuilder { 96 @implementation CRWWebUIPageBuilder {
94 // Delegate for requesting resources. 97 // Delegate for requesting resources.
95 base::WeakNSProtocol<id<CRWWebUIPageBuilderDelegate>> _delegate; 98 __weak id<CRWWebUIPageBuilderDelegate> _delegate;
96 } 99 }
97 100
98 #pragma mark - Public Methods 101 #pragma mark - Public Methods
99 102
100 - (instancetype)init { 103 - (instancetype)init {
101 NOTREACHED(); 104 NOTREACHED();
102 return self; 105 return self;
103 } 106 }
104 107
105 - (instancetype)initWithDelegate:(id<CRWWebUIPageBuilderDelegate>)delegate { 108 - (instancetype)initWithDelegate:(id<CRWWebUIPageBuilderDelegate>)delegate {
106 if (self = [super init]) { 109 if (self = [super init]) {
107 _delegate.reset(delegate); 110 _delegate = delegate;
108 } 111 }
109 return self; 112 return self;
110 } 113 }
111 114
112 - (void)buildWebUIPageForURL:(const GURL&)webUIURL 115 - (void)buildWebUIPageForURL:(const GURL&)webUIURL
113 completionHandler:(web::WebUIPageCompletion)completionHandler { 116 completionHandler:(web::WebUIPageCompletion)completionHandler {
114 [self fetchResourceWithURL:webUIURL 117 [self fetchResourceWithURL:webUIURL
115 completionHandler:^(NSString* webUIHTML, const GURL& URL) { 118 completionHandler:^(NSString* webUIHTML, const GURL& URL) {
116 [self buildWebUIPageForHTML:webUIHTML 119 [self buildWebUIPageForHTML:webUIHTML
117 webUIURL:URL 120 webUIURL:URL
118 completionHandler:completionHandler]; 121 completionHandler:completionHandler];
119 }]; 122 }];
120 } 123 }
121 124
122 #pragma mark - Private Methods 125 #pragma mark - Private Methods
123 126
124 - (void)buildWebUIPageForHTML:(NSString*)HTML 127 - (void)buildWebUIPageForHTML:(NSString*)HTML
125 webUIURL:(const GURL&)pageURL 128 webUIURL:(const GURL&)pageURL
126 completionHandler:(web::WebUIPageCompletion)completionHandler { 129 completionHandler:(web::WebUIPageCompletion)completionHandler {
127 __block base::scoped_nsobject<NSMutableString> webUIHTML([HTML mutableCopy]); 130 __block base::scoped_nsobject<NSMutableString> webUIHTML([HTML mutableCopy]);
128 NSSet* subresourceURLStrings = [self URLStringsFromHTML:webUIHTML]; 131 NSSet* subresourceURLStrings = [self URLStringsFromHTML:webUIHTML];
129 __block NSUInteger pendingSubresourceCount = [subresourceURLStrings count]; 132 __block NSUInteger pendingSubresourceCount = [subresourceURLStrings count];
130 if (!pendingSubresourceCount) { 133 if (!pendingSubresourceCount) {
131 completionHandler(webUIHTML); 134 completionHandler(webUIHTML);
132 return; 135 return;
133 } 136 }
134 __block std::map<GURL, std::string> subresources; 137 __block std::map<GURL, std::string> subresources;
135 base::WeakNSObject<CRWWebUIPageBuilder> weakSelf(self); 138 __weak CRWWebUIPageBuilder* weakSelf = self;
136 // Completion handler for subresource loads. 139 // Completion handler for subresource loads.
137 __block web::WebUIDelegateCompletion subresourceHandler = nil; 140 web::WebUIDelegateCompletion subresourceHandler = nil;
138 subresourceHandler = [[^(NSString* subresource, const GURL& subresourceURL) { 141 __block __weak web::WebUIDelegateCompletion weakSubresourceHandler = nil;
142 subresourceHandler = [^(NSString* subresource, const GURL& subresourceURL) {
139 // Import statements in CSS resources are also loaded. 143 // Import statements in CSS resources are also loaded.
140 if ([self isCSSSubresourceURL:subresourceURL]) { 144 if ([self isCSSSubresourceURL:subresourceURL]) {
141 NSSet* URLStrings = [weakSelf URLStringsFromCSS:subresource]; 145 NSSet* URLStrings = [weakSelf URLStringsFromCSS:subresource];
142 for (NSString* URLString in URLStrings) { 146 for (NSString* URLString in URLStrings) {
143 GURL URL(subresourceURL.Resolve(base::SysNSStringToUTF8(URLString))); 147 GURL URL(subresourceURL.Resolve(base::SysNSStringToUTF8(URLString)));
144 [weakSelf addCSSTagToHTML:webUIHTML 148 [weakSelf addCSSTagToHTML:webUIHTML
145 forURL:URL 149 forURL:URL
146 sourceURL:subresourceURL]; 150 sourceURL:subresourceURL];
147 ++pendingSubresourceCount; 151 ++pendingSubresourceCount;
148 [weakSelf fetchResourceWithURL:URL 152 [weakSelf fetchResourceWithURL:URL
149 completionHandler:subresourceHandler]; 153 completionHandler:weakSubresourceHandler];
150 } 154 }
151 } 155 }
152 subresources[subresourceURL] = base::SysNSStringToUTF8(subresource); 156 subresources[subresourceURL] = base::SysNSStringToUTF8(subresource);
153 --pendingSubresourceCount; 157 --pendingSubresourceCount;
154 // When subresource loading is complete, flatten the default resource 158 // When subresource loading is complete, flatten the default resource
155 // and invoke the completion handler. 159 // and invoke the completion handler.
156 if (!pendingSubresourceCount) { 160 if (!pendingSubresourceCount) {
157 [weakSelf flattenHTML:webUIHTML withSubresources:subresources]; 161 [weakSelf flattenHTML:webUIHTML withSubresources:subresources];
158 completionHandler(webUIHTML); 162 completionHandler(webUIHTML);
159 } 163 }
160 } copy] autorelease]; 164 } copy];
165
166 weakSubresourceHandler = subresourceHandler;
161 167
162 for (NSString* URLString in subresourceURLStrings) { 168 for (NSString* URLString in subresourceURLStrings) {
163 // chrome://resources/js/ios/web_ui.js is skipped because it is 169 // chrome://resources/js/ios/web_ui.js is skipped because it is
164 // retrieved via webUIJavaScript rather than the net stack. 170 // retrieved via webUIJavaScript rather than the net stack.
165 if ([URLString isEqualToString:kWebUIJSURL]) { 171 if ([URLString isEqualToString:kWebUIJSURL]) {
166 --pendingSubresourceCount; 172 --pendingSubresourceCount;
167 if (!pendingSubresourceCount) { 173 if (!pendingSubresourceCount) {
168 [weakSelf flattenHTML:webUIHTML withSubresources:subresources]; 174 [weakSelf flattenHTML:webUIHTML withSubresources:subresources];
169 completionHandler(webUIHTML); 175 completionHandler(webUIHTML);
170 } 176 }
(...skipping 143 matching lines...) Expand 10 before | Expand all | Expand 10 after
314 - (NSString*)webUIJavaScript { 320 - (NSString*)webUIJavaScript {
315 NSBundle* bundle = base::mac::FrameworkBundle(); 321 NSBundle* bundle = base::mac::FrameworkBundle();
316 NSString* path = [bundle pathForResource:@"web_ui_bundle" ofType:@"js"]; 322 NSString* path = [bundle pathForResource:@"web_ui_bundle" ofType:@"js"];
317 DCHECK(path) << "web_ui_bundle.js file not found"; 323 DCHECK(path) << "web_ui_bundle.js file not found";
318 return [NSString stringWithContentsOfFile:path 324 return [NSString stringWithContentsOfFile:path
319 encoding:NSUTF8StringEncoding 325 encoding:NSUTF8StringEncoding
320 error:nil]; 326 error:nil];
321 } 327 }
322 328
323 @end 329 @end
OLDNEW
« no previous file with comments | « ios/web/webui/crw_web_ui_manager.mm ('k') | ios/web/webui/mojo_facade.mm » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698