gecko-dev/cmd/macfe/central/CURLDispatcher.h

211 строки
6.8 KiB
C++

/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*-
*
* The contents of this file are subject to the Netscape Public License
* Version 1.0 (the "NPL"); you may not use this file except in
* compliance with the NPL. You may obtain a copy of the NPL at
* http://www.mozilla.org/NPL/
*
* Software distributed under the NPL is distributed on an "AS IS" basis,
* WITHOUT WARRANTY OF ANY KIND, either express or implied. See the NPL
* for the specific language governing rights and limitations under the
* NPL.
*
* The Initial Developer of this code under the NPL is Netscape
* Communications Corporation. Portions created by Netscape are
* Copyright (C) 1998 Netscape Communications Corporation. All Rights
* Reserved.
*/
// CURLDispatcher.h
#ifndef CURLDispatcher_H
#define CURLDispatcher_H
#pragma once
#include <LPeriodical.h>
#include <LListener.h>
#include "structs.h"
#include "CAutoPtr.h"
#include "ntypes.h"
#include "net.h" // for FO_CACHE_AND_PRESENT
class CNSContext;
class CBrowserContext;
class CBrowserWindow;
class CURLDispatchInfo;
// Dispatch function prototype
const ResIDT BrowserWindow_ResID = 1010;
typedef void (*DispatchProcPtr)(CURLDispatchInfo* inDispatchInfo);
class CURLDispatcher :
public LPeriodical,
public LListener
{
public:
static void DispatchToStorage(
URL_Struct* inURL,
const FSSpec& inDestSpec,
FO_Present_Types inOutputFormat = FO_SAVE_AS,
Boolean inDelay = false);
static void DispatchToStorage(CURLDispatchInfo* inDispatchInfo);
virtual void SpendTime(const EventRecord& inMacEvent);
virtual void ListenToMessage(
MessageT inMessage,
void* ioParam);
static Uint32 CountDelayedURLs() { return GetURLDispatcher()->GetCountDelayedURLs(); }
// 97-05-13 pkc -- New URL dispatch mechanism
static void DispatchURL(
const char* inURL,
CNSContext* inTargetContext,
Boolean inDelay = false,
Boolean inForceCreate = false,
ResIDT inWindowResID = BrowserWindow_ResID,
Boolean inInitiallyVisible = true,
FO_Present_Types inOutputFormat = FO_CACHE_AND_PRESENT,
NET_ReloadMethod inReloadMethod = NET_DONT_RELOAD);
static void DispatchURL(
URL_Struct* inURLStruct,
CNSContext* inTargetContext,
Boolean inDelay = false,
Boolean inForceCreate = false,
ResIDT inWindowResID = BrowserWindow_ResID,
Boolean inInitiallyVisible = true,
FO_Present_Types inOutputFormat = FO_CACHE_AND_PRESENT,
Boolean inWaitingForMochaImageLoad = false);
static void DispatchURL(CURLDispatchInfo* inDispatchInfo);
// Dispatch procs
static void DispatchToLibNet(CURLDispatchInfo* inDispatchInfo);
static void DispatchToBrowserWindow(CURLDispatchInfo* inDispatchInfo);
static void DispatchMailboxURL(CURLDispatchInfo* inDispatchInfo);
static void DispatchToMailNewsWindow(CURLDispatchInfo* inDispatchInfo);
// Utility functions
static void DispatchToNewBrowserWindow(CURLDispatchInfo* inDispatchInfo);
static CBrowserWindow* CreateNewBrowserWindow(
ResIDT inWindowResID = BrowserWindow_ResID,
Boolean inInitiallyVisible = true);
// Return the browser window created by the last call to DispatchToView. Note that
// if the dispatch was delayed, this will be null until the pending dispatch is processed.
static CBrowserWindow* GetLastBrowserWindowCreated() { return sLastBrowserWindowCreated; }
protected:
static CURLDispatcher* GetURLDispatcher(); // singleton class
static void DispatchToDisk(CURLDispatchInfo* inDispatchInfo);
static void DispatchToDiskAsText(CURLDispatchInfo* inDispatchInfo);
Uint32 GetCountDelayedURLs() const { return mDelayedURLs.GetCount(); }
virtual void PostPendingDispatch(CURLDispatchInfo* inDispatchInfo);
virtual void UpdatePendingDispatch(
CNSContext* inForContext);
virtual void ProcessPendingDispatch(void);
LArray mDelayedURLs;
// reset to NULL on entry in DispatchToView(), set in DispatchToNewBrowserWindow()
static CBrowserWindow* sLastBrowserWindowCreated;
static CAutoPtr<CURLDispatcher> sDispatcher;
static CAutoPtr<CBrowserContext> sDispatchContext;
private:
friend class CAutoPtr<CURLDispatcher>;
friend class CAutoPtr<CBrowserContext>;
CURLDispatcher();
virtual ~CURLDispatcher();
};
// Info needed to dispatch a URL
class CURLDispatchInfo
{
public:
CURLDispatchInfo();
CURLDispatchInfo(
const char* inURL,
CNSContext* inTargetContext,
FO_Present_Types inOutputFormat,
NET_ReloadMethod inReloadMethod = NET_DONT_RELOAD,
Boolean inDelay = false /* BLECH! */,
Boolean inForceCreate = false,
Boolean inIsSaving = false,
ResIDT inWindowResID = BrowserWindow_ResID,
Boolean inInitiallyVisible = true);
CURLDispatchInfo(
URL_Struct* inURLStruct,
CNSContext* inTargetContext,
FO_Present_Types inOutputFormat,
Boolean inDelay = false /* BLECH! */,
Boolean inForceCreate = false,
Boolean inIsSaving = false,
ResIDT inWindowResID = BrowserWindow_ResID,
Boolean inInitiallyVisible = true,
Boolean inWaitingForMochaImageLoad = false);
virtual ~CURLDispatchInfo();
Int32 GetURLType() { return mURLType; }
char* GetURL();
URL_Struct* GetURLStruct() { return mURLStruct; }
CNSContext* GetTargetContext() { return mTargetContext; }
FO_Present_Types GetOutputFormat() { return mOutputFormat; }
Boolean GetDelay() { return mDelayDispatch; }
Boolean GetIsSaving() { return mIsSaving; }
Boolean GetInitiallyVisible() { return mInitiallyVisible; }
FSSpec& GetFileSpec() { return mFileSpec; }
ResIDT GetWindowResID() { return mWindowResID; }
Boolean GetForceCreate() { return mForceCreate; }
Boolean GetIsWaitingForMochaImageLoad()
{ return mIsWaitingForMochaImageLoad; }
URL_Struct* ReleaseURLStruct();
void ClearDelay() { mDelayDispatch = false; }
void SetFileSpec(const FSSpec& inFileSpec);
void SetTargetContext(CNSContext* inTargetContext)
{ mTargetContext = inTargetContext; }
protected:
Int32 mURLType;
URL_Struct* mURLStruct;
CNSContext* mTargetContext;
FO_Present_Types mOutputFormat;
Boolean mDelayDispatch;
Boolean mForceCreate;
Boolean mIsSaving;
Boolean mInitiallyVisible;
Boolean mIsWaitingForMochaImageLoad;
FSSpec mFileSpec;
ResIDT mWindowResID;
};
#endif