Chromium Code Reviews| OLD | NEW |
|---|---|
| (Empty) | |
| 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 "content/renderer/previews_state_helper.h" | |
| 6 | |
| 7 #include "base/strings/string_split.h" | |
| 8 | |
| 9 namespace content { | |
| 10 | |
| 11 // Chrome Proxy Previews header and directives. | |
| 12 const char kChromeProxyHeader[] = "chrome-proxy"; | |
| 13 const char kChromeProxyContentTransformHeader[] = | |
| 14 "chrome-proxy-content-transform"; | |
| 15 const char kChromeProxyPagePoliciesDirective[] = "page-policies"; | |
| 16 const char kChromeProxyEmptyImageDirective[] = "empty-image"; | |
| 17 const char kChromeProxyLitePageDirective[] = "lite-page"; | |
| 18 | |
| 19 PreviewsState UpdatePreviewsStateFromMainFrameResponse( | |
| 20 PreviewsState original_state, | |
| 21 const blink::WebURLResponse& web_url_response) { | |
| 22 // First check if no previews were enabled for this request. | |
| 23 if (original_state == PREVIEWS_UNSPECIFIED) | |
| 24 return original_state; | |
| 25 | |
| 26 // Next handle legacy path where Lite Page not enabled but Lo-Fi is enabled. | |
| 27 if (!(original_state & SERVER_LITE_PAGE_ON) && | |
| 28 (original_state & SERVER_LOFI_ON)) { | |
|
sclittle
2017/06/01 00:59:29
I don't think this is quite right. If Server LoFi
dougarnett
2017/06/01 20:53:11
Adding an early return above if neither server pre
| |
| 29 return original_state; | |
| 30 } | |
| 31 | |
| 32 PreviewsState updated_state = original_state; | |
| 33 | |
| 34 // Clear the Lite Page bit if Lite Page transformation did not occur. | |
|
sclittle
2017/06/01 00:59:29
Looking at the code here, it looks like if the DRP
dougarnett
2017/06/01 20:53:11
Let's discuss. It depends on when this method is c
dougarnett
2017/06/01 22:05:10
Done.
| |
| 35 if (web_url_response | |
| 36 .HttpHeaderField( | |
| 37 blink::WebString::FromUTF8(kChromeProxyContentTransformHeader)) | |
| 38 .Utf8() != kChromeProxyLitePageDirective) { | |
| 39 updated_state &= ~(SERVER_LITE_PAGE_ON); | |
| 40 } | |
| 41 | |
| 42 // Determine whether to keep or clear Lo-Fi bits. We need to receive the | |
| 43 // empty-image policy directive and have SERVER_LOFI_ON in order to retain | |
| 44 // Lo-Fi bits. | |
| 45 if (!(updated_state & SERVER_LOFI_ON)) { | |
| 46 // Server Lo-Fi not enabled so ensure Client Lo-Fi off for this request. | |
|
sclittle
2017/06/01 00:59:29
Client LoFi shouldn't be dependent on Server LoFi
dougarnett
2017/06/01 20:53:11
No, that was not my understanding. I thought that
| |
| 47 updated_state &= ~(CLIENT_LOFI_ON); | |
| 48 } else { | |
| 49 // Keep/clear Lo-Fi bits based on having empty-image policy directive. | |
| 50 bool has_empty_page_directive = false; | |
| 51 std::string chrome_proxy_value = | |
| 52 web_url_response | |
| 53 .HttpHeaderField(blink::WebString::FromUTF8(kChromeProxyHeader)) | |
| 54 .Utf8(); | |
| 55 size_t page_policies_pos = | |
|
sclittle
2017/06/01 00:59:29
Could you separate this string searching into a he
dougarnett
2017/06/01 20:53:11
Done.
| |
| 56 chrome_proxy_value.find(kChromeProxyPagePoliciesDirective); | |
|
sclittle
2017/06/01 00:59:29
Could you just use base::SplitStringPiece here to
dougarnett
2017/06/01 20:53:11
Done.
| |
| 57 if (page_policies_pos != std::string::npos) { | |
| 58 size_t end_pos = | |
| 59 chrome_proxy_value.find_first_of(" ,", page_policies_pos); | |
| 60 std::string page_policies_value = chrome_proxy_value.substr( | |
|
sclittle
2017/06/01 00:59:29
nit: Don't make an unnecessary copy of the std::st
dougarnett
2017/06/01 20:53:11
Done.
| |
| 61 page_policies_pos + strlen(kChromeProxyPagePoliciesDirective) + 1, | |
|
sclittle
2017/06/01 00:59:29
nit: you can use arraysize or sizeof instead of st
dougarnett
2017/06/01 20:53:11
Done.
| |
| 62 end_pos); | |
|
sclittle
2017/06/01 00:59:29
string::substr takes in a total number of characte
dougarnett
2017/06/01 20:53:11
Acknowledged.
| |
| 63 for (const auto& policy : | |
| 64 base::SplitString(page_policies_value, "|", base::TRIM_WHITESPACE, | |
|
sclittle
2017/06/01 00:59:29
nit: use base::SplitStringPiece, not base::SplitSt
dougarnett
2017/06/01 20:53:11
Done.
| |
| 65 base::SPLIT_WANT_NONEMPTY)) { | |
| 66 if (policy == kChromeProxyEmptyImageDirective) { | |
|
sclittle
2017/06/01 00:59:29
Use case-insensitive comparison, e.g. base::LowerC
dougarnett
2017/06/01 20:53:11
Done.
| |
| 67 has_empty_page_directive = true; | |
| 68 break; | |
| 69 } | |
| 70 } | |
| 71 } | |
| 72 if (!has_empty_page_directive) { | |
| 73 updated_state &= ~(SERVER_LOFI_ON | CLIENT_LOFI_ON); | |
| 74 } | |
| 75 } | |
| 76 | |
| 77 return updated_state; | |
| 78 } | |
| 79 | |
| 80 } // namespace content | |
| OLD | NEW |