| OLD | NEW |
| 1 // Copyright 2013 The Chromium Authors. All rights reserved. | 1 // Copyright 2013 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 "content/browser/frame_host/navigation_entry_impl.h" | 5 #include "content/browser/frame_host/navigation_entry_impl.h" |
| 6 | 6 |
| 7 #include <stddef.h> | 7 #include <stddef.h> |
| 8 | 8 |
| 9 #include <queue> | 9 #include <queue> |
| 10 #include <utility> | 10 #include <utility> |
| (...skipping 337 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 348 void NavigationEntryImpl::SetTitle(const base::string16& title) { | 348 void NavigationEntryImpl::SetTitle(const base::string16& title) { |
| 349 title_ = title; | 349 title_ = title; |
| 350 cached_display_title_.clear(); | 350 cached_display_title_.clear(); |
| 351 } | 351 } |
| 352 | 352 |
| 353 const base::string16& NavigationEntryImpl::GetTitle() const { | 353 const base::string16& NavigationEntryImpl::GetTitle() const { |
| 354 return title_; | 354 return title_; |
| 355 } | 355 } |
| 356 | 356 |
| 357 void NavigationEntryImpl::SetPageState(const PageState& state) { | 357 void NavigationEntryImpl::SetPageState(const PageState& state) { |
| 358 if (!SiteIsolationPolicy::UseSubframeNavigationEntries()) { | |
| 359 frame_tree_->frame_entry->SetPageState(state); | |
| 360 return; | |
| 361 } | |
| 362 | |
| 363 // SetPageState should only be called before the NavigationEntry has been | 358 // SetPageState should only be called before the NavigationEntry has been |
| 364 // loaded, such as for restore (when there are no subframe | 359 // loaded, such as for restore (when there are no subframe |
| 365 // FrameNavigationEntries yet). However, some callers expect to call this | 360 // FrameNavigationEntries yet). However, some callers expect to call this |
| 366 // after a Clone but before loading the page. Clone will copy over the | 361 // after a Clone but before loading the page. Clone will copy over the |
| 367 // subframe entries, and we should reset them before setting the state again. | 362 // subframe entries, and we should reset them before setting the state again. |
| 368 // | 363 // |
| 369 // TODO(creis): It would be good to verify that this NavigationEntry hasn't | 364 // TODO(creis): It would be good to verify that this NavigationEntry hasn't |
| 370 // been loaded yet in cases that SetPageState is called while subframe | 365 // been loaded yet in cases that SetPageState is called while subframe |
| 371 // entries exist, but there's currently no way to check that. | 366 // entries exist, but there's currently no way to check that. |
| 372 if (!frame_tree_->children.empty()) | 367 if (!frame_tree_->children.empty()) |
| 373 frame_tree_->children.clear(); | 368 frame_tree_->children.clear(); |
| 374 | 369 |
| 375 // If the PageState can't be parsed or has no children, just store it on the | 370 // If the PageState can't be parsed or has no children, just store it on the |
| 376 // main frame's FrameNavigationEntry without recursively creating subframe | 371 // main frame's FrameNavigationEntry without recursively creating subframe |
| 377 // entries. | 372 // entries. |
| 378 ExplodedPageState exploded_state; | 373 ExplodedPageState exploded_state; |
| 379 if (!DecodePageState(state.ToEncodedData(), &exploded_state) || | 374 if (!DecodePageState(state.ToEncodedData(), &exploded_state) || |
| 380 exploded_state.top.children.size() == 0U) { | 375 exploded_state.top.children.size() == 0U) { |
| 381 frame_tree_->frame_entry->SetPageState(state); | 376 frame_tree_->frame_entry->SetPageState(state); |
| 382 return; | 377 return; |
| 383 } | 378 } |
| 384 | 379 |
| 385 RecursivelyGenerateFrameEntries( | 380 RecursivelyGenerateFrameEntries( |
| 386 exploded_state.top, exploded_state.referenced_files, frame_tree_.get()); | 381 exploded_state.top, exploded_state.referenced_files, frame_tree_.get()); |
| 387 } | 382 } |
| 388 | 383 |
| 389 PageState NavigationEntryImpl::GetPageState() const { | 384 PageState NavigationEntryImpl::GetPageState() const { |
| 390 // Just return the main frame's PageState in default Chrome, or if there are | 385 // Just return the main frame's state if there are no subframe |
| 391 // no subframe FrameNavigationEntries. | 386 // FrameNavigationEntries. |
| 392 if (!SiteIsolationPolicy::UseSubframeNavigationEntries() || | 387 if (frame_tree_->children.size() == 0U) |
| 393 frame_tree_->children.size() == 0U) | |
| 394 return frame_tree_->frame_entry->page_state(); | 388 return frame_tree_->frame_entry->page_state(); |
| 395 | 389 |
| 396 // When we're using subframe entries, each FrameNavigationEntry has a | 390 // When we're using subframe entries, each FrameNavigationEntry has a |
| 397 // frame-specific PageState. We combine these into an ExplodedPageState tree | 391 // frame-specific PageState. We combine these into an ExplodedPageState tree |
| 398 // and generate a full PageState from it. | 392 // and generate a full PageState from it. |
| 399 ExplodedPageState exploded_state; | 393 ExplodedPageState exploded_state; |
| 400 RecursivelyGenerateFrameState(frame_tree_.get(), &exploded_state.top, | 394 RecursivelyGenerateFrameState(frame_tree_.get(), &exploded_state.top, |
| 401 &exploded_state.referenced_files); | 395 &exploded_state.referenced_files); |
| 402 | 396 |
| 403 std::string encoded_data; | 397 std::string encoded_data; |
| (...skipping 553 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 957 return node; | 951 return node; |
| 958 | 952 |
| 959 // Enqueue any children and keep looking. | 953 // Enqueue any children and keep looking. |
| 960 for (auto* child : node->children) | 954 for (auto* child : node->children) |
| 961 work_queue.push(child); | 955 work_queue.push(child); |
| 962 } | 956 } |
| 963 return nullptr; | 957 return nullptr; |
| 964 } | 958 } |
| 965 | 959 |
| 966 } // namespace content | 960 } // namespace content |
| OLD | NEW |