| Index: chrome/browser/native_ui_contents.cc
|
| ===================================================================
|
| --- chrome/browser/native_ui_contents.cc (revision 1840)
|
| +++ chrome/browser/native_ui_contents.cc (working copy)
|
| @@ -210,20 +210,20 @@
|
| state_.reset(page_state);
|
| NavigationController* ctrl = controller();
|
| if (ctrl) {
|
| - NavigationEntry* ne = ctrl->GetLastCommittedEntry();
|
| + int ne_index = ctrl->GetLastCommittedEntryIndex();
|
| + NavigationEntry* ne = ctrl->GetEntryAtIndex(ne_index);
|
| if (ne) {
|
| // NavigationEntry is null if we're being restored.
|
| DCHECK(ne);
|
| std::string rep;
|
| state_->GetByteRepresentation(&rep);
|
| ne->set_content_state(rep);
|
| - // This is not a WebContents, so we use a NULL SiteInstance.
|
| - ctrl->NotifyEntryChangedByPageID(type(), NULL, ne->page_id());
|
| + ctrl->NotifyEntryChanged(ne, ne_index);
|
| }
|
| }
|
| }
|
|
|
| -bool NativeUIContents::Navigate(const NavigationEntry& entry, bool reload) {
|
| +bool NativeUIContents::NavigateToPendingEntry(bool reload) {
|
| ChromeViews::RootView* root_view = GetRootView();
|
| DCHECK(root_view);
|
|
|
| @@ -234,7 +234,8 @@
|
| current_view_ = NULL;
|
| }
|
|
|
| - NativeUI* new_ui = GetNativeUIForURL(entry.url());
|
| + NavigationEntry* pending_entry = controller()->GetPendingEntry();
|
| + NativeUI* new_ui = GetNativeUIForURL(pending_entry->url());
|
| if (new_ui) {
|
| current_ui_ = new_ui;
|
| is_visible_ = true;
|
| @@ -242,9 +243,9 @@
|
| current_view_ = new_ui->GetView();
|
| root_view->AddChildView(current_view_);
|
|
|
| - std::string s = entry.content_state();
|
| + std::string s = pending_entry->content_state();
|
| if (s.empty())
|
| - state_->InitWithURL(entry.url());
|
| + state_->InitWithURL(pending_entry->url());
|
| else
|
| state_->InitWithBytes(s);
|
|
|
| @@ -252,29 +253,32 @@
|
| Layout();
|
| }
|
|
|
| - NavigationEntry* new_entry = new NavigationEntry(entry);
|
| - if (new_entry->page_id() == -1)
|
| - new_entry->set_page_id(++g_next_page_id);
|
| - new_entry->set_title(GetDefaultTitle());
|
| - new_entry->favicon().set_bitmap(GetFavIcon());
|
| - new_entry->favicon().set_is_valid(true);
|
| + // Commit the new load in the navigation controller. If the ID of the
|
| + // NavigationEntry we were given was -1, that means this is a new load, so
|
| + // we have to generate a new ID.
|
| + controller()->CommitPendingEntry();
|
| +
|
| + // Populate the committed entry.
|
| + NavigationEntry* committed_entry = controller()->GetLastCommittedEntry();
|
| + committed_entry->set_title(GetDefaultTitle());
|
| + committed_entry->favicon().set_bitmap(GetFavIcon());
|
| + committed_entry->favicon().set_is_valid(true);
|
| if (new_ui) {
|
| // Strip out the query params, they should have moved to state.
|
| // TODO(sky): use GURL methods for replacements once bug is fixed.
|
| size_t scheme_end, host_end;
|
| - GetSchemeAndHostEnd(entry.url(), &scheme_end, &host_end);
|
| - new_entry->set_url(GURL(entry.url().spec().substr(0, host_end)));
|
| + GetSchemeAndHostEnd(committed_entry->url(), &scheme_end, &host_end);
|
| + committed_entry->set_url(
|
| + GURL(committed_entry->url().spec().substr(0, host_end)));
|
| }
|
| std::string content_state;
|
| state_->GetByteRepresentation(&content_state);
|
| - new_entry->set_content_state(content_state);
|
| - const int32 page_id = new_entry->page_id();
|
| + committed_entry->set_content_state(content_state);
|
|
|
| - // The default details is "new navigation", and that's OK with us.
|
| - NavigationController::LoadCommittedDetails details;
|
| - DidNavigateToEntry(new_entry, &details);
|
| - // This is not a WebContents, so we use a NULL SiteInstance.
|
| - controller()->NotifyEntryChangedByPageID(type(), NULL, page_id);
|
| + // Broadcast the fact that we just updated all that crap.
|
| + controller()->NotifyEntryChanged(
|
| + committed_entry,
|
| + controller()->GetIndexOfEntry(committed_entry));
|
| return true;
|
| }
|
|
|
|
|