OLD | NEW |
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 <limits> | 8 #include <limits> |
9 #include <vector> | 9 #include <vector> |
10 | 10 |
(...skipping 424 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
435 WebContents::CreateParams params(profile); | 435 WebContents::CreateParams params(profile); |
436 params.initially_hidden = initially_hidden; | 436 params.initially_hidden = initially_hidden; |
437 scoped_ptr<WebContents> web_contents(WebContents::Create(params)); | 437 scoped_ptr<WebContents> web_contents(WebContents::Create(params)); |
438 web_contents->GetController().Restore( | 438 web_contents->GetController().Restore( |
439 current_entry_index, | 439 current_entry_index, |
440 NavigationController::RESTORE_CURRENT_SESSION, | 440 NavigationController::RESTORE_CURRENT_SESSION, |
441 &scoped_entries); | 441 &scoped_entries); |
442 return web_contents.release(); | 442 return web_contents.release(); |
443 } | 443 } |
444 | 444 |
445 jobject WebContentsState::RestoreContentsFromByteBuffer( | 445 ScopedJavaLocalRef<jobject> WebContentsState::RestoreContentsFromByteBuffer( |
446 JNIEnv* env, | 446 JNIEnv* env, |
447 jclass clazz, | 447 jclass clazz, |
448 jobject state, | 448 jobject state, |
449 jint saved_state_version, | 449 jint saved_state_version, |
450 jboolean initially_hidden) { | 450 jboolean initially_hidden) { |
451 void* data = env->GetDirectBufferAddress(state); | 451 void* data = env->GetDirectBufferAddress(state); |
452 int size = env->GetDirectBufferCapacity(state); | 452 int size = env->GetDirectBufferCapacity(state); |
453 | 453 |
454 WebContents* web_contents = WebContentsState::RestoreContentsFromByteBuffer( | 454 WebContents* web_contents = WebContentsState::RestoreContentsFromByteBuffer( |
455 data, | 455 data, |
456 size, | 456 size, |
457 saved_state_version, | 457 saved_state_version, |
458 initially_hidden); | 458 initially_hidden); |
459 | 459 |
460 return web_contents ? web_contents->GetJavaWebContents().Release() : nullptr; | 460 if (web_contents) |
| 461 return web_contents->GetJavaWebContents(); |
| 462 else |
| 463 return ScopedJavaLocalRef<jobject>(); |
461 } | 464 } |
462 | 465 |
463 ScopedJavaLocalRef<jobject> | 466 ScopedJavaLocalRef<jobject> |
464 WebContentsState::CreateSingleNavigationStateAsByteBuffer( | 467 WebContentsState::CreateSingleNavigationStateAsByteBuffer( |
465 JNIEnv* env, | 468 JNIEnv* env, |
466 jstring url, | 469 jstring url, |
467 jstring referrer_url, | 470 jstring referrer_url, |
468 jint referrer_policy, | 471 jint referrer_policy, |
469 jboolean is_off_the_record) { | 472 jboolean is_off_the_record) { |
470 content::Referrer referrer; | 473 content::Referrer referrer; |
(...skipping 20 matching lines...) Expand all Loading... |
491 0); | 494 0); |
492 } | 495 } |
493 | 496 |
494 // Static JNI methods. | 497 // Static JNI methods. |
495 | 498 |
496 static void FreeWebContentsStateBuffer(JNIEnv* env, jclass clazz, jobject obj) { | 499 static void FreeWebContentsStateBuffer(JNIEnv* env, jclass clazz, jobject obj) { |
497 void* data = env->GetDirectBufferAddress(obj); | 500 void* data = env->GetDirectBufferAddress(obj); |
498 free(data); | 501 free(data); |
499 } | 502 } |
500 | 503 |
501 static jobject RestoreContentsFromByteBuffer(JNIEnv* env, | 504 static ScopedJavaLocalRef<jobject> RestoreContentsFromByteBuffer( |
502 jclass clazz, | 505 JNIEnv* env, |
503 jobject state, | 506 jclass clazz, |
504 jint saved_state_version, | 507 jobject state, |
505 jboolean initially_hidden) { | 508 jint saved_state_version, |
| 509 jboolean initially_hidden) { |
506 return WebContentsState::RestoreContentsFromByteBuffer(env, | 510 return WebContentsState::RestoreContentsFromByteBuffer(env, |
507 clazz, | 511 clazz, |
508 state, | 512 state, |
509 saved_state_version, | 513 saved_state_version, |
510 initially_hidden); | 514 initially_hidden); |
511 } | 515 } |
512 | 516 |
513 static jobject GetContentsStateAsByteBuffer( | 517 static ScopedJavaLocalRef<jobject> GetContentsStateAsByteBuffer(JNIEnv* env, |
514 JNIEnv* env, jclass clazz, jobject jtab) { | 518 jclass clazz, |
| 519 jobject jtab) { |
515 TabAndroid* tab_android = TabAndroid::GetNativeTab(env, jtab); | 520 TabAndroid* tab_android = TabAndroid::GetNativeTab(env, jtab); |
516 return WebContentsState::GetContentsStateAsByteBuffer( | 521 return WebContentsState::GetContentsStateAsByteBuffer(env, tab_android); |
517 env, tab_android).Release(); | |
518 } | 522 } |
519 | 523 |
520 static jobject CreateSingleNavigationStateAsByteBuffer( | 524 static ScopedJavaLocalRef<jobject> CreateSingleNavigationStateAsByteBuffer( |
521 JNIEnv* env, | 525 JNIEnv* env, |
522 jclass clazz, | 526 jclass clazz, |
523 jstring url, | 527 jstring url, |
524 jstring referrer_url, | 528 jstring referrer_url, |
525 jint referrer_policy, | 529 jint referrer_policy, |
526 jboolean is_off_the_record) { | 530 jboolean is_off_the_record) { |
527 return WebContentsState::CreateSingleNavigationStateAsByteBuffer( | 531 return WebContentsState::CreateSingleNavigationStateAsByteBuffer( |
528 env, url, referrer_url, referrer_policy, is_off_the_record).Release(); | 532 env, url, referrer_url, referrer_policy, is_off_the_record); |
529 } | 533 } |
530 | 534 |
531 static jstring GetDisplayTitleFromByteBuffer(JNIEnv* env, | 535 static ScopedJavaLocalRef<jstring> GetDisplayTitleFromByteBuffer( |
532 jclass clazz, | 536 JNIEnv* env, |
533 jobject state, | 537 jclass clazz, |
534 jint saved_state_version) { | 538 jobject state, |
| 539 jint saved_state_version) { |
535 void* data = env->GetDirectBufferAddress(state); | 540 void* data = env->GetDirectBufferAddress(state); |
536 int size = env->GetDirectBufferCapacity(state); | 541 int size = env->GetDirectBufferCapacity(state); |
537 | 542 |
538 ScopedJavaLocalRef<jstring> result = | 543 ScopedJavaLocalRef<jstring> result = |
539 WebContentsState::GetDisplayTitleFromByteBuffer( | 544 WebContentsState::GetDisplayTitleFromByteBuffer( |
540 env, data, size, saved_state_version); | 545 env, data, size, saved_state_version); |
541 return result.Release(); | 546 return result; |
542 } | 547 } |
543 | 548 |
544 static jstring GetVirtualUrlFromByteBuffer(JNIEnv* env, | 549 static ScopedJavaLocalRef<jstring> GetVirtualUrlFromByteBuffer( |
545 jclass clazz, | 550 JNIEnv* env, |
546 jobject state, | 551 jclass clazz, |
547 jint saved_state_version) { | 552 jobject state, |
| 553 jint saved_state_version) { |
548 void* data = env->GetDirectBufferAddress(state); | 554 void* data = env->GetDirectBufferAddress(state); |
549 int size = env->GetDirectBufferCapacity(state); | 555 int size = env->GetDirectBufferCapacity(state); |
550 ScopedJavaLocalRef<jstring> result = | 556 ScopedJavaLocalRef<jstring> result = |
551 WebContentsState::GetVirtualUrlFromByteBuffer( | 557 WebContentsState::GetVirtualUrlFromByteBuffer( |
552 env, data, size, saved_state_version); | 558 env, data, size, saved_state_version); |
553 return result.Release(); | 559 return result; |
554 } | 560 } |
555 | 561 |
556 // Creates a historical tab entry from the serialized tab contents contained | 562 // Creates a historical tab entry from the serialized tab contents contained |
557 // within |state|. | 563 // within |state|. |
558 static void CreateHistoricalTab(JNIEnv* env, | 564 static void CreateHistoricalTab(JNIEnv* env, |
559 jclass clazz, | 565 jclass clazz, |
560 jobject state, | 566 jobject state, |
561 jint saved_state_version) { | 567 jint saved_state_version) { |
562 scoped_ptr<WebContents> web_contents( | 568 scoped_ptr<WebContents> web_contents(WebContents::FromJavaWebContents( |
563 WebContents::FromJavaWebContents( | 569 WebContentsState::RestoreContentsFromByteBuffer(env, clazz, state, |
564 WebContentsState::RestoreContentsFromByteBuffer(env, | 570 saved_state_version, true) |
565 clazz, | 571 .obj())); |
566 state, | |
567 saved_state_version, | |
568 true))); | |
569 if (web_contents.get()) | 572 if (web_contents.get()) |
570 TabAndroid::CreateHistoricalTabFromContents(web_contents.get()); | 573 TabAndroid::CreateHistoricalTabFromContents(web_contents.get()); |
571 } | 574 } |
572 | 575 |
573 bool RegisterTabState(JNIEnv* env) { | 576 bool RegisterTabState(JNIEnv* env) { |
574 return RegisterNativesImpl(env); | 577 return RegisterNativesImpl(env); |
575 } | 578 } |
OLD | NEW |