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

Side by Side Diff: chrome/browser/android/tab_state.cc

Issue 2802213002: Simplify WebContentsState::GetContentsStateAsByteBuffer (Closed)
Patch Set: Created 3 years, 8 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
« no previous file with comments | « no previous file | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright 2014 The Chromium Authors. All rights reserved. 1 // Copyright 2014 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 "chrome/browser/android/tab_state.h" 5 #include "chrome/browser/android/tab_state.h"
6 6
7 #include <jni.h> 7 #include <jni.h>
8 #include <stddef.h> 8 #include <stddef.h>
9 #include <stdint.h> 9 #include <stdint.h>
10 10
(...skipping 268 matching lines...) Expand 10 before | Expand all | Expand 10 after
279 if (*current_entry_index < 0 || 279 if (*current_entry_index < 0 ||
280 *current_entry_index >= static_cast<int>(navigations->size())) 280 *current_entry_index >= static_cast<int>(navigations->size()))
281 return false; 281 return false;
282 282
283 return true; 283 return true;
284 } 284 }
285 285
286 }; // anonymous namespace 286 }; // anonymous namespace
287 287
288 ScopedJavaLocalRef<jobject> WebContentsState::GetContentsStateAsByteBuffer( 288 ScopedJavaLocalRef<jobject> WebContentsState::GetContentsStateAsByteBuffer(
289 JNIEnv* env, TabAndroid* tab) { 289 JNIEnv* env,
290 TabAndroid* tab) {
290 Profile* profile = tab->GetProfile(); 291 Profile* profile = tab->GetProfile();
291 if (!profile) 292 if (!profile)
292 return ScopedJavaLocalRef<jobject>(); 293 return ScopedJavaLocalRef<jobject>();
293 294
294 content::NavigationController& controller = 295 content::NavigationController& controller =
295 tab->web_contents()->GetController(); 296 tab->web_contents()->GetController();
297 const int entry_count = controller.GetEntryCount();
298 const int current_index = controller.GetLastCommittedEntryIndex();
296 const int pending_index = controller.GetPendingEntryIndex(); 299 const int pending_index = controller.GetPendingEntryIndex();
297 int entry_count = controller.GetEntryCount(); 300 DCHECK(current_index < entry_count);
298 if (entry_count == 0 && pending_index == 0) 301 DCHECK(pending_index < entry_count);
299 entry_count++;
300 302
301 if (entry_count == 0) 303 if (entry_count == 0)
302 return ScopedJavaLocalRef<jobject>(); 304 return ScopedJavaLocalRef<jobject>();
303 305
304 int current_entry = controller.GetLastCommittedEntryIndex();
305 if (current_entry == -1 && entry_count > 0)
306 current_entry = 0;
307
308 std::vector<content::NavigationEntry*> navigations(entry_count); 306 std::vector<content::NavigationEntry*> navigations(entry_count);
309 for (int i = 0; i < entry_count; ++i) { 307 for (int i = 0; i < entry_count; ++i) {
310 content::NavigationEntry* entry = (i == pending_index) ? 308 navigations[i] = (i == pending_index) ? controller.GetPendingEntry()
Eugene But (OOO till 7-30) 2017/04/07 15:21:07 I was under impression that if |i == pending_index
arthursonzogni 2017/04/10 08:16:35 It would have been nice if the code could be simpl
311 controller.GetPendingEntry() : controller.GetEntryAtIndex(i); 309 : controller.GetEntryAtIndex(i);
312 navigations[i] = entry;
313 } 310 }
314 311
315 return WebContentsState::WriteNavigationsAsByteBuffer( 312 return WebContentsState::WriteNavigationsAsByteBuffer(
316 env, 313 env, profile->IsOffTheRecord(), navigations, current_index);
317 profile->IsOffTheRecord(),
318 navigations,
319 current_entry);
320 } 314 }
321 315
322 // Common implementation for GetContentsStateAsByteBuffer() and 316 // Common implementation for GetContentsStateAsByteBuffer() and
323 // CreateContentsStateAsByteBuffer(). Does not assume ownership of the 317 // CreateContentsStateAsByteBuffer(). Does not assume ownership of the
324 // navigations. 318 // navigations.
325 ScopedJavaLocalRef<jobject> WebContentsState::WriteNavigationsAsByteBuffer( 319 ScopedJavaLocalRef<jobject> WebContentsState::WriteNavigationsAsByteBuffer(
326 JNIEnv* env, 320 JNIEnv* env,
327 bool is_off_the_record, 321 bool is_off_the_record,
328 const std::vector<content::NavigationEntry*>& navigations, 322 const std::vector<content::NavigationEntry*>& navigations,
329 int current_entry) { 323 int current_entry) {
(...skipping 242 matching lines...) Expand 10 before | Expand all | Expand 10 after
572 std::unique_ptr<WebContents> web_contents(WebContents::FromJavaWebContents( 566 std::unique_ptr<WebContents> web_contents(WebContents::FromJavaWebContents(
573 WebContentsState::RestoreContentsFromByteBuffer( 567 WebContentsState::RestoreContentsFromByteBuffer(
574 env, clazz, state, saved_state_version, true))); 568 env, clazz, state, saved_state_version, true)));
575 if (web_contents.get()) 569 if (web_contents.get())
576 TabAndroid::CreateHistoricalTabFromContents(web_contents.get()); 570 TabAndroid::CreateHistoricalTabFromContents(web_contents.get());
577 } 571 }
578 572
579 bool RegisterTabState(JNIEnv* env) { 573 bool RegisterTabState(JNIEnv* env) {
580 return RegisterNativesImpl(env); 574 return RegisterNativesImpl(env);
581 } 575 }
OLDNEW
« no previous file with comments | « no previous file | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698