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

Side by Side Diff: third_party/WebKit/Source/core/loader/FrameFetchContext.cpp

Issue 2860093003: Implement device-ram client hints header (Closed)
Patch Set: Minor fixes Created 3 years, 6 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
OLDNEW
1 /* 1 /*
2 * Copyright (C) 2013 Google Inc. All rights reserved. 2 * Copyright (C) 2013 Google Inc. All rights reserved.
3 * 3 *
4 * Redistribution and use in source and binary forms, with or without 4 * Redistribution and use in source and binary forms, with or without
5 * modification, are permitted provided that the following conditions are 5 * modification, are permitted provided that the following conditions are
6 * met: 6 * met:
7 * 7 *
8 * * Redistributions of source code must retain the above copyright 8 * * Redistributions of source code must retain the above copyright
9 * notice, this list of conditions and the following disclaimer. 9 * notice, this list of conditions and the following disclaimer.
10 * * Redistributions in binary form must reproduce the above 10 * * Redistributions in binary form must reproduce the above
(...skipping 592 matching lines...) Expand 10 before | Expand all | Expand 10 after
603 return document_ ? document_->GetSecurityOrigin() : nullptr; 603 return document_ ? document_->GetSecurityOrigin() : nullptr;
604 } 604 }
605 605
606 void FrameFetchContext::ModifyRequestForCSP(ResourceRequest& resource_request) { 606 void FrameFetchContext::ModifyRequestForCSP(ResourceRequest& resource_request) {
607 // Record the latest requiredCSP value that will be used when sending this 607 // Record the latest requiredCSP value that will be used when sending this
608 // request. 608 // request.
609 GetFrame()->Loader().RecordLatestRequiredCSP(); 609 GetFrame()->Loader().RecordLatestRequiredCSP();
610 GetFrame()->Loader().ModifyRequestForCSP(resource_request, GetDocument()); 610 GetFrame()->Loader().ModifyRequestForCSP(resource_request, GetDocument());
611 } 611 }
612 612
613 float FrameFetchContext::ClientHintsDeviceRAM(int64_t physical_memory_mb) {
614 // TODO(fmeawad): The calculations in this method are still evolving as the
615 // spec gets updated: https://github.com/WICG/device-ram. The reported
616 // device-ram is rounded down to next power of 2 in GB. Ex. 3072MB will return
617 // 2, and 768MB will return 0.5.
618 DCHECK_GT(physical_memory_mb, 0);
619 int power = 0; // To compensate of the extra loop iteration.
Yoav Weiss 2017/05/26 20:48:15 The "compensate" comment seems out of place now
fmeawad 2017/05/30 17:20:59 Done.
620 // Extract the MSB location.
621 while (physical_memory_mb > 1) {
622 physical_memory_mb >>= 1;
623 power++;
624 }
625 // Restore to the power of 2, and convert to GB.
626 return static_cast<float>(1 << power) / 1024.0;
627 }
628
613 void FrameFetchContext::AddClientHintsIfNecessary( 629 void FrameFetchContext::AddClientHintsIfNecessary(
614 const ClientHintsPreferences& hints_preferences, 630 const ClientHintsPreferences& hints_preferences,
615 const FetchParameters::ResourceWidth& resource_width, 631 const FetchParameters::ResourceWidth& resource_width,
616 ResourceRequest& request) { 632 ResourceRequest& request) {
617 if (!RuntimeEnabledFeatures::clientHintsEnabled() || !GetDocument()) 633 if (!RuntimeEnabledFeatures::clientHintsEnabled() || !GetDocument())
618 return; 634 return;
619 635
636 bool should_send_device_ram =
637 GetDocument()->GetClientHintsPreferences().ShouldSendDeviceRAM() ||
638 hints_preferences.ShouldSendDeviceRAM();
620 bool should_send_dpr = 639 bool should_send_dpr =
621 GetDocument()->GetClientHintsPreferences().ShouldSendDPR() || 640 GetDocument()->GetClientHintsPreferences().ShouldSendDPR() ||
622 hints_preferences.ShouldSendDPR(); 641 hints_preferences.ShouldSendDPR();
623 bool should_send_resource_width = 642 bool should_send_resource_width =
624 GetDocument()->GetClientHintsPreferences().ShouldSendResourceWidth() || 643 GetDocument()->GetClientHintsPreferences().ShouldSendResourceWidth() ||
625 hints_preferences.ShouldSendResourceWidth(); 644 hints_preferences.ShouldSendResourceWidth();
626 bool should_send_viewport_width = 645 bool should_send_viewport_width =
627 GetDocument()->GetClientHintsPreferences().ShouldSendViewportWidth() || 646 GetDocument()->GetClientHintsPreferences().ShouldSendViewportWidth() ||
628 hints_preferences.ShouldSendViewportWidth(); 647 hints_preferences.ShouldSendViewportWidth();
629 648
649 if (should_send_device_ram) {
650 int64_t physical_memory = MemoryCoordinator::GetPhysicalMemoryMB();
651 request.AddHTTPHeaderField(
652 "device-ram",
653 AtomicString(String::Number(ClientHintsDeviceRAM(physical_memory))));
654 }
655
630 if (should_send_dpr) { 656 if (should_send_dpr) {
631 request.AddHTTPHeaderField( 657 request.AddHTTPHeaderField(
632 "DPR", AtomicString(String::Number(GetDocument()->DevicePixelRatio()))); 658 "DPR", AtomicString(String::Number(GetDocument()->DevicePixelRatio())));
633 } 659 }
634 660
635 if (should_send_resource_width) { 661 if (should_send_resource_width) {
636 if (resource_width.is_set) { 662 if (resource_width.is_set) {
637 float physical_width = 663 float physical_width =
638 resource_width.width * GetDocument()->DevicePixelRatio(); 664 resource_width.width * GetDocument()->DevicePixelRatio();
639 request.AddHTTPHeaderField( 665 request.AddHTTPHeaderField(
(...skipping 166 matching lines...) Expand 10 before | Expand all | Expand 10 after
806 return GetFrame()->CreateURLLoader(); 832 return GetFrame()->CreateURLLoader();
807 } 833 }
808 834
809 DEFINE_TRACE(FrameFetchContext) { 835 DEFINE_TRACE(FrameFetchContext) {
810 visitor->Trace(document_loader_); 836 visitor->Trace(document_loader_);
811 visitor->Trace(document_); 837 visitor->Trace(document_);
812 BaseFetchContext::Trace(visitor); 838 BaseFetchContext::Trace(visitor);
813 } 839 }
814 840
815 } // namespace blink 841 } // namespace blink
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698