summaryrefslogtreecommitdiff
path: root/libs/storage
diff options
context:
space:
mode:
authorSudheer Shanka <sudheersai@google.com>2018-08-27 15:50:23 -0700
committerSudheer Shanka <sudheersai@google.com>2018-08-27 15:50:59 -0700
commit25469aacb8fa4f0198af945b5a9878008e16f2c4 (patch)
tree41bb78305bbd9b4dc98bb867c7c10d6669050d42 /libs/storage
parentc0ea4241bb9ea8d0b9dea5147ac839884b42b55d (diff)
Remove DefaultContainerService usage in StorageManagerService.
StorageManagerService uses DefaultContainerService to obtain ObbInfo for files passed through mountObb() transaction. This change moves this logic to client side and so ObbInfo will be passed as part of mountObb() transaction. Bug: 111838160 Test: atest src/android/os/storage/cts/StorageManagerTest.java Test: atest core/tests/coretests/src/android/os/storage/StorageManagerIntegrationTest.java Test: atest services/tests/servicestests/src/com/android/server/MountServiceTests.java Change-Id: I29aee3aa54a45057df96aae289888161a3e3af71
Diffstat (limited to 'libs/storage')
-rw-r--r--libs/storage/Android.bp1
-rw-r--r--libs/storage/IMountService.cpp3
-rw-r--r--libs/storage/ObbInfo.cpp47
-rw-r--r--libs/storage/include/storage/IMountService.h3
-rw-r--r--libs/storage/include/storage/ObbInfo.h48
5 files changed, 100 insertions, 2 deletions
diff --git a/libs/storage/Android.bp b/libs/storage/Android.bp
index 911bd1d25393..c19933e39c96 100644
--- a/libs/storage/Android.bp
+++ b/libs/storage/Android.bp
@@ -6,6 +6,7 @@ cc_library_static {
"IMountShutdownObserver.cpp",
"IObbActionListener.cpp",
"IMountService.cpp",
+ "ObbInfo.cpp",
],
export_include_dirs: ["include"],
diff --git a/libs/storage/IMountService.cpp b/libs/storage/IMountService.cpp
index fa3d8bd0930f..fd6e6e932ebc 100644
--- a/libs/storage/IMountService.cpp
+++ b/libs/storage/IMountService.cpp
@@ -443,7 +443,7 @@ public:
}
void mountObb(const String16& rawPath, const String16& canonicalPath, const String16& key,
- const sp<IObbActionListener>& token, int32_t nonce)
+ const sp<IObbActionListener>& token, int32_t nonce, const sp<ObbInfo>& obbInfo)
{
Parcel data, reply;
data.writeInterfaceToken(IMountService::getInterfaceDescriptor());
@@ -452,6 +452,7 @@ public:
data.writeString16(key);
data.writeStrongBinder(IInterface::asBinder(token));
data.writeInt32(nonce);
+ obbInfo->writeToParcel(&data);
if (remote()->transact(TRANSACTION_mountObb, data, &reply) != NO_ERROR) {
ALOGD("mountObb could not contact remote\n");
return;
diff --git a/libs/storage/ObbInfo.cpp b/libs/storage/ObbInfo.cpp
new file mode 100644
index 000000000000..1bb6b3a89b86
--- /dev/null
+++ b/libs/storage/ObbInfo.cpp
@@ -0,0 +1,47 @@
+/*
+ * Copyright (C) 2018 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include <storage/ObbInfo.h>
+
+#include <binder/Parcel.h>
+#include <utils/String16.h>
+#include <sys/types.h>
+
+namespace android {
+
+ObbInfo::ObbInfo(const String16 fileName, const String16 packageName, int32_t version,
+ int32_t flags, size_t saltSize, const uint8_t* salt) : mFileName(fileName),
+ mPackageName(packageName), mVersion(version), mFlags(flags), mSaltSize(saltSize),
+ mSalt(salt) {}
+
+ObbInfo::~ObbInfo() {}
+
+status_t ObbInfo::readFromParcel(const Parcel*) {
+ return INVALID_OPERATION;
+}
+
+status_t ObbInfo::writeToParcel(Parcel* p) const {
+ // Parcel write code must be kept in sync with
+ // frameworks/base/core/java/android/content/res/ObbInfo.java
+ p->writeString16(mFileName);
+ p->writeString16(mPackageName);
+ p->writeInt32(mVersion);
+ p->writeInt32(mFlags);
+ p->writeByteArray(mSaltSize, mSalt);
+ return OK;
+}
+
+}; // namespace android \ No newline at end of file
diff --git a/libs/storage/include/storage/IMountService.h b/libs/storage/include/storage/IMountService.h
index c3d34d84958b..2463e023efc1 100644
--- a/libs/storage/include/storage/IMountService.h
+++ b/libs/storage/include/storage/IMountService.h
@@ -20,6 +20,7 @@
#include <storage/IMountServiceListener.h>
#include <storage/IMountShutdownObserver.h>
#include <storage/IObbActionListener.h>
+#include <storage/ObbInfo.h>
#include <utils/String8.h>
@@ -64,7 +65,7 @@ public:
virtual void finishMediaUpdate() = 0;
virtual void mountObb(const String16& rawPath, const String16& canonicalPath,
const String16& key, const sp<IObbActionListener>& token,
- const int32_t nonce) = 0;
+ const int32_t nonce, const sp<ObbInfo>& obbInfo) = 0;
virtual void unmountObb(const String16& filename, const bool force,
const sp<IObbActionListener>& token, const int32_t nonce) = 0;
virtual bool isObbMounted(const String16& filename) = 0;
diff --git a/libs/storage/include/storage/ObbInfo.h b/libs/storage/include/storage/ObbInfo.h
new file mode 100644
index 000000000000..e4cc353d64c7
--- /dev/null
+++ b/libs/storage/include/storage/ObbInfo.h
@@ -0,0 +1,48 @@
+/*
+ * Copyright (C) 2018 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#ifndef ANDROID_OBBINFO_H
+#define ANDROID_OBBINFO_H
+
+#include <binder/Parcelable.h>
+#include <utils/RefBase.h>
+#include <utils/String16.h>
+#include <sys/types.h>
+
+namespace android {
+
+class ObbInfo : public Parcelable, public virtual RefBase {
+
+public:
+ ObbInfo(const String16 fileName, const String16 packageName, int32_t version,
+ int32_t flags, size_t saltSize, const uint8_t* salt);
+ ~ObbInfo();
+
+ status_t writeToParcel(Parcel* parcel) const override;
+ status_t readFromParcel(const Parcel* parcel) override;
+
+private:
+ const String16 mFileName;
+ const String16 mPackageName;
+ int32_t mVersion;
+ int32_t mFlags;
+ size_t mSaltSize;
+ const uint8_t* mSalt;
+};
+
+}; // namespace android
+
+#endif // ANDROID_OBBINFO_H \ No newline at end of file