navigation_entry_data.cc 1.6 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647
  1. // Copyright 2020 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. #include "weblayer/browser/navigation_entry_data.h"
  5. #include "base/memory/ptr_util.h"
  6. #include "content/public/browser/navigation_entry.h"
  7. namespace weblayer {
  8. namespace {
  9. const char kCacheKey[] = "weblayer_navigation_entry_data";
  10. } // namespace
  11. NavigationEntryData::ResponseData::ResponseData() = default;
  12. NavigationEntryData::ResponseData::~ResponseData() = default;
  13. NavigationEntryData::NavigationEntryData() = default;
  14. NavigationEntryData::~NavigationEntryData() = default;
  15. std::unique_ptr<base::SupportsUserData::Data> NavigationEntryData::Clone() {
  16. auto rv = base::WrapUnique(new NavigationEntryData);
  17. rv->per_navigation_user_agent_override_ = per_navigation_user_agent_override_;
  18. if (response_data_) {
  19. rv->response_data_ = std::make_unique<ResponseData>();
  20. rv->response_data_->response_head = response_data_->response_head.Clone();
  21. rv->response_data_->data = response_data_->data;
  22. rv->response_data_->request_time = response_data_->request_time;
  23. rv->response_data_->response_time = response_data_->response_time;
  24. }
  25. return rv;
  26. }
  27. NavigationEntryData* NavigationEntryData::Get(content::NavigationEntry* entry) {
  28. auto* data = static_cast<NavigationEntryData*>(entry->GetUserData(kCacheKey));
  29. if (!data) {
  30. auto data_object = base::WrapUnique(new NavigationEntryData);
  31. data = data_object.get();
  32. entry->SetUserData(kCacheKey, std::move(data_object));
  33. }
  34. return data;
  35. }
  36. } // namespace weblayer