diff options
author | mnissler@chromium.org <mnissler@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2012-04-05 12:49:21 +0000 |
---|---|---|
committer | mnissler@chromium.org <mnissler@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2012-04-05 12:49:21 +0000 |
commit | 6ed595f6c9b6debab62b445b3eac564c4797074a (patch) | |
tree | f4e9e1ab9c78fcd104605c05f6ec56fc04ed673a /chrome/browser/chromeos | |
parent | 6fd502860a2cba5d8da1decf06fc3d873f834e0d (diff) | |
download | chromium_src-6ed595f6c9b6debab62b445b3eac564c4797074a.zip chromium_src-6ed595f6c9b6debab62b445b3eac564c4797074a.tar.gz chromium_src-6ed595f6c9b6debab62b445b3eac564c4797074a.tar.bz2 |
Add calls to store/retrieve user policy to SessionManagerClient.
BUG=chromium:87383
TEST=None
Review URL: https://chromiumcodereview.appspot.com/9961014
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@130907 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'chrome/browser/chromeos')
9 files changed, 111 insertions, 60 deletions
diff --git a/chrome/browser/chromeos/dbus/mock_session_manager_client.h b/chrome/browser/chromeos/dbus/mock_session_manager_client.h index 5d0643e..7c6b41b 100644 --- a/chrome/browser/chromeos/dbus/mock_session_manager_client.h +++ b/chrome/browser/chromeos/dbus/mock_session_manager_client.h @@ -1,4 +1,4 @@ -// Copyright (c) 2011 The Chromium Authors. All rights reserved. +// Copyright (c) 2012 The Chromium Authors. All rights reserved. // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. @@ -25,8 +25,12 @@ class MockSessionManagerClient : public SessionManagerClient { MOCK_METHOD2(RestartJob, void(int, const std::string&)); MOCK_METHOD1(StartSession, void(const std::string&)); MOCK_METHOD0(StopSession, void(void)); - MOCK_METHOD1(RetrievePolicy, void(RetrievePolicyCallback)); - MOCK_METHOD2(StorePolicy, void(const std::string&, StorePolicyCallback)); + MOCK_METHOD1(RetrieveDevicePolicy, void(RetrievePolicyCallback)); + MOCK_METHOD1(RetrieveUserPolicy, void(RetrievePolicyCallback)); + MOCK_METHOD2(StoreDevicePolicy, void(const std::string&, + StorePolicyCallback)); + MOCK_METHOD2(StoreUserPolicy, void(const std::string&, + StorePolicyCallback)); }; } // namespace chromeos diff --git a/chrome/browser/chromeos/dbus/session_manager_client.cc b/chrome/browser/chromeos/dbus/session_manager_client.cc index 2509102..e106a0a 100644 --- a/chrome/browser/chromeos/dbus/session_manager_client.cc +++ b/chrome/browser/chromeos/dbus/session_manager_client.cc @@ -134,22 +134,52 @@ class SessionManagerClientImpl : public SessionManagerClient { } // SessionManagerClient override. - virtual void RetrievePolicy(RetrievePolicyCallback callback) OVERRIDE { + virtual void RetrieveDevicePolicy(RetrievePolicyCallback callback) OVERRIDE { + CallRetrievePolicy(login_manager::kSessionManagerRetrievePolicy, + callback); + } + + // SessionManagerClient override. + virtual void RetrieveUserPolicy(RetrievePolicyCallback callback) OVERRIDE { + CallRetrievePolicy(login_manager::kSessionManagerRetrieveUserPolicy, + callback); + } + + // SessionManagerClient override. + virtual void StoreDevicePolicy(const std::string& policy_blob, + StorePolicyCallback callback) OVERRIDE { + CallStorePolicy(login_manager::kSessionManagerStorePolicy, + policy_blob, callback); + } + + // SessionManagerClient override. + virtual void StoreUserPolicy(const std::string& policy_blob, + StorePolicyCallback callback) OVERRIDE { + CallStorePolicy(login_manager::kSessionManagerStoreUserPolicy, + policy_blob, callback); + } + + private: + // Helper for Retrieve{User,Device}Policy. + virtual void CallRetrievePolicy(const std::string& method_name, + RetrievePolicyCallback callback) { dbus::MethodCall method_call(login_manager::kSessionManagerInterface, - login_manager::kSessionManagerRetrievePolicy); + method_name); session_manager_proxy_->CallMethod( &method_call, dbus::ObjectProxy::TIMEOUT_USE_DEFAULT, base::Bind(&SessionManagerClientImpl::OnRetrievePolicy, weak_ptr_factory_.GetWeakPtr(), + method_name, callback)); } - // SessionManagerClient override. - virtual void StorePolicy(const std::string& policy_blob, - StorePolicyCallback callback) OVERRIDE { + // Helper for Store{User,Device}Policy. + virtual void CallStorePolicy(const std::string& method_name, + const std::string& policy_blob, + StorePolicyCallback callback) { dbus::MethodCall method_call(login_manager::kSessionManagerInterface, - login_manager::kSessionManagerStorePolicy); + method_name); dbus::MessageWriter writer(&method_call); // static_cast does not work due to signedness. writer.AppendArrayOfBytes( @@ -159,10 +189,10 @@ class SessionManagerClientImpl : public SessionManagerClient { dbus::ObjectProxy::TIMEOUT_USE_DEFAULT, base::Bind(&SessionManagerClientImpl::OnStorePolicy, weak_ptr_factory_.GetWeakPtr(), + method_name, callback)); } - private: // Called when kSessionManagerEmitLoginPromptReady method is complete. void OnEmitLoginPromptReady(dbus::Response* response) { LOG_IF(ERROR, !response) @@ -205,12 +235,13 @@ class SessionManagerClientImpl : public SessionManagerClient { << login_manager::kSessionManagerStopSession; } - // Called when kSessionManagerRetrievePolicy method is complete. - void OnRetrievePolicy(RetrievePolicyCallback callback, + // Called when kSessionManagerRetrievePolicy or + // kSessionManagerRetrieveUserPolicy method is complete. + void OnRetrievePolicy(const std::string& method_name, + RetrievePolicyCallback callback, dbus::Response* response) { if (!response) { - LOG(ERROR) << "Failed to call " - << login_manager::kSessionManagerRetrievePolicy; + LOG(ERROR) << "Failed to call " << method_name; callback.Run(""); return; } @@ -227,18 +258,18 @@ class SessionManagerClientImpl : public SessionManagerClient { callback.Run(serialized_proto); } - // Called when kSessionManagerStorePolicy method is complete. - void OnStorePolicy(StorePolicyCallback callback, dbus::Response* response) { - if (!response) { - LOG(ERROR) << "Failed to call " - << login_manager::kSessionManagerStorePolicy; - return; - } - dbus::MessageReader reader(response); + // Called when kSessionManagerStorePolicy or kSessionManagerStoreUserPolicy + // method is complete. + void OnStorePolicy(const std::string& method_name, + StorePolicyCallback callback, + dbus::Response* response) { bool success = false; - if (!reader.PopBool(&success)) { - LOG(ERROR) << "Invalid response: " << response->ToString(); - return; + if (!response) { + LOG(ERROR) << "Failed to call " << method_name; + } else { + dbus::MessageReader reader(response); + if (!reader.PopBool(&success)) + LOG(ERROR) << "Invalid response: " << response->ToString(); } callback.Run(success); } @@ -293,14 +324,20 @@ class SessionManagerClientStubImpl : public SessionManagerClient { virtual void RestartEntd() OVERRIDE {} virtual void StartSession(const std::string& user_email) OVERRIDE {} virtual void StopSession() OVERRIDE {} - virtual void RetrievePolicy(RetrievePolicyCallback callback) OVERRIDE { + virtual void RetrieveDevicePolicy(RetrievePolicyCallback callback) OVERRIDE { + callback.Run(""); + } + virtual void RetrieveUserPolicy(RetrievePolicyCallback callback) OVERRIDE { callback.Run(""); } - virtual void StorePolicy(const std::string& policy_blob, - StorePolicyCallback callback) OVERRIDE { + virtual void StoreDevicePolicy(const std::string& policy_blob, + StorePolicyCallback callback) OVERRIDE { + callback.Run(true); + } + virtual void StoreUserPolicy(const std::string& policy_blob, + StorePolicyCallback callback) OVERRIDE { callback.Run(true); } - }; SessionManagerClient::SessionManagerClient() { diff --git a/chrome/browser/chromeos/dbus/session_manager_client.h b/chrome/browser/chromeos/dbus/session_manager_client.h index 1041b58..a787fad 100644 --- a/chrome/browser/chromeos/dbus/session_manager_client.h +++ b/chrome/browser/chromeos/dbus/session_manager_client.h @@ -52,24 +52,34 @@ class SessionManagerClient { // Stops the current session. virtual void StopSession() = 0; - // Used for RetrievePolicy. Takes a serialized protocol buffer as string. + // Used for RetrieveDevicePolicy and RetrieveUserPolicy. Takes a serialized + // protocol buffer as string. Upon success, we will pass a protobuf to the + // callback. On failure, we will pass "". typedef base::Callback<void(const std::string&)> RetrievePolicyCallback; - // Fetches the policy blob stored by the session manager. Upon - // completion of the retrieve attempt, we will call the provided - // callback. Policies are serialized protocol buffers. Upon success, - // we will pass a protobuf to the callback. On failure, we will pass - // "". - virtual void RetrievePolicy(RetrievePolicyCallback callback) = 0; + // Fetches the device policy blob stored by the session manager. Upon + // completion of the retrieve attempt, we will call the provided callback. + virtual void RetrieveDevicePolicy(RetrievePolicyCallback callback) = 0; - // Used for StorePolicyCallback. Takes a boolean indicating whether the - // operation was successful or not. + // Fetches the user policy blob stored by the session manager for the + // currently signed-in user. Upon completion of the retrieve attempt, we will + // call the provided callback. + virtual void RetrieveUserPolicy(RetrievePolicyCallback callback) = 0; + + // Used for StoreDevicePolicy and StoreUserPolicy. Takes a boolean indicating + // whether the operation was successful or not. typedef base::Callback<void(bool)> StorePolicyCallback; - // Attempts to store |policy_blob| asynchronously. Upon completion of - // the store attempt, we will call callback. - virtual void StorePolicy(const std::string& policy_bob, - StorePolicyCallback callback) = 0; + // Attempts to asynchronously store |policy_blob| as device policy. Upon + // completion of the store attempt, we will call callback. + virtual void StoreDevicePolicy(const std::string& policy_blob, + StorePolicyCallback callback) = 0; + + // Attempts to asynchronously store |policy_blob| as user policy for the + // currently signed-in user. Upon completion of the store attempt, we will + // call callback. + virtual void StoreUserPolicy(const std::string& policy_blob, + StorePolicyCallback callback) = 0; // Creates the instance. static SessionManagerClient* Create(DBusClientImplementationType type, diff --git a/chrome/browser/chromeos/login/existing_user_controller_browsertest.cc b/chrome/browser/chromeos/login/existing_user_controller_browsertest.cc index 1d11abb..784df4c 100644 --- a/chrome/browser/chromeos/login/existing_user_controller_browsertest.cc +++ b/chrome/browser/chromeos/login/existing_user_controller_browsertest.cc @@ -6,8 +6,8 @@ #include "base/compiler_specific.h" #include "base/memory/scoped_ptr.h" #include "base/message_loop.h" -#include "chrome/browser/chromeos/cros/cros_mock.h" #include "chrome/browser/chromeos/cros/cros_in_process_browser_test.h" +#include "chrome/browser/chromeos/cros/cros_mock.h" #include "chrome/browser/chromeos/cros/mock_cryptohome_library.h" #include "chrome/browser/chromeos/cros/mock_network_library.h" #include "chrome/browser/chromeos/dbus/mock_dbus_thread_manager.h" @@ -125,7 +125,7 @@ class ExistingUserControllerTest : public CrosInProcessBrowserTest { mock_dbus_thread_manager->mock_session_manager_client(); EXPECT_CALL(*mock_session_manager_client, EmitLoginPromptReady()) .Times(1); - EXPECT_CALL(*mock_session_manager_client, RetrievePolicy(_)) + EXPECT_CALL(*mock_session_manager_client, RetrieveDevicePolicy(_)) .Times(AnyNumber()); cros_mock_->InitMockCryptohomeLibrary(); diff --git a/chrome/browser/chromeos/login/login_utils_browsertest.cc b/chrome/browser/chromeos/login/login_utils_browsertest.cc index faa494c..e471404 100644 --- a/chrome/browser/chromeos/login/login_utils_browsertest.cc +++ b/chrome/browser/chromeos/login/login_utils_browsertest.cc @@ -27,9 +27,9 @@ #include "chrome/browser/profiles/profile_manager.h" #include "chrome/common/chrome_paths.h" #include "chrome/common/chrome_switches.h" +#include "chrome/common/net/gaia/gaia_auth_consumer.h" #include "chrome/common/net/gaia/gaia_urls.h" #include "chrome/common/pref_names.h" -#include "chrome/common/net/gaia/gaia_auth_consumer.h" #include "chrome/test/base/testing_browser_process.h" #include "chrome/test/base/testing_pref_service.h" #include "content/public/browser/browser_thread.h" @@ -131,7 +131,7 @@ class LoginUtilsTestBase : public TESTBASE, // io_thread_state_. MockSessionManagerClient* session_managed_client = mock_dbus_thread_manager_.mock_session_manager_client(); - EXPECT_CALL(*session_managed_client, RetrievePolicy(_)) + EXPECT_CALL(*session_managed_client, RetrieveDevicePolicy(_)) .WillRepeatedly(MockSessionManagerClientPolicyCallback("")); mock_async_method_caller_ = new cryptohome::MockAsyncMethodCaller; diff --git a/chrome/browser/chromeos/login/network_screen_browsertest.cc b/chrome/browser/chromeos/login/network_screen_browsertest.cc index d85f357..37b68c2 100644 --- a/chrome/browser/chromeos/login/network_screen_browsertest.cc +++ b/chrome/browser/chromeos/login/network_screen_browsertest.cc @@ -28,12 +28,12 @@ #include "ui/views/controls/button/text_button.h" namespace chromeos { +using ::testing::A; using ::testing::AnyNumber; using ::testing::InvokeWithoutArgs; using ::testing::Return; using ::testing::ReturnRef; using ::testing::_; -using ::testing::A; using views::Button; class DummyButtonListener : public views::ButtonListener { @@ -60,7 +60,7 @@ class NetworkScreenTest : public WizardInProcessBrowserTest { cellular_.reset(new NetworkDevice("cellular")); EXPECT_CALL(*mock_session_manager_client, EmitLoginPromptReady()) .Times(1); - EXPECT_CALL(*mock_session_manager_client, RetrievePolicy(_)) + EXPECT_CALL(*mock_session_manager_client, RetrieveDevicePolicy(_)) .Times(AnyNumber()); // Minimal set of expectations needed on NetworkScreen initialization. diff --git a/chrome/browser/chromeos/login/signed_settings.cc b/chrome/browser/chromeos/login/signed_settings.cc index 2baa868..0b02bf4 100644 --- a/chrome/browser/chromeos/login/signed_settings.cc +++ b/chrome/browser/chromeos/login/signed_settings.cc @@ -193,7 +193,7 @@ void StorePolicyOp::OnKeyOpComplete(const OwnerManager::KeyOpCode return_code, void StorePolicyOp::RequestStorePolicy() { std::string serialized; if (policy_->SerializeToString(&serialized)) { - DBusThreadManager::Get()->GetSessionManagerClient()->StorePolicy( + DBusThreadManager::Get()->GetSessionManagerClient()->StoreDevicePolicy( serialized, base::Bind(&StorePolicyOp::OnBoolComplete, this)); } else { @@ -214,7 +214,7 @@ RetrievePolicyOp::RetrievePolicyOp( RetrievePolicyOp::~RetrievePolicyOp() {} void RetrievePolicyOp::Execute() { - DBusThreadManager::Get()->GetSessionManagerClient()->RetrievePolicy( + DBusThreadManager::Get()->GetSessionManagerClient()->RetrieveDevicePolicy( base::Bind(&RetrievePolicyOp::OnStringComplete, this)); } diff --git a/chrome/browser/chromeos/login/signed_settings_helper_unittest.cc b/chrome/browser/chromeos/login/signed_settings_helper_unittest.cc index 9903822..556611c 100644 --- a/chrome/browser/chromeos/login/signed_settings_helper_unittest.cc +++ b/chrome/browser/chromeos/login/signed_settings_helper_unittest.cc @@ -1,4 +1,4 @@ -// Copyright (c) 2011 The Chromium Authors. All rights reserved. +// Copyright (c) 2012 The Chromium Authors. All rights reserved. // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. @@ -59,9 +59,9 @@ class SignedSettingsHelperTest : public testing::Test, mock_dbus_thread_manager_->mock_session_manager_client(); // Make sure the mocked out class calls back to notify success on store and // retrieve ops. - EXPECT_CALL(*client, StorePolicy(_, _)) + EXPECT_CALL(*client, StoreDevicePolicy(_, _)) .WillRepeatedly(Store(true)); - EXPECT_CALL(*client, RetrievePolicy(_)) + EXPECT_CALL(*client, RetrieveDevicePolicy(_)) .WillRepeatedly(Retrieve(serialized_policy_)); EXPECT_CALL(m_, StartSigningAttempt(_, A<OwnerManager::Delegate*>())) diff --git a/chrome/browser/chromeos/login/signed_settings_unittest.cc b/chrome/browser/chromeos/login/signed_settings_unittest.cc index e343900..dff8c76 100644 --- a/chrome/browser/chromeos/login/signed_settings_unittest.cc +++ b/chrome/browser/chromeos/login/signed_settings_unittest.cc @@ -234,7 +234,7 @@ TEST_F(SignedSettingsTest, SignAndStorePolicy) { &signed_serialized); MockSessionManagerClient* client = mock_dbus_thread_manager_->mock_session_manager_client(); - EXPECT_CALL(*client, StorePolicy(signed_serialized, _)) + EXPECT_CALL(*client, StoreDevicePolicy(signed_serialized, _)) .WillOnce(Store(true)) .RetiresOnSaturation(); s->OnKeyOpComplete(OwnerManager::SUCCESS, fake_value_signature_); @@ -255,7 +255,7 @@ TEST_F(SignedSettingsTest, StoreSignedPolicy) { SignedSettings::CreateStorePolicyOp(&signed_policy, &d)); MockSessionManagerClient* client = mock_dbus_thread_manager_->mock_session_manager_client(); - EXPECT_CALL(*client, StorePolicy(signed_serialized, _)) + EXPECT_CALL(*client, StoreDevicePolicy(signed_serialized, _)) .WillOnce(Store(true)) .RetiresOnSaturation(); @@ -302,7 +302,7 @@ TEST_F(SignedSettingsTest, RetrievePolicy) { MockSessionManagerClient* client = mock_dbus_thread_manager_->mock_session_manager_client(); - EXPECT_CALL(*client, RetrievePolicy(_)) + EXPECT_CALL(*client, RetrieveDevicePolicy(_)) .WillOnce(Retrieve(signed_serialized)) .RetiresOnSaturation(); @@ -326,7 +326,7 @@ TEST_F(SignedSettingsTest, RetrieveNullPolicy) { MockSessionManagerClient* client = mock_dbus_thread_manager_->mock_session_manager_client(); - EXPECT_CALL(*client, RetrievePolicy(_)) + EXPECT_CALL(*client, RetrieveDevicePolicy(_)) .WillOnce(Retrieve("")) .RetiresOnSaturation(); @@ -343,7 +343,7 @@ TEST_F(SignedSettingsTest, RetrieveEmptyPolicy) { MockSessionManagerClient* client = mock_dbus_thread_manager_->mock_session_manager_client(); - EXPECT_CALL(*client, RetrievePolicy(_)) + EXPECT_CALL(*client, RetrieveDevicePolicy(_)) .WillOnce(Retrieve("")) .RetiresOnSaturation(); @@ -362,7 +362,7 @@ TEST_F(SignedSettingsTest, RetrieveUnsignedPolicy) { MockSessionManagerClient* client = mock_dbus_thread_manager_->mock_session_manager_client(); - EXPECT_CALL(*client, RetrievePolicy(_)) + EXPECT_CALL(*client, RetrieveDevicePolicy(_)) .WillOnce(Retrieve(serialized)) .RetiresOnSaturation(); @@ -381,7 +381,7 @@ TEST_F(SignedSettingsTest, RetrieveMalsignedPolicy) { MockSessionManagerClient* client = mock_dbus_thread_manager_->mock_session_manager_client(); - EXPECT_CALL(*client, RetrievePolicy(_)) + EXPECT_CALL(*client, RetrieveDevicePolicy(_)) .WillOnce(Retrieve(signed_serialized)) .RetiresOnSaturation(); |