1c7939b1750ba98ab745110a138209d8b981fdc21Huahui Wu/* 2c7939b1750ba98ab745110a138209d8b981fdc21Huahui Wu * Copyright (C) 2011 The Android Open Source Project 3c7939b1750ba98ab745110a138209d8b981fdc21Huahui Wu * 4c7939b1750ba98ab745110a138209d8b981fdc21Huahui Wu * Licensed under the Apache License, Version 2.0 (the "License"); 5c7939b1750ba98ab745110a138209d8b981fdc21Huahui Wu * you may not use this file except in compliance with the License. 6c7939b1750ba98ab745110a138209d8b981fdc21Huahui Wu * You may obtain a copy of the License at 7c7939b1750ba98ab745110a138209d8b981fdc21Huahui Wu * 8c7939b1750ba98ab745110a138209d8b981fdc21Huahui Wu * http://www.apache.org/licenses/LICENSE-2.0 9c7939b1750ba98ab745110a138209d8b981fdc21Huahui Wu * 10c7939b1750ba98ab745110a138209d8b981fdc21Huahui Wu * Unless required by applicable law or agreed to in writing, software 11c7939b1750ba98ab745110a138209d8b981fdc21Huahui Wu * distributed under the License is distributed on an "AS IS" BASIS, 12c7939b1750ba98ab745110a138209d8b981fdc21Huahui Wu * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13c7939b1750ba98ab745110a138209d8b981fdc21Huahui Wu * See the License for the specific language governing permissions and 14c7939b1750ba98ab745110a138209d8b981fdc21Huahui Wu * limitations under the License. 15c7939b1750ba98ab745110a138209d8b981fdc21Huahui Wu */ 16c7939b1750ba98ab745110a138209d8b981fdc21Huahui Wu 17c7939b1750ba98ab745110a138209d8b981fdc21Huahui Wupackage android.webkit; 18c7939b1750ba98ab745110a138209d8b981fdc21Huahui Wu 19c7939b1750ba98ab745110a138209d8b981fdc21Huahui Wuimport android.content.Context; 20c7939b1750ba98ab745110a138209d8b981fdc21Huahui Wuimport android.os.Handler; 21c7939b1750ba98ab745110a138209d8b981fdc21Huahui Wuimport android.util.Log; 22c7939b1750ba98ab745110a138209d8b981fdc21Huahui Wu 23c7939b1750ba98ab745110a138209d8b981fdc21Huahui Wu/** 24c7939b1750ba98ab745110a138209d8b981fdc21Huahui Wu * KeyStoreHandler: class responsible for certificate installation to 25c7939b1750ba98ab745110a138209d8b981fdc21Huahui Wu * the system key store. It reads the certificates file from network 26c7939b1750ba98ab745110a138209d8b981fdc21Huahui Wu * then pass the bytes to class CertTool. 27c7939b1750ba98ab745110a138209d8b981fdc21Huahui Wu * This class is only needed if the Chromium HTTP stack is used. 28c7939b1750ba98ab745110a138209d8b981fdc21Huahui Wu */ 29c7939b1750ba98ab745110a138209d8b981fdc21Huahui Wuclass KeyStoreHandler extends Handler { 30c7939b1750ba98ab745110a138209d8b981fdc21Huahui Wu private static final String LOGTAG = "KeyStoreHandler"; 31c7939b1750ba98ab745110a138209d8b981fdc21Huahui Wu 32c7939b1750ba98ab745110a138209d8b981fdc21Huahui Wu private final ByteArrayBuilder mDataBuilder = new ByteArrayBuilder(); 33c7939b1750ba98ab745110a138209d8b981fdc21Huahui Wu 34c7939b1750ba98ab745110a138209d8b981fdc21Huahui Wu private String mMimeType; 35c7939b1750ba98ab745110a138209d8b981fdc21Huahui Wu 36c7939b1750ba98ab745110a138209d8b981fdc21Huahui Wu public KeyStoreHandler(String mimeType) { 37c7939b1750ba98ab745110a138209d8b981fdc21Huahui Wu mMimeType = mimeType; 38c7939b1750ba98ab745110a138209d8b981fdc21Huahui Wu } 39c7939b1750ba98ab745110a138209d8b981fdc21Huahui Wu 40c7939b1750ba98ab745110a138209d8b981fdc21Huahui Wu /** 41c7939b1750ba98ab745110a138209d8b981fdc21Huahui Wu * Add data to the internal collection of data. 42c7939b1750ba98ab745110a138209d8b981fdc21Huahui Wu * @param data A byte array containing the content. 43c7939b1750ba98ab745110a138209d8b981fdc21Huahui Wu * @param length The length of data. 44c7939b1750ba98ab745110a138209d8b981fdc21Huahui Wu */ 45c7939b1750ba98ab745110a138209d8b981fdc21Huahui Wu public void didReceiveData(byte[] data, int length) { 46c7939b1750ba98ab745110a138209d8b981fdc21Huahui Wu synchronized (mDataBuilder) { 47c7939b1750ba98ab745110a138209d8b981fdc21Huahui Wu mDataBuilder.append(data, 0, length); 48c7939b1750ba98ab745110a138209d8b981fdc21Huahui Wu } 49c7939b1750ba98ab745110a138209d8b981fdc21Huahui Wu } 50c7939b1750ba98ab745110a138209d8b981fdc21Huahui Wu 51c7939b1750ba98ab745110a138209d8b981fdc21Huahui Wu public void installCert(Context context) { 52c7939b1750ba98ab745110a138209d8b981fdc21Huahui Wu String type = CertTool.getCertType(mMimeType); 53c7939b1750ba98ab745110a138209d8b981fdc21Huahui Wu if (type == null) return; 54c7939b1750ba98ab745110a138209d8b981fdc21Huahui Wu 55c7939b1750ba98ab745110a138209d8b981fdc21Huahui Wu // This must be synchronized so that no more data can be added 56c7939b1750ba98ab745110a138209d8b981fdc21Huahui Wu // after getByteSize returns. 57c7939b1750ba98ab745110a138209d8b981fdc21Huahui Wu synchronized (mDataBuilder) { 58c7939b1750ba98ab745110a138209d8b981fdc21Huahui Wu // In the case of downloading certificate, we will save it 59c7939b1750ba98ab745110a138209d8b981fdc21Huahui Wu // to the KeyStore and stop the current loading so that it 60c7939b1750ba98ab745110a138209d8b981fdc21Huahui Wu // will not generate a new history page 61c7939b1750ba98ab745110a138209d8b981fdc21Huahui Wu byte[] cert = new byte[mDataBuilder.getByteSize()]; 62c7939b1750ba98ab745110a138209d8b981fdc21Huahui Wu int offset = 0; 63c7939b1750ba98ab745110a138209d8b981fdc21Huahui Wu while (true) { 64c7939b1750ba98ab745110a138209d8b981fdc21Huahui Wu ByteArrayBuilder.Chunk c = mDataBuilder.getFirstChunk(); 65c7939b1750ba98ab745110a138209d8b981fdc21Huahui Wu if (c == null) break; 66c7939b1750ba98ab745110a138209d8b981fdc21Huahui Wu 67c7939b1750ba98ab745110a138209d8b981fdc21Huahui Wu if (c.mLength != 0) { 68c7939b1750ba98ab745110a138209d8b981fdc21Huahui Wu System.arraycopy(c.mArray, 0, cert, offset, c.mLength); 69c7939b1750ba98ab745110a138209d8b981fdc21Huahui Wu offset += c.mLength; 70c7939b1750ba98ab745110a138209d8b981fdc21Huahui Wu } 71c7939b1750ba98ab745110a138209d8b981fdc21Huahui Wu c.release(); 72c7939b1750ba98ab745110a138209d8b981fdc21Huahui Wu } 73c7939b1750ba98ab745110a138209d8b981fdc21Huahui Wu CertTool.addCertificate(context, type, cert); 74c7939b1750ba98ab745110a138209d8b981fdc21Huahui Wu return; 75c7939b1750ba98ab745110a138209d8b981fdc21Huahui Wu } 76c7939b1750ba98ab745110a138209d8b981fdc21Huahui Wu } 77c7939b1750ba98ab745110a138209d8b981fdc21Huahui Wu} 78