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