NOT PART OF THE BUILD - Adding profile management.

This commit is contained in:
ccarlen%netscape.com 2001-01-23 15:32:57 +00:00
Родитель 0ba1822f4e
Коммит 6c4ced6bd9
8 изменённых файлов: 126 добавлений и 11 удалений

Двоичные данные
embedding/browser/powerplant/PPBrowser.mcp

Двоичный файл не отображается.

Просмотреть файл

@ -8,4 +8,6 @@
//--------------------------------------------------------------------------------
#define wantDebugging 0
#define wantProfiles 1
#include "BrowserHeaders.pch.h"

Просмотреть файл

@ -40,11 +40,16 @@
#else
#undef DEBUG
#endif
#if wantProfiles
#define USE_PROFILES 1
#else
#define USE_PROFILES 1
#endif
#include "DefinesMac.h"
#include "DefinesMozilla.h"
// Support for automatically naming the precompiled header file ...
#if __POWERPC__
#if wantDebugging

Просмотреть файл

@ -8,4 +8,6 @@
//--------------------------------------------------------------------------------
#define wantDebugging 1
#define wantProfiles 1
#include "BrowserHeaders.pch.h"

Двоичный файл не отображается.

Двоичный файл не отображается.

Просмотреть файл

@ -28,9 +28,11 @@
#include <UDrawingState.h>
#include <UMemoryMgr.h>
#include <URegistrar.h>
#include <LWindow.h>
#include <LCaption.h>
#include <LPushButton.h>
#include <LStaticText.h>
#include <LIconControl.h>
#include <LWindow.h>
#include <LTextTableView.h>
#include <UControlRegistry.h>
#include <UGraphicUtils.h>
#include <UEnvironment.h>
@ -54,6 +56,7 @@
#include "nsIDirectoryService.h"
#include "nsDirectoryServiceDefs.h"
#include "nsAppDirectoryServiceDefs.h"
#include "nsIObserverService.h"
#include "nsIPref.h"
#include "nsRepeater.h"
#include "nsILocalFile.h"
@ -69,10 +72,13 @@
#include <TextServices.h>
extern "C" void NS_SetupRegistry();
#if USE_PROFILES
#include "CProfileManager.h"
#include "nsIProfileChangeStatus.h"
#endif
static NS_DEFINE_CID(kPrefCID, NS_PREF_CID);
static const char* kProgramName = "PP Browser";
static const char* kProgramName = "PPEmbed";
// ===========================================================================
// ¥ Main Program
@ -118,6 +124,11 @@ int main()
CBrowserApp::CBrowserApp()
{
#if USE_PROFILES
mRefCnt = 1;
#endif
if ( PP_PowerPlant::UEnvironment::HasFeature( PP_PowerPlant::env_HasAppearance ) ) {
::RegisterAppearanceClient();
}
@ -137,6 +148,12 @@ CBrowserApp::CBrowserApp()
RegisterClass_(CUrlField);
RegisterClass_(CThrobber);
#if USE_PROFILES
RegisterClass_(LScroller);
RegisterClass_(LTextTableView);
RegisterClass_(LColorEraseAttachment);
#endif
// Contexual Menu Support
UCMMUtils::Initialize();
RegisterClass_(LCMAttachment);
@ -205,6 +222,20 @@ void
CBrowserApp::StartUp()
{
nsresult rv;
#if USE_PROFILES
CProfileManager *profileMgr = new CProfileManager;
profileMgr->StartUp();
AddAttachment(profileMgr);
// Register for profile changes
NS_WITH_SERVICE(nsIObserverService, observerService, NS_OBSERVERSERVICE_CONTRACTID, &rv);
ThrowIfNil_(observerService);
observerService->AddObserver(this, PROFILE_APPROVE_CHANGE_TOPIC);
observerService->AddObserver(this, PROFILE_CHANGE_TEARDOWN_TOPIC);
observerService->AddObserver(this, PROFILE_AFTER_CHANGE_TOPIC);
#else
// If we don't want different user profiles, all that's needed is
// to make an nsMPFileLocProvider. This will provide the same file
@ -224,6 +255,8 @@ CBrowserApp::StartUp()
prefs->ResetPrefs();
prefs->ReadUserPrefs();
#endif
InitializePrefs();
ObeyCommand(PP_PowerPlant::cmd_New, nil); // EXAMPLE, create a new window
@ -576,3 +609,62 @@ Boolean CBrowserApp::SelectFileObject(PP_PowerPlant::CommandT inCommand,
}
return result;
}
#if USE_PROFILES
// ---------------------------------------------------------------------------
// CBrowserApp : nsISupports
// ---------------------------------------------------------------------------
NS_IMPL_ISUPPORTS2(CBrowserApp, nsIObserver, nsISupportsWeakReference);
// ---------------------------------------------------------------------------
// CBrowserApp : nsIObserver
// ---------------------------------------------------------------------------
NS_IMETHODIMP CBrowserApp::Observe(nsISupports *aSubject, const PRUnichar *aTopic, const PRUnichar *someData)
{
#define CLOSE_WINDOWS_ON_SWITCH 1
nsresult rv = NS_OK;
if (nsCRT::strcmp(aTopic, PROFILE_APPROVE_CHANGE_TOPIC) == 0)
{
// Ask the user if they want to
DialogItemIndex item = UModalAlerts::StopAlert(alrt_ConfirmProfileSwitch);
if (item != kStdOkItemIndex)
{
nsCOMPtr<nsIProfileChangeStatus> status = do_QueryInterface(aSubject);
NS_ENSURE_TRUE(status, NS_ERROR_FAILURE);
status->VetoChange();
}
}
else if (nsCRT::strcmp(aTopic, PROFILE_CHANGE_TEARDOWN_TOPIC) == 0)
{
// Close all open windows. Alternatively, we could just call CBrowserWindow::Stop()
// on each. Either way, we have to stop all network activity on this phase.
TArrayIterator<LCommander*> iterator(mSubCommanders, LArrayIterator::from_End);
LCommander* theSub;
while (iterator.Previous(theSub)) {
CBrowserWindow *browserWindow = dynamic_cast<CBrowserWindow*>(theSub);
if (browserWindow) {
browserWindow->Stop();
mSubCommanders.RemoveItemsAt(1, iterator.GetCurrentIndex());
delete browserWindow;
}
}
NS_WITH_SERVICE(nsINetDataCacheManager, cacheMgr, NS_NETWORK_CACHE_MANAGER_CONTRACTID, &rv);
if (NS_SUCCEEDED(rv))
cacheMgr->Clear(nsINetDataCacheManager::MEM_CACHE);
}
else if (nsCRT::strcmp(aTopic, PROFILE_AFTER_CHANGE_TOPIC) == 0)
{
InitializePrefs(); // In case we have just switched to a newly created profile.
// Make a new default window
ObeyCommand(PP_PowerPlant::cmd_New, nil);
}
return rv;
}
#endif // USE_PROFILES

Просмотреть файл

@ -25,18 +25,27 @@
#include <PP_Prefix.h>
#include <LApplication.h>
#ifndef nsError_h
#include "nsError.h"
#endif
#include "nsIObserver.h"
#include "nsWeakReference.h"
class CBrowserApp : public PP_PowerPlant::LApplication
#if USE_PROFILES
,public nsIObserver
,public nsSupportsWeakReference
#endif
{
public:
CBrowserApp(); // constructor registers PPobs
virtual ~CBrowserApp(); // stub destructor
CBrowserApp(); // constructor registers PPobs
virtual ~CBrowserApp(); // stub destructor
#if USE_PROFILES
NS_DECL_ISUPPORTS
NS_DECL_NSIOBSERVER
#endif
virtual void ProcessNextEvent();
@ -67,4 +76,9 @@ protected:
virtual Boolean SelectFileObject(PP_PowerPlant::CommandT inCommand,
FSSpec& outSpec);
#if USE_PROFILES
Boolean ConfirmProfileSwitch();
#endif
};