From 7f20d1177788a5cac894e5130c97af99a84ebe4f Mon Sep 17 00:00:00 2001 From: zenparsing Date: Mon, 3 Aug 2020 11:59:14 -0400 Subject: [PATCH 1/2] Add IsInitialized to rewards service interface --- components/brave_ads/browser/ads_service_impl_unittest.cc | 1 + components/brave_rewards/browser/rewards_service.h | 2 ++ components/brave_rewards/browser/rewards_service_impl.cc | 4 ++++ components/brave_rewards/browser/rewards_service_impl.h | 2 ++ 4 files changed, 9 insertions(+) diff --git a/components/brave_ads/browser/ads_service_impl_unittest.cc b/components/brave_ads/browser/ads_service_impl_unittest.cc index f7776614e8ff..afc673fda18c 100644 --- a/components/brave_ads/browser/ads_service_impl_unittest.cc +++ b/components/brave_ads/browser/ads_service_impl_unittest.cc @@ -34,6 +34,7 @@ class MockRewardsService : public RewardsService { MockRewardsService() {} ~MockRewardsService() {} + MOCK_METHOD0(IsInitialized, bool()); MOCK_METHOD1(CreateWallet, void(brave_rewards::CreateWalletCallback)); MOCK_METHOD1( GetRewardsParameters, diff --git a/components/brave_rewards/browser/rewards_service.h b/components/brave_rewards/browser/rewards_service.h index 38bc9e403cf8..8f5391c91c5b 100644 --- a/components/brave_rewards/browser/rewards_service.h +++ b/components/brave_rewards/browser/rewards_service.h @@ -140,6 +140,8 @@ class RewardsService : public KeyedService { RewardsService(); ~RewardsService() override; + virtual bool IsInitialized() = 0; + virtual void CreateWallet(CreateWalletCallback callback) = 0; virtual void GetRewardsParameters(GetRewardsParametersCallback callback) = 0; virtual void GetContentSiteList( diff --git a/components/brave_rewards/browser/rewards_service_impl.cc b/components/brave_rewards/browser/rewards_service_impl.cc index 146786e7dbb4..8fb403047803 100644 --- a/components/brave_rewards/browser/rewards_service_impl.cc +++ b/components/brave_rewards/browser/rewards_service_impl.cc @@ -387,6 +387,10 @@ void RewardsServiceImpl::ConnectionClosed() { base::TimeDelta::FromSeconds(1)); } +bool RewardsServiceImpl::IsInitialized() { + return Connected() && ready_->is_signaled(); +} + void RewardsServiceImpl::Init( std::unique_ptr extension_observer, std::unique_ptr private_observer, diff --git a/components/brave_rewards/browser/rewards_service_impl.h b/components/brave_rewards/browser/rewards_service_impl.h index 3a519eba6929..09e1f922e9f4 100644 --- a/components/brave_rewards/browser/rewards_service_impl.h +++ b/components/brave_rewards/browser/rewards_service_impl.h @@ -107,6 +107,8 @@ class RewardsServiceImpl : public RewardsService, // KeyedService: void Shutdown() override; + bool IsInitialized() override; + void Init( std::unique_ptr extension_observer, std::unique_ptr private_observer, From 767e5d48ef3b901bd679dc6e8003db066ddf2b29 Mon Sep 17 00:00:00 2001 From: zenparsing Date: Fri, 24 Jul 2020 17:20:03 -0400 Subject: [PATCH 2/2] Check rewards service initialization status on rewards page load --- browser/ui/webui/brave_rewards_page_ui.cc | 17 +++++++++++++++++ .../android_page/actions/rewards_actions.ts | 2 ++ .../resources/android_page/components/app.tsx | 2 ++ .../android_page/constants/rewards_types.ts | 1 + .../android_page/reducers/rewards_reducer.ts | 4 ++++ .../resources/android_page/storage.ts | 3 ++- .../resources/page/actions/rewards_actions.ts | 2 ++ .../resources/page/components/app.tsx | 2 ++ .../resources/page/constants/rewards_types.ts | 1 + .../resources/page/reducers/rewards_reducer.ts | 4 ++++ .../brave_rewards/resources/page/storage.ts | 3 ++- package-lock.json | 4 ++-- package.json | 2 +- 13 files changed, 42 insertions(+), 5 deletions(-) diff --git a/browser/ui/webui/brave_rewards_page_ui.cc b/browser/ui/webui/brave_rewards_page_ui.cc index 86aa6a92f729..34ef973f96b3 100644 --- a/browser/ui/webui/brave_rewards_page_ui.cc +++ b/browser/ui/webui/brave_rewards_page_ui.cc @@ -70,6 +70,7 @@ class RewardsDOMHandler : public WebUIMessageHandler, void RegisterMessages() override; private: + void IsInitialized(const base::ListValue* args); void HandleCreateWalletRequested(const base::ListValue* args); void GetRewardsParameters(const base::ListValue* args); void GetAutoContributeProperties(const base::ListValue* args); @@ -339,6 +340,9 @@ void RewardsDOMHandler::RegisterMessages() { profile, chrome::FaviconUrlFormat::kFaviconLegacy)); #endif + web_ui()->RegisterMessageCallback("brave_rewards.isInitialized", + base::BindRepeating(&RewardsDOMHandler::IsInitialized, + base::Unretained(this))); web_ui()->RegisterMessageCallback("brave_rewards.createWalletRequested", base::BindRepeating(&RewardsDOMHandler::HandleCreateWalletRequested, base::Unretained(this))); @@ -501,6 +505,19 @@ void RewardsDOMHandler::Init() { rewards_service_->AddObserver(this); } +void RewardsDOMHandler::IsInitialized( + const base::ListValue* args) { + if (!web_ui()->CanCallJavascript()) { + return; + } + + if (rewards_service_ && rewards_service_->IsInitialized()) { + web_ui()->CallJavascriptFunctionUnsafe( + "brave_rewards.initialized", + base::Value(0)); + } +} + void RewardsDOMHandler::HandleCreateWalletRequested( const base::ListValue* args) { if (!rewards_service_) diff --git a/components/brave_rewards/resources/android_page/actions/rewards_actions.ts b/components/brave_rewards/resources/android_page/actions/rewards_actions.ts index 84a88a31dff8..efa076be62f5 100644 --- a/components/brave_rewards/resources/android_page/actions/rewards_actions.ts +++ b/components/brave_rewards/resources/android_page/actions/rewards_actions.ts @@ -7,6 +7,8 @@ import { action } from 'typesafe-actions' // Constant import { types } from '../constants/rewards_types' +export const isInitialized = () => action(types.IS_INITIALIZED) + export const createWallet = () => action(types.CREATE_WALLET) export const onWalletCreated = () => action(types.WALLET_CREATED) diff --git a/components/brave_rewards/resources/android_page/components/app.tsx b/components/brave_rewards/resources/android_page/components/app.tsx index 88e4a7a6d16d..e84ea93a206e 100644 --- a/components/brave_rewards/resources/android_page/components/app.tsx +++ b/components/brave_rewards/resources/android_page/components/app.tsx @@ -29,6 +29,8 @@ export class App extends React.Component { } componentDidMount () { + this.actions.isInitialized() + if (!this.props.rewardsData.walletCreated) { this.actions.checkWalletExistence() } diff --git a/components/brave_rewards/resources/android_page/constants/rewards_types.ts b/components/brave_rewards/resources/android_page/constants/rewards_types.ts index 94ed88b306cf..667f7cdc970c 100644 --- a/components/brave_rewards/resources/android_page/constants/rewards_types.ts +++ b/components/brave_rewards/resources/android_page/constants/rewards_types.ts @@ -3,6 +3,7 @@ * You can obtain one at http://mozilla.org/MPL/2.0/. */ export const enum types { + IS_INITIALIZED = '@@rewards/IS_INITIALIZED', CREATE_WALLET = '@@rewards/CREATE_WALLET', WALLET_CREATED = '@@rewards/WALLET_CREATED', WALLET_CREATE_FAILED = '@@rewards/WALLET_CREATE_FAILED', diff --git a/components/brave_rewards/resources/android_page/reducers/rewards_reducer.ts b/components/brave_rewards/resources/android_page/reducers/rewards_reducer.ts index 9b074d1dbf39..bdac2fc9d5a5 100644 --- a/components/brave_rewards/resources/android_page/reducers/rewards_reducer.ts +++ b/components/brave_rewards/resources/android_page/reducers/rewards_reducer.ts @@ -10,6 +10,10 @@ import { defaultState } from '../storage' const rewardsReducer: Reducer = (state: Rewards.State, action) => { switch (action.type) { + case types.IS_INITIALIZED: { + chrome.send('brave_rewards.isInitialized') + break + } case types.TOGGLE_ENABLE_MAIN: { if (state.initializing) { break diff --git a/components/brave_rewards/resources/android_page/storage.ts b/components/brave_rewards/resources/android_page/storage.ts index 1bf94defaced..df36a81d397f 100644 --- a/components/brave_rewards/resources/android_page/storage.ts +++ b/components/brave_rewards/resources/android_page/storage.ts @@ -79,7 +79,7 @@ export const defaultState: Rewards.State = { autoContributeChoices: [], rate: 0 }, - initializing: false + initializing: true } const cleanData = (state: Rewards.State) => { @@ -100,6 +100,7 @@ export const load = (): Rewards.State => { if (data) { try { state = JSON.parse(data) + state.initializing = true } catch (e) { console.error('Could not parse local storage data: ', e) } diff --git a/components/brave_rewards/resources/page/actions/rewards_actions.ts b/components/brave_rewards/resources/page/actions/rewards_actions.ts index d9bebed30798..94ab0ab691a6 100644 --- a/components/brave_rewards/resources/page/actions/rewards_actions.ts +++ b/components/brave_rewards/resources/page/actions/rewards_actions.ts @@ -7,6 +7,8 @@ import { action } from 'typesafe-actions' // Constant import { types } from '../constants/rewards_types' +export const isInitialized = () => action(types.IS_INITIALIZED) + export const createWallet = () => action(types.CREATE_WALLET) export const onWalletCreated = () => action(types.WALLET_CREATED) diff --git a/components/brave_rewards/resources/page/components/app.tsx b/components/brave_rewards/resources/page/components/app.tsx index d05ed50a5ada..a120c653c80a 100644 --- a/components/brave_rewards/resources/page/components/app.tsx +++ b/components/brave_rewards/resources/page/components/app.tsx @@ -29,6 +29,8 @@ export class App extends React.Component { } componentDidMount () { + this.actions.isInitialized() + if (!this.props.rewardsData.walletCreated) { this.actions.checkWalletExistence() } diff --git a/components/brave_rewards/resources/page/constants/rewards_types.ts b/components/brave_rewards/resources/page/constants/rewards_types.ts index f898a8b274bb..90f5c08432a0 100644 --- a/components/brave_rewards/resources/page/constants/rewards_types.ts +++ b/components/brave_rewards/resources/page/constants/rewards_types.ts @@ -3,6 +3,7 @@ * You can obtain one at http://mozilla.org/MPL/2.0/. */ export const enum types { + IS_INITIALIZED = '@@rewards/IS_INITIALIZED', CREATE_WALLET = '@@rewards/CREATE_WALLET', WALLET_CREATED = '@@rewards/WALLET_CREATED', WALLET_CREATE_FAILED = '@@rewards/WALLET_CREATE_FAILED', diff --git a/components/brave_rewards/resources/page/reducers/rewards_reducer.ts b/components/brave_rewards/resources/page/reducers/rewards_reducer.ts index 76507488f185..44510e571822 100644 --- a/components/brave_rewards/resources/page/reducers/rewards_reducer.ts +++ b/components/brave_rewards/resources/page/reducers/rewards_reducer.ts @@ -14,6 +14,10 @@ const rewardsReducer: Reducer = (state: Rewards.State } switch (action.type) { + case types.IS_INITIALIZED: { + chrome.send('brave_rewards.isInitialized') + break + } case types.TOGGLE_ENABLE_MAIN: { if (state.initializing) { break diff --git a/components/brave_rewards/resources/page/storage.ts b/components/brave_rewards/resources/page/storage.ts index 24827ec32458..f2691be20308 100644 --- a/components/brave_rewards/resources/page/storage.ts +++ b/components/brave_rewards/resources/page/storage.ts @@ -79,7 +79,7 @@ export const defaultState: Rewards.State = { autoContributeChoices: [], rate: 0 }, - initializing: false + initializing: true } const cleanData = (state: Rewards.State) => { @@ -102,6 +102,7 @@ export const load = (): Rewards.State => { if (data) { try { state = JSON.parse(data) + state.initializing = true } catch (e) { console.error('Could not parse local storage data: ', e) } diff --git a/package-lock.json b/package-lock.json index b9b06445034f..7385453da105 100644 --- a/package-lock.json +++ b/package-lock.json @@ -7206,8 +7206,8 @@ } }, "brave-ui": { - "version": "github:brave/brave-ui#303a9d6424950a31836902f9bf2c03a0c174efda", - "from": "github:brave/brave-ui#303a9d6424950a31836902f9bf2c03a0c174efda", + "version": "github:brave/brave-ui#36f3cd135399060641123136feb8253e53d68499", + "from": "github:brave/brave-ui#36f3cd135399060641123136feb8253e53d68499", "dev": true, "requires": { "@ctrl/tinycolor": "^2.2.1", diff --git a/package.json b/package.json index 9a06ab868136..3d40f17ecc56 100644 --- a/package.json +++ b/package.json @@ -315,7 +315,7 @@ "@types/storybook__react": "^4.0.2", "acorn": "^7.1.1", "babel-loader": "^8.1.0", - "brave-ui": "github:brave/brave-ui#303a9d6424950a31836902f9bf2c03a0c174efda", + "brave-ui": "github:brave/brave-ui#36f3cd135399060641123136feb8253e53d68499", "chalk": "^2.4.2", "commander": "^2.9.0", "css-loader": "^2.1.1",