| 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 package com.android.webview.chromium; | 5 package com.android.webview.chromium; |
| 6 | 6 |
| 7 import android.webkit.ValueCallback; | 7 import android.webkit.ValueCallback; |
| 8 import android.webkit.WebStorage; | 8 import android.webkit.WebStorage; |
| 9 | 9 |
| 10 import org.chromium.android_webview.AwQuotaManagerBridge; | 10 import org.chromium.android_webview.AwQuotaManagerBridge; |
| 11 import org.chromium.base.ThreadUtils; |
| 11 | 12 |
| 12 import java.util.HashMap; | 13 import java.util.HashMap; |
| 13 import java.util.Map; | 14 import java.util.Map; |
| 14 | 15 |
| 15 /** | 16 /** |
| 16 * Chromium implementation of WebStorage -- forwards calls to the | 17 * Chromium implementation of WebStorage -- forwards calls to the |
| 17 * chromium internal implementation. | 18 * chromium internal implementation. |
| 18 */ | 19 */ |
| 19 @SuppressWarnings("deprecation") | 20 @SuppressWarnings("deprecation") |
| 20 final class WebStorageAdapter extends WebStorage { | 21 final class WebStorageAdapter extends WebStorage { |
| 22 private final WebViewChromiumFactoryProvider mFactory; |
| 21 private final AwQuotaManagerBridge mQuotaManagerBridge; | 23 private final AwQuotaManagerBridge mQuotaManagerBridge; |
| 22 WebStorageAdapter(AwQuotaManagerBridge quotaManagerBridge) { | 24 |
| 25 WebStorageAdapter( |
| 26 WebViewChromiumFactoryProvider factory, AwQuotaManagerBridge quotaMa
nagerBridge) { |
| 27 mFactory = factory; |
| 23 mQuotaManagerBridge = quotaManagerBridge; | 28 mQuotaManagerBridge = quotaManagerBridge; |
| 24 } | 29 } |
| 25 | 30 |
| 26 @Override | 31 @Override |
| 27 public void getOrigins(final ValueCallback<Map> callback) { | 32 public void getOrigins(final ValueCallback<Map> callback) { |
| 28 mQuotaManagerBridge.getOrigins(new ValueCallback<AwQuotaManagerBridge.Or
igins>() { | 33 final ValueCallback<AwQuotaManagerBridge.Origins> awOriginsCallback = |
| 29 @Override | 34 new ValueCallback<AwQuotaManagerBridge.Origins>() { |
| 30 public void onReceiveValue(AwQuotaManagerBridge.Origins origins) { | 35 @Override |
| 31 Map<String, Origin> originsMap = new HashMap<String, Origin>(); | 36 public void onReceiveValue(AwQuotaManagerBridge.Origins orig
ins) { |
| 32 for (int i = 0; i < origins.mOrigins.length; ++i) { | 37 Map<String, Origin> originsMap = new HashMap<String, Ori
gin>(); |
| 33 Origin origin = new Origin(origins.mOrigins[i], origins.mQuo
tas[i], | 38 for (int i = 0; i < origins.mOrigins.length; ++i) { |
| 34 origins.mUsages[i]) { | 39 Origin origin = new Origin( |
| 35 // Intentionally empty to work around cross-package prot
ected visibility | 40 origins.mOrigins[i], origins.mQuotas[i], ori
gins.mUsages[i]) { |
| 36 // of Origin constructor. | 41 // Intentionally empty to work around cross-pack
age protected |
| 37 }; | 42 // visibility |
| 38 originsMap.put(origins.mOrigins[i], origin); | 43 // of Origin constructor. |
| 44 }; |
| 45 originsMap.put(origins.mOrigins[i], origin); |
| 46 } |
| 47 callback.onReceiveValue(originsMap); |
| 48 } |
| 49 }; |
| 50 if (checkNeedsPost()) { |
| 51 mFactory.addTask(new Runnable() { |
| 52 @Override |
| 53 public void run() { |
| 54 mQuotaManagerBridge.getOrigins(awOriginsCallback); |
| 39 } | 55 } |
| 40 callback.onReceiveValue(originsMap); | 56 |
| 41 } | 57 }); |
| 42 }); | 58 return; |
| 59 } |
| 60 mQuotaManagerBridge.getOrigins(awOriginsCallback); |
| 43 } | 61 } |
| 44 | 62 |
| 45 @Override | 63 @Override |
| 46 public void getUsageForOrigin(String origin, ValueCallback<Long> callback) { | 64 public void getUsageForOrigin(final String origin, final ValueCallback<Long>
callback) { |
| 65 if (checkNeedsPost()) { |
| 66 mFactory.addTask(new Runnable() { |
| 67 @Override |
| 68 public void run() { |
| 69 mQuotaManagerBridge.getUsageForOrigin(origin, callback); |
| 70 } |
| 71 |
| 72 }); |
| 73 return; |
| 74 } |
| 47 mQuotaManagerBridge.getUsageForOrigin(origin, callback); | 75 mQuotaManagerBridge.getUsageForOrigin(origin, callback); |
| 48 } | 76 } |
| 49 | 77 |
| 50 @Override | 78 @Override |
| 51 public void getQuotaForOrigin(String origin, ValueCallback<Long> callback) { | 79 public void getQuotaForOrigin(final String origin, final ValueCallback<Long>
callback) { |
| 80 if (checkNeedsPost()) { |
| 81 mFactory.addTask(new Runnable() { |
| 82 @Override |
| 83 public void run() { |
| 84 mQuotaManagerBridge.getQuotaForOrigin(origin, callback); |
| 85 } |
| 86 |
| 87 }); |
| 88 return; |
| 89 } |
| 52 mQuotaManagerBridge.getQuotaForOrigin(origin, callback); | 90 mQuotaManagerBridge.getQuotaForOrigin(origin, callback); |
| 53 } | 91 } |
| 54 | 92 |
| 55 @Override | 93 @Override |
| 56 public void setQuotaForOrigin(String origin, long quota) { | 94 public void setQuotaForOrigin(String origin, long quota) { |
| 57 // Intentional no-op for deprecated method. | 95 // Intentional no-op for deprecated method. |
| 58 } | 96 } |
| 59 | 97 |
| 60 @Override | 98 @Override |
| 61 public void deleteOrigin(String origin) { | 99 public void deleteOrigin(final String origin) { |
| 100 if (checkNeedsPost()) { |
| 101 mFactory.addTask(new Runnable() { |
| 102 @Override |
| 103 public void run() { |
| 104 mQuotaManagerBridge.deleteOrigin(origin); |
| 105 } |
| 106 |
| 107 }); |
| 108 return; |
| 109 } |
| 62 mQuotaManagerBridge.deleteOrigin(origin); | 110 mQuotaManagerBridge.deleteOrigin(origin); |
| 63 } | 111 } |
| 64 | 112 |
| 65 @Override | 113 @Override |
| 66 public void deleteAllData() { | 114 public void deleteAllData() { |
| 115 if (checkNeedsPost()) { |
| 116 mFactory.addTask(new Runnable() { |
| 117 @Override |
| 118 public void run() { |
| 119 mQuotaManagerBridge.deleteAllData(); |
| 120 } |
| 121 |
| 122 }); |
| 123 return; |
| 124 } |
| 67 mQuotaManagerBridge.deleteAllData(); | 125 mQuotaManagerBridge.deleteAllData(); |
| 68 } | 126 } |
| 127 |
| 128 private static boolean checkNeedsPost() { |
| 129 // Init is guaranteed to have happened if a WebStorageAdapter is created
, so do not |
| 130 // need to check WebViewChromiumFactoryProvider.hasStarted. |
| 131 return !ThreadUtils.runningOnUiThread(); |
| 132 } |
| 69 } | 133 } |
| OLD | NEW |