Compare commits

..

1016 Commits

Author SHA1 Message Date
hoa.nguyen%intel.com
22c40d96b2 removed the report of db filesize in GetStorageInUse.
git-svn-id: svn://10.0.0.236/branches/CacheIntegration_BRANCH@55763 18797224-902f-48f8-a5cc-f745e15eee43
1999-12-08 21:54:27 +00:00
hoa.nguyen%intel.com
06a79b2069 fixed a bug in SetStoredContentLength so that it will update m_StorageInUse in nsNetDiskCache.
git-svn-id: svn://10.0.0.236/branches/CacheIntegration_BRANCH@55762 18797224-902f-48f8-a5cc-f745e15eee43
1999-12-08 21:53:57 +00:00
hoa.nguyen%intel.com
ebc4face0d Added SetDiskCacheFolder for filecache test.
git-svn-id: svn://10.0.0.236/branches/CacheIntegration_BRANCH@55608 18797224-902f-48f8-a5cc-f745e15eee43
1999-12-07 22:08:45 +00:00
hoa.nguyen%intel.com
150696bb86 Fixed DB corruption detection and error recovery logic. Removed Preference. Added routine for the special entry in DB.
git-svn-id: svn://10.0.0.236/branches/CacheIntegration_BRANCH@55606 18797224-902f-48f8-a5cc-f745e15eee43
1999-12-07 22:07:56 +00:00
hoa.nguyen%intel.com
683045595b Added a few member according to the new nsIChannel i/f. Converted all the function to use raw file transport instead of nsIOService.
git-svn-id: svn://10.0.0.236/branches/CacheIntegration_BRANCH@55605 18797224-902f-48f8-a5cc-f745e15eee43
1999-12-07 22:07:21 +00:00
hoa.nguyen%intel.com
7f09538b93 Fixed a memory leak on mInfo. Init() now also pass through recordID.
git-svn-id: svn://10.0.0.236/branches/CacheIntegration_BRANCH@55601 18797224-902f-48f8-a5cc-f745e15eee43
1999-12-07 22:06:29 +00:00
hoa.nguyen%intel.com
bb364ef512 member name changed to follow the same convention. Added error recovery routine.
git-svn-id: svn://10.0.0.236/branches/CacheIntegration_BRANCH@55600 18797224-902f-48f8-a5cc-f745e15eee43
1999-12-07 22:05:57 +00:00
hoa.nguyen%intel.com
7c96c92a19 sync now happens once every second. DB filesize is only updated upon sync. A special entry is added to record initial size and entry number of filecache.
git-svn-id: svn://10.0.0.236/branches/CacheIntegration_BRANCH@55597 18797224-902f-48f8-a5cc-f745e15eee43
1999-12-07 22:04:56 +00:00
fur%netscape.com
a6defdef4c Merge portability changes and bug fixes from the trunk
git-svn-id: svn://10.0.0.236/branches/CacheIntegration_BRANCH@55586 18797224-902f-48f8-a5cc-f745e15eee43
1999-12-07 17:40:40 +00:00
fur%netscape.com
76159a2caf Updated to NPL 1.1
git-svn-id: svn://10.0.0.236/branches/CacheIntegration_BRANCH@55504 18797224-902f-48f8-a5cc-f745e15eee43
1999-12-07 01:40:45 +00:00
fur%netscape.com
1988cb05b5 Tweak comments
git-svn-id: svn://10.0.0.236/branches/CacheIntegration_BRANCH@55499 18797224-902f-48f8-a5cc-f745e15eee43
1999-12-07 01:14:55 +00:00
fur%netscape.com
dd8c6b3bed Added nsINetDataCacheManager::SetDiskCacheFolder()
git-svn-id: svn://10.0.0.236/branches/CacheIntegration_BRANCH@55484 18797224-902f-48f8-a5cc-f745e15eee43
1999-12-07 00:02:58 +00:00
fur%netscape.com
bc64749366 Account for arg changes in NewChannel() API
git-svn-id: svn://10.0.0.236/branches/CacheIntegration_BRANCH@55475 18797224-902f-48f8-a5cc-f745e15eee43
1999-12-06 23:30:30 +00:00
fur%netscape.com
2e9287bd58 Match NewChannel() API changes on trunk
git-svn-id: svn://10.0.0.236/branches/CacheIntegration_BRANCH@55472 18797224-902f-48f8-a5cc-f745e15eee43
1999-12-06 23:23:07 +00:00
fur%netscape.com
0f2274a140 Checkpoint
git-svn-id: svn://10.0.0.236/branches/CacheIntegration_BRANCH@55471 18797224-902f-48f8-a5cc-f745e15eee43
1999-12-06 23:22:37 +00:00
fur%netscape.com
957fa10cac Retire nsINetDataCache::GetCapacity
git-svn-id: svn://10.0.0.236/branches/CacheIntegration_BRANCH@55469 18797224-902f-48f8-a5cc-f745e15eee43
1999-12-06 23:16:10 +00:00
fur%netscape.com
e603146886 Track trunk API changes
git-svn-id: svn://10.0.0.236/branches/CacheIntegration_BRANCH@55467 18797224-902f-48f8-a5cc-f745e15eee43
1999-12-06 23:15:32 +00:00
fur%netscape.com
cb698a0df1 + Retired nsINetDataCache::GetCapacity()
+ Fixed gcc build problem


git-svn-id: svn://10.0.0.236/branches/CacheIntegration_BRANCH@55466 18797224-902f-48f8-a5cc-f745e15eee43
1999-12-06 23:14:38 +00:00
fur%netscape.com
1b918d9ef0 + Added proxy channel arg to NewChannel()
+ Changed name of setProtocolPrivate/getProtocolPrivate to setAnnotation/getAnnotation\
+ Added inUse attribute
+ Touched up comments


git-svn-id: svn://10.0.0.236/branches/CacheIntegration_BRANCH@55465 18797224-902f-48f8-a5cc-f745e15eee43
1999-12-06 23:08:08 +00:00
fur%netscape.com
6407144c9f Removed capacity attribute
git-svn-id: svn://10.0.0.236/branches/CacheIntegration_BRANCH@55464 18797224-902f-48f8-a5cc-f745e15eee43
1999-12-06 23:06:44 +00:00
fur%netscape.com
2ed563a178 Merge with trunk makefile.win
git-svn-id: svn://10.0.0.236/branches/CacheIntegration_BRANCH@55462 18797224-902f-48f8-a5cc-f745e15eee43
1999-12-06 23:05:39 +00:00
fur%netscape.com
4becc0b508 Add assertion to cache manager to ensure that it is limiting cache occupancy
git-svn-id: svn://10.0.0.236/branches/CacheIntegration_BRANCH@54566 18797224-902f-48f8-a5cc-f745e15eee43
1999-11-29 15:23:34 +00:00
fur%netscape.com
7d5427ea31 Obey the MAX_CONTENT_LENGTH limit
git-svn-id: svn://10.0.0.236/branches/CacheIntegration_BRANCH@54565 18797224-902f-48f8-a5cc-f745e15eee43
1999-11-29 15:22:56 +00:00
fur%netscape.com
99904bcc48 Eliminate libs build target, as Warren has done for the rest of the tree
git-svn-id: svn://10.0.0.236/branches/CacheIntegration_BRANCH@54545 18797224-902f-48f8-a5cc-f745e15eee43
1999-11-29 02:15:04 +00:00
fur%netscape.com
bcb56c9593 Add strong ref to channel
git-svn-id: svn://10.0.0.236/branches/CacheIntegration_BRANCH@54544 18797224-902f-48f8-a5cc-f745e15eee43
1999-11-29 02:14:17 +00:00
fur%netscape.com
f18bc8e6cd Fix ownership issues. Change SetProtocolData/GetProtocolData args
to match new prototype.


git-svn-id: svn://10.0.0.236/branches/CacheIntegration_BRANCH@54109 18797224-902f-48f8-a5cc-f745e15eee43
1999-11-21 07:51:56 +00:00
fur%netscape.com
7d14c5669a Handle NULL load group - they're supposed to be optional
git-svn-id: svn://10.0.0.236/branches/CacheIntegration_BRANCH@54108 18797224-902f-48f8-a5cc-f745e15eee43
1999-11-21 07:51:14 +00:00
fur%netscape.com
c0dd3df02e Fix tons of ref-counting ownership issues and other bug fixes
git-svn-id: svn://10.0.0.236/branches/CacheIntegration_BRANCH@54107 18797224-902f-48f8-a5cc-f745e15eee43
1999-11-21 07:50:25 +00:00
fur%netscape.com
e5cc84978f Checkpoint
git-svn-id: svn://10.0.0.236/branches/CacheIntegration_BRANCH@54097 18797224-902f-48f8-a5cc-f745e15eee43
1999-11-21 05:08:20 +00:00
fur%netscape.com
5694537330 Changed SetProtocolData/GetProtocolData to accept a tag argument so that
multiple cache clients can attach info to the cache database.


git-svn-id: svn://10.0.0.236/branches/CacheIntegration_BRANCH@54096 18797224-902f-48f8-a5cc-f745e15eee43
1999-11-21 05:07:40 +00:00
fur%netscape.com
297c5ceba3 Add/modify APIs to track nsIChannel
git-svn-id: svn://10.0.0.236/branches/CacheIntegration_BRANCH@54095 18797224-902f-48f8-a5cc-f745e15eee43
1999-11-21 05:05:01 +00:00
fur%netscape.com
e0311312f7 Temporarily disable pref-reading code, since it doesn't work in the browser
and the code that measures the size of the cache db, since it's a performance
hog.


git-svn-id: svn://10.0.0.236/branches/CacheIntegration_BRANCH@54094 18797224-902f-48f8-a5cc-f745e15eee43
1999-11-21 05:04:13 +00:00
fur%netscape.com
cf3dc77b02 Fix unitialized variable
git-svn-id: svn://10.0.0.236/branches/CacheIntegration_BRANCH@54093 18797224-902f-48f8-a5cc-f745e15eee43
1999-11-21 05:01:03 +00:00
fur%netscape.com
dd2506a737 Quash warnings
git-svn-id: svn://10.0.0.236/branches/CacheIntegration_BRANCH@53842 18797224-902f-48f8-a5cc-f745e15eee43
1999-11-18 06:19:51 +00:00
fur%netscape.com
b1bee1f21c Merge with trunk
git-svn-id: svn://10.0.0.236/branches/CacheIntegration_BRANCH@53831 18797224-902f-48f8-a5cc-f745e15eee43
1999-11-18 05:38:26 +00:00
fur%netscape.com
48ecc5625b Added review comments
git-svn-id: svn://10.0.0.236/branches/CacheIntegration_BRANCH@53674 18797224-902f-48f8-a5cc-f745e15eee43
1999-11-16 19:46:28 +00:00
fur%netscape.com
1b791685e6 No longer need factory code. Its been moved to netwerk/cache/builds/nsNetDataCacheModule.cpp
git-svn-id: svn://10.0.0.236/branches/CacheIntegration_BRANCH@53663 18797224-902f-48f8-a5cc-f745e15eee43
1999-11-16 18:21:11 +00:00
fur%netscape.com
dc94d1d6e2 Added review comments
git-svn-id: svn://10.0.0.236/branches/CacheIntegration_BRANCH@53647 18797224-902f-48f8-a5cc-f745e15eee43
1999-11-16 10:08:26 +00:00
hoa.nguyen%intel.com
f5b437ade3 added Unix support
git-svn-id: svn://10.0.0.236/branches/CacheIntegration_BRANCH@53574 18797224-902f-48f8-a5cc-f745e15eee43
1999-11-16 00:21:05 +00:00
hoa.nguyen%intel.com
8c0b4b3e4a changed NPL to MPL
git-svn-id: svn://10.0.0.236/branches/CacheIntegration_BRANCH@53573 18797224-902f-48f8-a5cc-f745e15eee43
1999-11-16 00:16:33 +00:00
hoa.nguyen%intel.com
fb640ab144 added Truncate function
git-svn-id: svn://10.0.0.236/branches/CacheIntegration_BRANCH@53572 18797224-902f-48f8-a5cc-f745e15eee43
1999-11-16 00:07:27 +00:00
hoa.nguyen%intel.com
106e263b33 added support for memory cache
git-svn-id: svn://10.0.0.236/branches/CacheIntegration_BRANCH@53570 18797224-902f-48f8-a5cc-f745e15eee43
1999-11-16 00:00:54 +00:00
fur%netscape.com
85045a8552 Add TestCacheMgr
git-svn-id: svn://10.0.0.236/branches/CacheIntegration_BRANCH@53537 18797224-902f-48f8-a5cc-f745e15eee43
1999-11-15 21:13:19 +00:00
fur%netscape.com
a2279be132 *** empty log message ***
git-svn-id: svn://10.0.0.236/branches/CacheIntegration_BRANCH@53536 18797224-902f-48f8-a5cc-f745e15eee43
1999-11-15 21:12:58 +00:00
fur%netscape.com
0ce702d402 Don't call NS_ERROR() when a record ID is not found
git-svn-id: svn://10.0.0.236/branches/CacheIntegration_BRANCH@53533 18797224-902f-48f8-a5cc-f745e15eee43
1999-11-15 21:12:17 +00:00
fur%netscape.com
f14d03cd67 Fixed CommitFlags()
git-svn-id: svn://10.0.0.236/branches/CacheIntegration_BRANCH@53531 18797224-902f-48f8-a5cc-f745e15eee43
1999-11-15 21:11:14 +00:00
fur%netscape.com
b91343fdf6 Checkpoint
git-svn-id: svn://10.0.0.236/branches/CacheIntegration_BRANCH@53520 18797224-902f-48f8-a5cc-f745e15eee43
1999-11-15 18:30:44 +00:00
fur%netscape.com
2c517489b5 Disable warning, so cache code can run
git-svn-id: svn://10.0.0.236/branches/CacheIntegration_BRANCH@53519 18797224-902f-48f8-a5cc-f745e15eee43
1999-11-15 17:39:35 +00:00
(no author)
ae57da58eb This commit was manufactured by cvs2svn to create branch
'CacheIntegration_BRANCH'.

git-svn-id: svn://10.0.0.236/branches/CacheIntegration_BRANCH@53517 18797224-902f-48f8-a5cc-f745e15eee43
1999-11-15 17:10:07 +00:00
fur%netscape.com
8d4586dd65 Update components table and macro instantiations to conform to new definitions
in nsIGenericFactory.h


git-svn-id: svn://10.0.0.236/branches/CacheIntegration_BRANCH@53499 18797224-902f-48f8-a5cc-f745e15eee43
1999-11-15 09:06:41 +00:00
fur%netscape.com
9b473ad9be Added starting offset param to interceptAsyncRead() method
git-svn-id: svn://10.0.0.236/branches/CacheIntegration_BRANCH@53498 18797224-902f-48f8-a5cc-f745e15eee43
1999-11-15 08:53:15 +00:00
fur%netscape.com
2ad227a994 Merged with trunk
git-svn-id: svn://10.0.0.236/branches/CacheIntegration_BRANCH@53496 18797224-902f-48f8-a5cc-f745e15eee43
1999-11-15 08:01:58 +00:00
fur%netscape.com
94d8da33c1 Replace 1.0 NPL with 1.1 version
git-svn-id: svn://10.0.0.236/branches/CacheIntegration_BRANCH@53487 18797224-902f-48f8-a5cc-f745e15eee43
1999-11-15 06:13:13 +00:00
fur%netscape.com
81c05809fd Remove dead files
git-svn-id: svn://10.0.0.236/branches/CacheIntegration_BRANCH@53486 18797224-902f-48f8-a5cc-f745e15eee43
1999-11-15 06:08:40 +00:00
fur%netscape.com
e30547b2b2 Remove dead files
git-svn-id: svn://10.0.0.236/branches/CacheIntegration_BRANCH@53485 18797224-902f-48f8-a5cc-f745e15eee43
1999-11-15 05:52:29 +00:00
fur%netscape.com
257f9cfaaa Fix Boogs. Replace 1.0 NPL with 1.1 version
git-svn-id: svn://10.0.0.236/branches/CacheIntegration_BRANCH@53484 18797224-902f-48f8-a5cc-f745e15eee43
1999-11-15 05:51:02 +00:00
fur%netscape.com
96e2654e43 Replace 1.0 NPL with 1.1 NPL
git-svn-id: svn://10.0.0.236/branches/CacheIntegration_BRANCH@53474 18797224-902f-48f8-a5cc-f745e15eee43
1999-11-14 20:35:26 +00:00
fur%netscape.com
3b023433be Replace 1.0 NPL with 1.1 version
git-svn-id: svn://10.0.0.236/branches/CacheIntegration_BRANCH@53472 18797224-902f-48f8-a5cc-f745e15eee43
1999-11-14 19:56:44 +00:00
fur%netscape.com
1b89716afe Added more comments
git-svn-id: svn://10.0.0.236/branches/CacheIntegration_BRANCH@53471 18797224-902f-48f8-a5cc-f745e15eee43
1999-11-14 19:50:30 +00:00
fur%netscape.com
ad02058877 Add comments. Change method names
git-svn-id: svn://10.0.0.236/branches/CacheIntegration_BRANCH@53470 18797224-902f-48f8-a5cc-f745e15eee43
1999-11-14 18:51:57 +00:00
fur%netscape.com
fa8a3196e7 Merge with trunk
git-svn-id: svn://10.0.0.236/branches/CacheIntegration_BRANCH@53434 18797224-902f-48f8-a5cc-f745e15eee43
1999-11-13 19:35:49 +00:00
fur%netscape.com
5c2c543e58 Fixed bugs which prevented embedded NUL characters
git-svn-id: svn://10.0.0.236/branches/CacheIntegration_BRANCH@53431 18797224-902f-48f8-a5cc-f745e15eee43
1999-11-13 18:45:28 +00:00
fur%netscape.com
c588721cc0 Added NS_NewStorageStream().
Changed method name, Initialize ==> Init


git-svn-id: svn://10.0.0.236/branches/CacheIntegration_BRANCH@53430 18797224-902f-48f8-a5cc-f745e15eee43
1999-11-13 18:43:20 +00:00
fur%netscape.com
0b049b17ba Fix Boogs
git-svn-id: svn://10.0.0.236/branches/CacheIntegration_BRANCH@53429 18797224-902f-48f8-a5cc-f745e15eee43
1999-11-13 18:41:01 +00:00
fur%netscape.com
854ef4631d Merge from trunk
git-svn-id: svn://10.0.0.236/branches/CacheIntegration_BRANCH@53268 18797224-902f-48f8-a5cc-f745e15eee43
1999-11-11 22:29:20 +00:00
fur%netscape.com
051c558653 Detect failure to truncate cache entry
git-svn-id: svn://10.0.0.236/branches/CacheIntegration_BRANCH@53214 18797224-902f-48f8-a5cc-f745e15eee43
1999-11-11 18:16:24 +00:00
fur%netscape.com
37a04adb09 Killed build warnings. Added stubs for unimplemented methods
git-svn-id: svn://10.0.0.236/branches/CacheIntegration_BRANCH@53072 18797224-902f-48f8-a5cc-f745e15eee43
1999-11-10 06:05:33 +00:00
fur%netscape.com
c823c04b45 Combine cache components into module
git-svn-id: svn://10.0.0.236/branches/CacheIntegration_BRANCH@53014 18797224-902f-48f8-a5cc-f745e15eee43
1999-11-09 22:08:49 +00:00
fur%netscape.com
03cbd000eb Sync with trunk
git-svn-id: svn://10.0.0.236/branches/CacheIntegration_BRANCH@52998 18797224-902f-48f8-a5cc-f745e15eee43
1999-11-09 17:36:48 +00:00
fur%netscape.com
a91e91a1c7 Added Windows makefiles so that the cache manager, file cache and
memory cache components are built as part of netlib and combined into
a single XPCOM module, named "nkcache.dll"


git-svn-id: svn://10.0.0.236/branches/CacheIntegration_BRANCH@52970 18797224-902f-48f8-a5cc-f745e15eee43
1999-11-08 22:44:04 +00:00
fur%netscape.com
be7a5a48b6 Added call to LimitCacheSize
git-svn-id: svn://10.0.0.236/branches/CacheIntegration_BRANCH@52968 18797224-902f-48f8-a5cc-f745e15eee43
1999-11-08 22:40:41 +00:00
fur%netscape.com
b2bc7468e8 Add cache manager CID
git-svn-id: svn://10.0.0.236/branches/CacheIntegration_BRANCH@52967 18797224-902f-48f8-a5cc-f745e15eee43
1999-11-08 22:38:20 +00:00
fur%netscape.com
9692dfd994 Add cache manager ProgID
git-svn-id: svn://10.0.0.236/branches/CacheIntegration_BRANCH@52966 18797224-902f-48f8-a5cc-f745e15eee43
1999-11-08 22:37:30 +00:00
fur%netscape.com
f3edd4cfb5 Added an owning reference from nsDiskCacheRecordChannel to
its associated nsDiskCacheRecord.  Without this, the channel
may access free'ed memory.


git-svn-id: svn://10.0.0.236/branches/CacheIntegration_BRANCH@52962 18797224-902f-48f8-a5cc-f745e15eee43
1999-11-08 22:28:39 +00:00
fur%netscape.com
33403345c1 Rename class to avoid name collision with similar code in file cache.
git-svn-id: svn://10.0.0.236/branches/CacheIntegration_BRANCH@52961 18797224-902f-48f8-a5cc-f745e15eee43
1999-11-08 22:25:28 +00:00
fur%netscape.com
20c850de23 Merge with tip
git-svn-id: svn://10.0.0.236/branches/CacheIntegration_BRANCH@52960 18797224-902f-48f8-a5cc-f745e15eee43
1999-11-08 22:23:35 +00:00
fur%netscape.com
e8b619cd02 Merge with tip
git-svn-id: svn://10.0.0.236/branches/CacheIntegration_BRANCH@52959 18797224-902f-48f8-a5cc-f745e15eee43
1999-11-08 22:18:25 +00:00
fur%netscape.com
eed396bb92 Stabilize ref-count during construction
git-svn-id: svn://10.0.0.236/branches/CacheIntegration_BRANCH@52946 18797224-902f-48f8-a5cc-f745e15eee43
1999-11-08 18:46:17 +00:00
fur%netscape.com
41d44c070b Eliminate dead files
git-svn-id: svn://10.0.0.236/branches/CacheIntegration_BRANCH@52932 18797224-902f-48f8-a5cc-f745e15eee43
1999-11-07 20:19:55 +00:00
fur%netscape.com
698ba42268 Revamped directory structure
git-svn-id: svn://10.0.0.236/branches/CacheIntegration_BRANCH@52922 18797224-902f-48f8-a5cc-f745e15eee43
1999-11-06 19:36:16 +00:00
(no author)
1a0fd23991 This commit was manufactured by cvs2svn to create branch
'CacheIntegration_BRANCH'.

git-svn-id: svn://10.0.0.236/branches/CacheIntegration_BRANCH@52912 18797224-902f-48f8-a5cc-f745e15eee43
1999-11-06 03:43:56 +00:00
fur%netscape.com
67dded330b Add nsDiskCacheRecordChannel.cpp
git-svn-id: svn://10.0.0.236/branches/CacheIntegration_BRANCH@52876 18797224-902f-48f8-a5cc-f745e15eee43
1999-11-05 22:18:26 +00:00
fur%netscape.com
936ff4777a Fix compilation errors on Win32
git-svn-id: svn://10.0.0.236/branches/CacheIntegration_BRANCH@52874 18797224-902f-48f8-a5cc-f745e15eee43
1999-11-05 22:18:04 +00:00
fur%netscape.com
96c55e42f7 Accommodate API changes in nsINetDataCache
git-svn-id: svn://10.0.0.236/branches/CacheIntegration_BRANCH@52873 18797224-902f-48f8-a5cc-f745e15eee43
1999-11-05 22:17:42 +00:00
fur%netscape.com
82fa0cf06a Got rid of GetReadOnly(). Added GetFlags()
git-svn-id: svn://10.0.0.236/branches/CacheIntegration_BRANCH@52872 18797224-902f-48f8-a5cc-f745e15eee43
1999-11-05 22:15:05 +00:00
fur%netscape.com
98c8285334 First shot at Win32 makefile
git-svn-id: svn://10.0.0.236/branches/CacheIntegration_BRANCH@52869 18797224-902f-48f8-a5cc-f745e15eee43
1999-11-05 22:03:02 +00:00
fur%netscape.com
bad4b683f4 Removed SetCapacity() method
git-svn-id: svn://10.0.0.236/branches/CacheIntegration_BRANCH@52868 18797224-902f-48f8-a5cc-f745e15eee43
1999-11-05 22:01:26 +00:00
fur%netscape.com
cb5269a28a Checkpoint
git-svn-id: svn://10.0.0.236/branches/CacheIntegration_BRANCH@52864 18797224-902f-48f8-a5cc-f745e15eee43
1999-11-05 21:47:25 +00:00
fur%netscape.com
74712f3635 Added binary I/O streams
git-svn-id: svn://10.0.0.236/branches/CacheIntegration_BRANCH@52860 18797224-902f-48f8-a5cc-f745e15eee43
1999-11-05 20:02:06 +00:00
fur%netscape.com
9f8ea739db Correct error comment
git-svn-id: svn://10.0.0.236/branches/CacheIntegration_BRANCH@52859 18797224-902f-48f8-a5cc-f745e15eee43
1999-11-05 20:01:39 +00:00
hoa.nguyen%intel.com
97a10dd7c6 Add offset writing for nsOutputStream
git-svn-id: svn://10.0.0.236/branches/CacheIntegration_BRANCH@52789 18797224-902f-48f8-a5cc-f745e15eee43
1999-11-04 18:02:39 +00:00
hoa.nguyen%intel.com
85a132fac0 Add command line switch to test memory and disk cache.
git-svn-id: svn://10.0.0.236/branches/CacheIntegration_BRANCH@52788 18797224-902f-48f8-a5cc-f745e15eee43
1999-11-04 18:01:28 +00:00
hoa.nguyen%intel.com
e594eee877 Add proxy channel interface, and misc bug fixes.
git-svn-id: svn://10.0.0.236/branches/CacheIntegration_BRANCH@52787 18797224-902f-48f8-a5cc-f745e15eee43
1999-11-04 17:59:42 +00:00
hoa.nguyen%intel.com
9148eee3d6 Initial checkin of disk cache modules
git-svn-id: svn://10.0.0.236/branches/CacheIntegration_BRANCH@51580 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-22 22:37:18 +00:00
hoa.nguyen%intel.com
b5989a8382 Initial checkin of disk cache module
git-svn-id: svn://10.0.0.236/branches/CacheIntegration_BRANCH@51579 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-22 22:36:07 +00:00
fur%netscape.com
2b861f60d9 Create a new channel for every call to Write()
git-svn-id: svn://10.0.0.236/branches/CacheIntegration_BRANCH@51335 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-21 01:35:51 +00:00
fur%netscape.com
87db050b37 Added tests for:
nsINetDataCache::GetStorageInUse()
    nsINetDataCacheRecord::SetContentLength()
    nsIOutputStream::Write(), using non-zero starting offsets


git-svn-id: svn://10.0.0.236/branches/CacheIntegration_BRANCH@51071 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-18 23:55:44 +00:00
fur%netscape.com
ffe483cf95 Initial cut at memory-cache functionality is complete
git-svn-id: svn://10.0.0.236/branches/CacheIntegration_BRANCH@51067 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-18 23:46:08 +00:00
fur%netscape.com
52aa17a1c3 Incorporate nsStorageStream into xpcom.dll
git-svn-id: svn://10.0.0.236/branches/CacheIntegration_BRANCH@50814 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-15 07:40:42 +00:00
fur%netscape.com
5fdb3aa69e Initial implementation of 'storage stream' - used as the heart of the memory cache
git-svn-id: svn://10.0.0.236/branches/CacheIntegration_BRANCH@50812 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-15 07:39:45 +00:00
fur%netscape.com
8cae473bc0 Add opaque keys to nsHashtable
git-svn-id: svn://10.0.0.236/branches/CacheIntegration_BRANCH@50811 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-15 07:38:01 +00:00
fur%netscape.com
0719303755 Fix linkage problem
git-svn-id: svn://10.0.0.236/branches/CacheIntegration_BRANCH@50810 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-15 07:37:21 +00:00
fur%netscape.com
90d3e40858 Fix bugs in Next(). Prev() and IsDone()
git-svn-id: svn://10.0.0.236/branches/CacheIntegration_BRANCH@50809 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-15 07:36:35 +00:00
fur%netscape.com
c792b2d35c Changed IDL to generate identical C++ headers, but with better scriptability
git-svn-id: svn://10.0.0.236/branches/CacheIntegration_BRANCH@50808 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-15 07:32:04 +00:00
fur%netscape.com
7a4377d840 Initial cut at memory cache
git-svn-id: svn://10.0.0.236/branches/CacheIntegration_BRANCH@50806 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-15 07:24:06 +00:00
fur%netscape.com
a5fa416010 Added TestRawCache.cpp
git-svn-id: svn://10.0.0.236/branches/CacheIntegration_BRANCH@50804 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-15 07:19:52 +00:00
(no author)
49d00db5e2 This commit was manufactured by cvs2svn to create branch
'CacheIntegration_BRANCH'.

git-svn-id: svn://10.0.0.236/branches/CacheIntegration_BRANCH@50589 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-13 10:24:13 +00:00
gagan%netscape.com
b3785299ff Fix for bug # 10333. Made webshell a progress event sink as well so that now it redirects all progress messages from necko land to the appropriate docloader observer. The hack to delete strings which are being received in the status messages is a work around the current limitation of the proxy event code. When bug # 16273 is fixed that delete wont be necessary. In fixing this I also noticed that the nsFileTransport wasn't using the proxy events and was incorrectly firing status messages directly onto the UI thread. Fixed that as well. r=rpotts,warren
git-svn-id: svn://10.0.0.236/trunk@50588 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-13 10:24:12 +00:00
waterson%netscape.com
821cb4f5b2 Factor out dirtying of tree, fixed bug with dynamic column creation due to row addition. r=hyatt
git-svn-id: svn://10.0.0.236/trunk@50587 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-13 08:53:57 +00:00
waterson%netscape.com
250dbce4cf Add check-for-null-pointer to FireOnSelectHandler() to avoid crashing in the case where a select handler fires on an 'orphaned' node with no document. This can happen if a document is being destroyed and random scripts and events are still filtering through the system.
git-svn-id: svn://10.0.0.236/trunk@50585 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-13 08:02:02 +00:00
pinkerton%netscape.com
3cadc697e1 correctly update cellmap when scrolling in a tree with no column headers (r=hyatt, partial fix for bug#15771)
git-svn-id: svn://10.0.0.236/trunk@50584 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-13 08:01:43 +00:00
waterson%netscape.com
eecbd2d60c Add PR_LOG() calls to aid debugging.
git-svn-id: svn://10.0.0.236/trunk@50583 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-13 08:00:45 +00:00
waterson%netscape.com
d69c3be183 Add PR_LOG() calls to aid with debugging.
git-svn-id: svn://10.0.0.236/trunk@50582 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-13 08:00:14 +00:00
sfraser%netscape.com
6aa6a226a0 Add jsurl IDL manifest and project for dougt.
git-svn-id: svn://10.0.0.236/trunk@50579 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-13 07:19:40 +00:00
dougt%netscape.com
683eda7a2e 1) Now evaluting the script during channel creation rather than read() to
avoid a deadlock between the UI/JS thread and the FileTransport thread.

2) Isolating the proxy of the eval to a single interface

3) Change makefiles for windows and unix.

Brendan asked me to look at this.  I am not sure if there is a bug number.

reviewer=brendan@meer.net


git-svn-id: svn://10.0.0.236/trunk@50578 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-13 07:17:36 +00:00
sfraser%netscape.com
057541d810 Part of dougt jsurl changes. Fixing the project to use the _debug prefix file when building debug. r=dougt
git-svn-id: svn://10.0.0.236/trunk@50577 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-13 07:16:12 +00:00
sfraser%netscape.com
1359dee773 First Checked In.
git-svn-id: svn://10.0.0.236/trunk@50576 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-13 07:14:12 +00:00
alecf%netscape.com
fb48c801ad fix windows bustage (sorry, I thought I checked this line in from my windows box, must have missed it)
git-svn-id: svn://10.0.0.236/trunk@50575 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-13 07:00:42 +00:00
alecf%netscape.com
252994d3f4 update status
git-svn-id: svn://10.0.0.236/trunk@50574 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-13 06:14:58 +00:00
alecf%netscape.com
579a822e8a convert XPFE components over the nsIModules
git-svn-id: svn://10.0.0.236/trunk@50573 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-13 06:12:15 +00:00
despotdaemon%netscape.com
17726547ac Pseudo-automatic update of changes made by risto@netscape.com.
git-svn-id: svn://10.0.0.236/trunk@50572 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-13 06:07:34 +00:00
alecf%netscape.com
aae40a4d2d nsIModule-ize addressbook
r=sspizer
no bug


git-svn-id: svn://10.0.0.236/trunk@50571 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-13 05:55:06 +00:00
alecf%netscape.com
53caf671cb DTDs contain image names too
git-svn-id: svn://10.0.0.236/trunk@50570 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-13 05:53:10 +00:00
pavlov%netscape.com
2aaf45465d take 2 static CID's out of two different functions and combine them into 1 r=alecf fixes bug #15776
git-svn-id: svn://10.0.0.236/trunk@50569 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-13 05:42:05 +00:00
karnaze%netscape.com
36a43a236d new regression tests, file images for others. Does not affect the build.
git-svn-id: svn://10.0.0.236/trunk@50568 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-13 05:40:53 +00:00
alecf%netscape.com
309ba432a9 fix makefiles to correct outdent.dif/outdent.gif typo
git-svn-id: svn://10.0.0.236/trunk@50567 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-13 05:35:57 +00:00
alecf%netscape.com
7f72e574c1 add another missing file
git-svn-id: svn://10.0.0.236/trunk@50566 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-13 05:34:24 +00:00
sspitzer%netscape.com
e3f84eb9e4 add more comments about what's left to do, and why this is a little scary.
git-svn-id: svn://10.0.0.236/trunk@50565 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-13 05:33:26 +00:00
mscott%netscape.com
619a993e2c make sure the user name goes into outgoing imap urls that we make
Bug #16263 --> implement NewURI so we can view embedded images!
r=sspitzer


git-svn-id: svn://10.0.0.236/trunk@50564 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-13 05:21:08 +00:00
mscott%netscape.com
d272bf5abd Bug #16263 --> CreateListOfMessageIDStrings should look for '?' as the delimiter used by
mime for each message part instead of '&'.
r=sspitzer


git-svn-id: svn://10.0.0.236/trunk@50563 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-13 05:20:14 +00:00
mscott%netscape.com
fab3227026 Bug #16263 --> make nsGetImapServer public
r=sspitzer


git-svn-id: svn://10.0.0.236/trunk@50562 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-13 05:19:27 +00:00
sspitzer%netscape.com
1caffddc3f whoops, forgot this wee bit of JS.
git-svn-id: svn://10.0.0.236/trunk@50561 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-13 05:14:16 +00:00
alecf%netscape.com
dad4df6919 remove file that's making CVS complain
git-svn-id: svn://10.0.0.236/trunk@50560 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-13 05:10:14 +00:00
sspitzer%netscape.com
332b7443db fix for #16264, r=mscott. migrate prefs (if we need to) when compose is opened.
also, if we have no identities, launch the account wizard so the user can create
 one.  also, cache the nsIMsgMailSession, we don't need to go through Components
[] and do a getService each time.


git-svn-id: svn://10.0.0.236/trunk@50559 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-13 05:09:14 +00:00
alecf%netscape.com
f347f08869 oops, missed this file because of a misspelling
fixes mac and possibly windows breakage


git-svn-id: svn://10.0.0.236/trunk@50558 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-13 04:41:11 +00:00
alecf%netscape.com
9083887386 update new image names in all XUL, JS, and CSS
git-svn-id: svn://10.0.0.236/trunk@50556 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-13 04:26:01 +00:00
sspitzer%netscape.com
7516584ad9 fix for #16262, r=mscott. now we have "Mozilla Profile Wizard" (a.k.a. -ProfileWizard) for the mac.
git-svn-id: svn://10.0.0.236/trunk@50555 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-13 04:21:18 +00:00
vidur%netscape.com
b1974e5540 Fix for bug 15772. Check that a content node is part of the document tree before dispatching a blur event to it. R=joki
git-svn-id: svn://10.0.0.236/trunk@50554 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-13 04:19:26 +00:00
alecf%netscape.com
d807cd69da get rid of old poorly cased gif file
git-svn-id: svn://10.0.0.236/trunk@50553 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-13 04:18:00 +00:00
alecf%netscape.com
b5cd4ed681 oops, missed this mac file
git-svn-id: svn://10.0.0.236/trunk@50552 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-13 04:17:04 +00:00
sspitzer%netscape.com
cb1644bdd6 fix for bug #14591, r=mscott.
handle the case where we migrate from 4.x and our sent folder is on the imap server.
but, since we haven't logged into the imap server yet, our folders are undiscovered.

other related fixes:
1) make it so on failure to fcc, save to draft, save to template, send later the message shows up.
2) clean up the error message strings
3) fix how we determine if an URI points to a local folder. (all we need to do is look at the scheme and see if it is "mailbox:"
4) remove a stale comment.


git-svn-id: svn://10.0.0.236/trunk@50551 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-13 04:12:06 +00:00
alecf%netscape.com
e7a07c934b export new gifs on Mac
git-svn-id: svn://10.0.0.236/trunk@50550 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-13 04:10:49 +00:00
alecf%netscape.com
4353d33c01 export new images on windows
r=mscott
no bug


git-svn-id: svn://10.0.0.236/trunk@50549 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-13 04:09:25 +00:00
alecf%netscape.com
4b07a41a74 export new gifs on unix
r=sspitzer


git-svn-id: svn://10.0.0.236/trunk@50548 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-13 04:08:15 +00:00
alecf%netscape.com
2475291b21 checkin new image file names
not part of build
no reviewer 'cause you can't review images :)
no bug #, just maintenance for skins a la German
all files added with -kb


git-svn-id: svn://10.0.0.236/trunk@50547 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-13 03:57:13 +00:00
mscott%netscape.com
928088a46d we appeared to be leaking an rdf resource. I fixed this leak by using a nsCOMPtr.
r=sspitzer


git-svn-id: svn://10.0.0.236/trunk@50546 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-13 03:18:32 +00:00
pollmann%netscape.com
5c5ba7aa15 Bug 16126: Check for a cached state when reading value or submitting Gfx text frame (before initialize); r=joki
git-svn-id: svn://10.0.0.236/trunk@50545 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-13 02:49:42 +00:00
mscott%netscape.com
2b381da127 Bug #16115 --> addref the web shell window inside it's Close method to keep the web shell window from getting
deleted out from under us. This could happen because in closing the window, we are destroying a webshell which
could have the last outstanding reference to the webshell window.
r=dp


git-svn-id: svn://10.0.0.236/trunk@50544 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-13 02:47:56 +00:00
cathleen%netscape.com
b0844bfd3a update windows packaging file list, bug 16144, r=ssu
git-svn-id: svn://10.0.0.236/trunk@50543 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-13 02:20:16 +00:00
pollmann%netscape.com
489f3fc875 Bug 15423: Check for a base href when forming the URL for an image map; r=harishd
git-svn-id: svn://10.0.0.236/trunk@50541 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-13 01:37:30 +00:00
valeski%netscape.com
e96f49b91f 16250. r=warren. IOService method name case changed. reflecting the new method names in the directory javascript
git-svn-id: svn://10.0.0.236/trunk@50540 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-13 01:36:57 +00:00
davidm%netscape.com
989168e646 8010 [FEATURE] Task Menu | Tools sub-menu items do not work
remove bogus rules
r = hangas


git-svn-id: svn://10.0.0.236/trunk@50539 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-13 01:25:39 +00:00
varada%netscape.com
caca355dec correcting temp node problem
git-svn-id: svn://10.0.0.236/trunk@50538 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-13 01:19:23 +00:00
mjudge%netscape.com
01e83014a6 bugs 15547,15645,13665,13277,5761, r=akkana,kin,hyatt. fixing selection bugs, keyboard navigation, triple clicking and drag scrolling. get position not a valid call anymore to nsIFrame.h
git-svn-id: svn://10.0.0.236/trunk@50537 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-13 01:16:09 +00:00
mjudge%netscape.com
dcd63f4da3 bugs 15547,15645,13665,13277,5761, r=akkana,kin,hyatt. fixing selection bugs, keyboard navigation, triple clicking and drag scrolling.
git-svn-id: svn://10.0.0.236/trunk@50536 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-13 01:15:26 +00:00
troy%netscape.com
5132f68d26 b=15509, r=peterl@netscape.com
If the frame has visible content that extends outside its content area,
then the view needs to be marked as having transparent content


git-svn-id: svn://10.0.0.236/trunk@50535 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-13 01:02:53 +00:00
pinkerton%netscape.com
9101132f9e removed some visibility/display rules that were already in xul.css. added a workaround for bug #15722 to not change the icons of the scrollbar buttons on rollover, which caused the trees that contained said scrollbars to fully reflow. (r=hyatt).
git-svn-id: svn://10.0.0.236/trunk@50534 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-13 01:00:05 +00:00
pollmann%netscape.com
c41e517028 Bug 15180: Don't add a Referer line to the HTTP post data, as Necko already adds one. r=harishd
git-svn-id: svn://10.0.0.236/trunk@50533 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-13 00:54:47 +00:00
mgleeson1%netscape.com
fc95d0c6a1 r=dougt need eol for port boxes
git-svn-id: svn://10.0.0.236/trunk@50532 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-13 00:50:31 +00:00
rbs%maths.uq.edu.au
6c0a9f5fc0 [MathML] Hooks to allow --enable-mathml
git-svn-id: svn://10.0.0.236/trunk@50531 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-13 00:46:09 +00:00
waterson%netscape.com
34e280d8c3 Fix up commentary to reflect reality; remove some confusing stylistic changes. r=bienvenu
git-svn-id: svn://10.0.0.236/trunk@50530 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-13 00:45:57 +00:00
briano%netscape.com
971976b8c4 Automated update
git-svn-id: svn://10.0.0.236/trunk@50529 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-13 00:45:14 +00:00
pinkerton%netscape.com
93aed372f7 pulled mac-specific patches to the tip in order to allow typing in the url bar in navigator to work w/out firing cmd-keybindings. (r=saari, no explicit bug number).
git-svn-id: svn://10.0.0.236/trunk@50528 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-13 00:44:43 +00:00
waterson%netscape.com
aa390e05d8 Fix 'commandupdater' nodes; make sure that they are hooked up correctly from the XUL content sink; factor code to appropriately deal with being called from two places. r=hyatt.
git-svn-id: svn://10.0.0.236/trunk@50527 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-13 00:43:46 +00:00
beard%netscape.com
1a22e3ed7e fixing image decoder leak. bug=15380, r=pnunn
git-svn-id: svn://10.0.0.236/trunk@50526 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-13 00:41:43 +00:00
rbs%maths.uq.edu.au
1896cfefef [MathML] Assigning @MOZ_MATHML@ to MOZ_MATHML
git-svn-id: svn://10.0.0.236/trunk@50525 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-13 00:39:36 +00:00
rbs%maths.uq.edu.au
410ce267d5 [MathML] Update MathML hooks
git-svn-id: svn://10.0.0.236/trunk@50524 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-13 00:33:17 +00:00
varada%netscape.com
fcb9e9bf51 fixes for bug #15782 to save caches
git-svn-id: svn://10.0.0.236/trunk@50523 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-13 00:28:59 +00:00
varada%netscape.com
37e2169b4e fix for bug #15782 to save cache file in the respective directories and also to save after each page and to save the last used config name in the default che
git-svn-id: svn://10.0.0.236/trunk@50522 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-13 00:28:10 +00:00
selmer%netscape.com
2e8166fd64 Added checking to ensure DLL & procedure get loaded successfully
git-svn-id: svn://10.0.0.236/trunk@50521 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-13 00:19:03 +00:00
selmer%netscape.com
3f42f06246 Fixed up releasing DLLs in destructor
git-svn-id: svn://10.0.0.236/trunk@50519 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-13 00:12:27 +00:00
cbegle%netscape.com
7519f0fc4c * removed stuff from the idl file that caused warnings
* fixed a typo that caused a warning (nsIsupports)
* fixed values of constants that caused warnings
* use a macro instead of assinging a long long value directly

r=jband


git-svn-id: svn://10.0.0.236/trunk@50518 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-13 00:11:21 +00:00
pinkerton%netscape.com
7062dc3e8b take a first stab at native system colors. obviously more work needs to be done to use appearance, but this will get us started. (r=sfraser, bug# 1021).
git-svn-id: svn://10.0.0.236/trunk@50517 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-13 00:08:17 +00:00
pinkerton%netscape.com
8c90b18f03 correctly trigger the sending of mouse_exit events when the mouse moves into the growBox. fixes a bug with gfx scrollbars in bookmarks when the window was resized. (r=sfraser, no explicit bug number).
git-svn-id: svn://10.0.0.236/trunk@50516 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-13 00:06:00 +00:00
selmer%netscape.com
51c5a4e65e Implemented basis for DLL functions in interpreter; fixed Reload to exit if anything follows it
git-svn-id: svn://10.0.0.236/trunk@50515 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-13 00:01:10 +00:00
norris%netscape.com
169ef88ab4 Fix following problem:
Subject:
        another getClassLoader exception
   Date:
        Tue, 12 Oct 1999 10:39:26 -0400
   From:
        Andrew Wason <aw@softcom.com>
     To:
        norris@netscape.com (Norris Boyd)
    CC:
        Howard Lin <howard@softcom.com>




Norris,

It looks like the classes the optimizer generates call
ScriptRuntime.defineFunction which calls getClassLoader.  This throws a
SecurityException.

java.security.AccessControlException: access denied
(java.lang.RuntimePermission getClassLoader )
at
java.security.AccessControlContext.checkPermission(AccessControlContext.java
, Compiled Code)
at java.security.AccessController.checkPermission(AccessController.java,
Compiled Code)
at java.lang.SecurityManager.checkPermission(SecurityManager.java, Compiled
Code)
at java.lang.Class.getClassLoader(Class.java, Compiled Code)
at
org.mozilla.javascript.ScriptRuntime.defineFunction(ScriptRuntime.java:2045)
at org.mozilla.javascript.gen.c5.initScript(order.js)
at org.mozilla.javascript.gen.c5.exec(order.js)
at org.mozilla.javascript.Context.evaluateReader(Context.java:728)
[...]



Andrew
--
Andrew Wason
SoftCom, Inc.
aw@softcom.com


git-svn-id: svn://10.0.0.236/trunk@50514 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-12 23:54:03 +00:00
despotdaemon%netscape.com
e0c55754d5 Pseudo-automatic update of changes made by dmose@mozilla.org.
git-svn-id: svn://10.0.0.236/trunk@50513 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-12 23:30:12 +00:00
kipp%netscape.com
b7194daf71 r=kin,troy; Fixed reflow bug with optimization logic to avoid measuring text (no bug #)
git-svn-id: svn://10.0.0.236/trunk@50512 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-12 23:29:01 +00:00
kipp%netscape.com
01e298fd41 Fixed bugs with combined-area continuing to include trimmed whitespace (wip for 12297); Added support for tracking trim for 16176)
git-svn-id: svn://10.0.0.236/trunk@50511 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-12 23:27:32 +00:00
kipp%netscape.com
091955e9a0 New API for bug 16176
git-svn-id: svn://10.0.0.236/trunk@50510 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-12 23:26:41 +00:00
kipp%netscape.com
76b98f20a7 Factored common code into a single method (UseComputedHeight)
git-svn-id: svn://10.0.0.236/trunk@50509 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-12 23:25:49 +00:00
kipp%netscape.com
51d691cc02 Port to new nsILineIterator api
git-svn-id: svn://10.0.0.236/trunk@50508 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-12 23:25:19 +00:00
kipp%netscape.com
45e857d860 Fixed bug with bounds of line-box including side margins when it shouldn't (part of 12297)
git-svn-id: svn://10.0.0.236/trunk@50507 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-12 23:24:51 +00:00
kipp%netscape.com
28bd74e177 r=troy; Cleaned up line-box API (prep work for bug #12297; more coming); Support new line iterator API change (#16176)
git-svn-id: svn://10.0.0.236/trunk@50505 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-12 23:24:22 +00:00
kipp%netscape.com
eb73055cf6 Removed silly NS_IMETHOD decls
git-svn-id: svn://10.0.0.236/trunk@50504 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-12 23:22:53 +00:00
kipp%netscape.com
2c17cc458b Added two new atoms to help meter large vs. small line boxes
git-svn-id: svn://10.0.0.236/trunk@50503 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-12 23:22:34 +00:00
kipp%netscape.com
d10b7ecd53 Removed two warnings
git-svn-id: svn://10.0.0.236/trunk@50502 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-12 23:21:40 +00:00
kipp%netscape.com
028e053c7f new
git-svn-id: svn://10.0.0.236/trunk@50501 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-12 23:20:40 +00:00
rjc%netscape.com
252f4090ad Fix VC5 build bustage.
git-svn-id: svn://10.0.0.236/trunk@50500 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-12 23:09:09 +00:00
idk%eng.sun.com
9599670719 Fix 16230
Call AddRef for newly created PlugletInsance
r = akhil.arora@sun.com


git-svn-id: svn://10.0.0.236/trunk@50499 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-12 23:01:44 +00:00
terry%mozilla.org
100e540599 Patch by Holger Schurig <holger@holger.om.org> -- rewriting and enhancing the
ability to edit components, products, and versions.  Yay!


git-svn-id: svn://10.0.0.236/trunk@50498 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-12 23:00:35 +00:00
mgleeson1%netscape.com
b383080e9b r=evaughan friend declaration needs to declare object is function or class (HPUX)
git-svn-id: svn://10.0.0.236/trunk@50497 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-12 22:58:04 +00:00
norris%netscape.com
f40460044c Fix 7254 Implement DOM security
Reviewed by mstoltz@netscape.com


git-svn-id: svn://10.0.0.236/trunk@50496 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-12 22:55:25 +00:00
pavlov%netscape.com
967990a454 build nsScriptableRegion.cpp on windows and linux r=pinkerton ********* WORK TO FIX BUG 12465 *********
git-svn-id: svn://10.0.0.236/trunk@50495 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-12 22:53:41 +00:00
norris%netscape.com
120ec26f3b Work on 15824 bad refcounting in nsCodebasePrincipal
Attempt to discover problem with additional assertions
reviewed by mstoltz@netscape.com


git-svn-id: svn://10.0.0.236/trunk@50494 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-12 22:52:49 +00:00
norris%netscape.com
f686bba5d8 Fix part of 5403 Services improperly released: Use NS_WITH_SERVICE
reviewed by mstoltz@netscape.com


git-svn-id: svn://10.0.0.236/trunk@50493 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-12 22:51:54 +00:00
norris%netscape.com
1d1cd2baaf Fix unix build warning.
Reviewed by rogerl@netscape.com.


git-svn-id: svn://10.0.0.236/trunk@50492 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-12 22:48:17 +00:00
dougt%netscape.com
b6030ceac7 adding default constructor (mac compiler blues)
git-svn-id: svn://10.0.0.236/trunk@50491 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-12 22:47:50 +00:00
norris%netscape.com
258a2a6d4a Needed for 7254: Implement DOM security
reviewed by Ben Goodger <rgoodger@ihug.co.nz> and Seth Spitzer <sspitzer@netscape.com>

Scripts running from chrome are considered super privileged and can perform operations that
scripts from the web cannot. I differentiate chrome scripts from web
scripts by considering all scripts loaded from chrome: URIs to be
privileged.

The problem I'm running into is that the loading of relative urls in
this code ends up going to the file: protocol (which is what the chrome
protocol is converted to internally). This change makes sure we load
from the chrome protocol so that the scripts are privileged and don't
get access errors. It's probably a good idea to load from the chrome
protocol anyway since it may one day be resolved to extracting from a
JAR file rather than accessing a discrete file.


git-svn-id: svn://10.0.0.236/trunk@50490 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-12 22:47:36 +00:00
dougt%netscape.com
2f38d972f2 adding default constructor (mac compilers blues)
git-svn-id: svn://10.0.0.236/trunk@50489 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-12 22:46:49 +00:00
kmcclusk%netscape.com
afe30290c8 Set state of checkbox and Radio button on MouseUp instead of MouseDown so JavaScript onclick
event handlers can retreive the correct state of the form element. bug 15366; r=rods@netscape.com

Submit the form when a text field is clicked on only if the JavaScript event handler
has not consumed the event. bug 15949; r=rods@netscape.com


git-svn-id: svn://10.0.0.236/trunk@50488 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-12 22:44:23 +00:00
wtc%netscape.com
19cd8f1747 Backed out previous revision, which was checked in during code freeze.
git-svn-id: svn://10.0.0.236/trunk@50486 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-12 22:37:13 +00:00
cyeh%netscape.com
3ee2fa81c3 add support for megahal conversation ai, fix syntax error for sending
stock reports to the original requestor.


git-svn-id: svn://10.0.0.236/trunk@50485 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-12 22:34:49 +00:00
dougt%netscape.com
2ebb109791 changing the entrypoint to call another constructor. I need this since I have
removed an unneeded constructor.  related bug 13724. r=brendan@meer.net


git-svn-id: svn://10.0.0.236/trunk@50484 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-12 22:32:10 +00:00
dougt%netscape.com
8344cba9ee Added a nested event loop instead of blocking during sync calls. Partial fix
for bug 13724.  (I still must remove ifdef's for the autoproxy code.)
r=brendan@meer.net.


git-svn-id: svn://10.0.0.236/trunk@50483 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-12 22:29:43 +00:00
rjc%netscape.com
7c82b0b5f1 [performance] When profile manager is being used, don't read in bookmarks twice... by deferring hiddenwindow.xul loading until after profile manager is done. Review: danm and sspitzer
git-svn-id: svn://10.0.0.236/trunk@50482 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-12 22:20:28 +00:00
kmcclusk%netscape.com
1f838ed9cc Backing out change made while tree was closed
git-svn-id: svn://10.0.0.236/trunk@50481 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-12 22:07:24 +00:00
kmcclusk%netscape.com
288ad892dc Backing out changes made while tree was closed.
git-svn-id: svn://10.0.0.236/trunk@50480 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-12 22:01:49 +00:00
norris%netscape.com
0067ebd9f5 Remove redundant import.
git-svn-id: svn://10.0.0.236/trunk@50479 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-12 21:46:50 +00:00
kmcclusk%netscape.com
3ed94d5f1f Set state of checkbox and Radio button on MouseUp instead of MouseDown so JavaScript onclick
event handlers can retreive the correct state of the form element. bug 15366; r=rods@netscape.com

Submit the form when a text field is clicked on only if the JavaScript event handler
has not consumed the event. bug 15949; r=rods@netscape.com


git-svn-id: svn://10.0.0.236/trunk@50478 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-12 21:42:31 +00:00
evaughan%netscape.com
74de522d21 Fixed mail/news regression. Code review Saari, Hyatt
git-svn-id: svn://10.0.0.236/trunk@50476 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-12 20:50:01 +00:00
selmer%netscape.com
318689d640 Top level makefile
git-svn-id: svn://10.0.0.236/trunk@50474 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-12 20:36:42 +00:00
terry%mozilla.org
06a85f06f3 Patch by Holger Schurig <holger@holger.om.org> -- If there is no exactly ONE
user in the profiles table, then this user will be promoted into all groups.


git-svn-id: svn://10.0.0.236/trunk@50473 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-12 20:28:41 +00:00
beard%netscape.com
fa0386eb21 printing stack crawls with LXR URLs.
git-svn-id: svn://10.0.0.236/trunk@50472 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-12 18:59:52 +00:00
dmose%mozilla.org
980b8b883b not used on the trunk; the space in the file name is causing script problems. r=smfr@netscape.com, a=leaf@mozilla.org
git-svn-id: svn://10.0.0.236/trunk@50471 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-12 18:32:04 +00:00
selmer%netscape.com
b237b4f45e Split interpret into its own class
git-svn-id: svn://10.0.0.236/trunk@50470 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-12 18:31:05 +00:00
terry%mozilla.org
e5bf02a97b newer alphas of MySQL won't let use "when" as a column name, so let's change
our usage while it's still easy to do so.


git-svn-id: svn://10.0.0.236/trunk@50469 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-12 18:05:42 +00:00
slamm%netscape.com
ffbff9e7c8 Forgot a semicolon and that caused the creation of bogus files. a=leaf. Thanks to jim_nance@yahoo.com for pointing out the problem.
git-svn-id: svn://10.0.0.236/trunk@50468 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-12 17:05:05 +00:00
terry%mozilla.org
f07d66246d Patch by Holger Schurig <holgerschurig@nikocity.de> -- replace all the
yicky old make*.sh files and the CHANGES file with a new, nifty
checksetup.pl file that knows how to create a setup from scratch as
well as upgrade an older setup to a new one.  Very cool stuff!


git-svn-id: svn://10.0.0.236/trunk@50467 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-12 16:58:11 +00:00
terry%mozilla.org
6c6ce1b3d7 Patch by tom@platte.com (Tom Schutter) -- wasn't working if no groups
had isbuggroup set.


git-svn-id: svn://10.0.0.236/trunk@50466 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-12 16:52:25 +00:00
norris%netscape.com
c813db9f21 Fix release date, add contributor.
git-svn-id: svn://10.0.0.236/trunk@50465 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-12 16:52:13 +00:00
karnaze%netscape.com
eb1e3503ae new regression test.
git-svn-id: svn://10.0.0.236/trunk@50464 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-12 14:50:38 +00:00
Jerry.Kirk%Nexwarecorp.com
f62900eb59 Fixed syntax error which caused invalidation not to work when logging
was turned off.
Bug# 16169 r=Dale.Stansberry@Nexwarecorp.com


git-svn-id: svn://10.0.0.236/trunk@50463 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-12 14:39:32 +00:00
neeti%netscape.com
0e926140f9 updating status
git-svn-id: svn://10.0.0.236/trunk@50462 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-12 13:38:23 +00:00
neeti%netscape.com
639989c1df Converted to nsIModule to prepare for memory leaks fixing. Bug# 14034. r=waterson
git-svn-id: svn://10.0.0.236/trunk@50461 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-12 13:33:42 +00:00
dcone%netscape.com
78accf0d1a fixed the CreateRenderingContext call in nsDeviceContext to get rid of warnings. CR by KMcclusk.
git-svn-id: svn://10.0.0.236/trunk@50460 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-12 13:32:34 +00:00
briano%netscape.com
d7505330dd Automated update
git-svn-id: svn://10.0.0.236/trunk@50459 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-12 12:52:20 +00:00
cls%seawood.org
b166fe020d Converting patches applied for bug 15241 into a build option, --enable-implicit-archive, that is off by default.
r=syd


git-svn-id: svn://10.0.0.236/trunk@50458 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-12 12:36:07 +00:00
briano%netscape.com
55f10b405f Automated update
git-svn-id: svn://10.0.0.236/trunk@50457 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-12 11:52:18 +00:00
ramiro%netscape.com
8bcbaf642c Fix for bug 16163. Usage of -liberty to demangle symbols breaks on loser
linux distributions.  I changed configure.in to detect this lib before using
it.  You can stop whinning now thank you.  r=syd@netscape.com.


git-svn-id: svn://10.0.0.236/trunk@50456 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-12 11:42:56 +00:00
warren%netscape.com
a5420e53d5 Fixed nsnull problem!
git-svn-id: svn://10.0.0.236/trunk@50455 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-12 11:21:26 +00:00
terry%mozilla.org
611923e583 Updating the vote cache should not update the date-last-changed field
in the bug.


git-svn-id: svn://10.0.0.236/trunk@50454 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-12 11:18:29 +00:00
warren%netscape.com
4e84b82b51 Fixed return value for non-debug builds.
git-svn-id: svn://10.0.0.236/trunk@50453 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-12 10:27:40 +00:00
warren%netscape.com
865a79a1b5 Added Bloat statistics under QA menu.
git-svn-id: svn://10.0.0.236/trunk@50452 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-12 09:37:37 +00:00
warren%netscape.com
5e7fed7a2f Added about:bloat
git-svn-id: svn://10.0.0.236/trunk@50451 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-12 09:35:22 +00:00
warren%netscape.com
ed816f5fa6 added files: mozilla/netwerk/protocol/about/src/nsAboutBloat.cpp
git-svn-id: svn://10.0.0.236/trunk@50450 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-12 09:32:18 +00:00
warren%netscape.com
da470df1ca Added nsTraceRefcnt logging.
git-svn-id: svn://10.0.0.236/trunk@50449 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-12 09:30:16 +00:00
warren%netscape.com
4ff5cdca2a Made nsTraceRefcnt output write to streams.
git-svn-id: svn://10.0.0.236/trunk@50448 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-12 09:30:12 +00:00
warren%netscape.com
991d518e3e removed files: mozilla/netwerk/protocol/about/src/nsAboutBloat.cpp
git-svn-id: svn://10.0.0.236/trunk@50447 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-12 09:26:38 +00:00
warren%netscape.com
d8984b315e added files: mozilla/netwerk/protocol/about/src/nsAboutBloat.cpp
git-svn-id: svn://10.0.0.236/trunk@50446 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-12 09:25:14 +00:00
warren%netscape.com
c5fccc649e Added about:bloat handler.
git-svn-id: svn://10.0.0.236/trunk@50445 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-12 09:20:25 +00:00
pollmann%netscape.com
419cb327c4 Bug 15841: Don't default to selecting item 0 of a listbox
Bug 15769: Default select item 0 when adding or removing opt to combo
r=harishd


git-svn-id: svn://10.0.0.236/trunk@50444 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-12 08:47:29 +00:00
pollmann%netscape.com
7860787b10 Bug 15769: Default select item 0 when adding or removing opt to combo
r=harishd


git-svn-id: svn://10.0.0.236/trunk@50443 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-12 08:47:22 +00:00
mscott%netscape.com
ccf37b21ec Remove this file from the repository to fix the Mac buids.
The mac projects were looking in this folder and always finding the
stale nsISessionHistory.h file instead of using the idl generated
header file
r=davidm


git-svn-id: svn://10.0.0.236/trunk@50442 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-12 07:50:17 +00:00
mcafee%netscape.com
0ba95a928f Applying patch from buhr@stat.wisc.edu. Fixes destination widget confusion (14759). Unix-only, a=mscott
git-svn-id: svn://10.0.0.236/trunk@50441 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-12 07:26:47 +00:00
radha%netscape.com
569c87328e Build bustage in solaris
git-svn-id: svn://10.0.0.236/trunk@50440 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-12 05:57:03 +00:00
mscott%netscape.com
941d2435ba nsISessionHistory.idl needs to be in this project.
i think this should fix Radha' build breakage for the mac.


git-svn-id: svn://10.0.0.236/trunk@50439 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-12 05:45:10 +00:00
mcafee%netscape.com
68944c6b5c Adding debug Pref UI for evaughan's gfx scrollbars. r=waterson
git-svn-id: svn://10.0.0.236/trunk@50438 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-12 05:40:15 +00:00
sfraser%netscape.com
1122546a7f Fix for bug 16151; make the file transport working thread stack size 64k, instead of 8k. Fixes crashes on startup on Mac. r=beard
git-svn-id: svn://10.0.0.236/trunk@50437 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-12 05:39:18 +00:00
jefft%netscape.com
b77b7f8e29 removed files: mozilla/mailnews/compose/src/nsMsgI18N.cpp
git-svn-id: svn://10.0.0.236/trunk@50436 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-12 05:24:48 +00:00
jefft%netscape.com
1eb33cb46e added files: mozilla/mailnews/base/util/nsMsgI18N.cpp
git-svn-id: svn://10.0.0.236/trunk@50435 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-12 05:21:21 +00:00
jefft%netscape.com
c0fbb70022 fixed bug 15676 - Display problem in Subject header with non-ascii when Forwarding; decode the subject string based on character prior setting it to nsMsgComposeFields; move nsMsgI18N.h, nsMsgI18N.cpp from compose/src to base/util; r=rhp, nhotta
git-svn-id: svn://10.0.0.236/trunk@50434 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-12 05:18:27 +00:00
mscott%netscape.com
ec97378850 Bug #15655 --> don't build old nsMimeFactory. Build nsMimeModule instead.
r=rhp


git-svn-id: svn://10.0.0.236/trunk@50433 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-12 05:05:17 +00:00
mscott%netscape.com
df2bf72c59 Bug #15655 -> build nsMimeModule.cp
r=rhp


git-svn-id: svn://10.0.0.236/trunk@50432 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-12 05:04:41 +00:00
mscott%netscape.com
7527b7b206 bug #15655 --> no longer build nsMimeFactory.cpp...we build
nsMimeModule instead.
r=rhp


git-svn-id: svn://10.0.0.236/trunk@50431 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-12 05:04:25 +00:00
mscott%netscape.com
a252dee761 include nsMsgMimeCID.h to get the CID. (moved CID out of interface)
r=rhp


git-svn-id: svn://10.0.0.236/trunk@50430 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-12 05:03:49 +00:00
mscott%netscape.com
05ab0a848d Bug #15655 module for mime. (replaces nsMimeFactory.cpp)
remove NS_New** factory method. minor cleanup
r=rhp


git-svn-id: svn://10.0.0.236/trunk@50429 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-12 05:03:25 +00:00
mscott%netscape.com
d0cd134272 Bug #15655 module for mime. (replaces nsMimeFactory.cpp)
r=rhp


git-svn-id: svn://10.0.0.236/trunk@50428 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-12 05:03:05 +00:00
mscott%netscape.com
e89f59cad5 Bug #15655 new file. module for mime. (replaces nsMimeFactory.cpp)
r=rhp


git-svn-id: svn://10.0.0.236/trunk@50427 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-12 05:02:23 +00:00
rbs%maths.uq.edu.au
dd050726f8 [MathML] Updates and initial landing of the example mixing.xml to illustrate how to mix MathML with other markups
git-svn-id: svn://10.0.0.236/trunk@50426 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-12 05:00:32 +00:00
rbs%maths.uq.edu.au
02f74ae132 [MathML] Removing unecessary #include of header files
git-svn-id: svn://10.0.0.236/trunk@50425 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-12 04:53:41 +00:00
rbs%maths.uq.edu.au
a017529e6b [MathML] Additional missing hooks
git-svn-id: svn://10.0.0.236/trunk@50424 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-12 04:47:55 +00:00
rbs%maths.uq.edu.au
7083308cff [MathML] Removing unecessary #include of header files
git-svn-id: svn://10.0.0.236/trunk@50423 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-12 04:42:15 +00:00
waterson%netscape.com
6430228b19 Add nsScrollPortView.cpp to the build to get around undefined symbols at startup: looks like it got missed on Unix.
git-svn-id: svn://10.0.0.236/trunk@50422 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-12 04:41:07 +00:00
radha%netscape.com
7ba4c213b3 XPIDLising session history. bug # 15437. r=law
git-svn-id: svn://10.0.0.236/trunk@50421 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-12 04:40:59 +00:00
rbs%maths.uq.edu.au
84470b2c93 [MathML] Portability: adding explicit get() on pointers coming from nsCOMPtr
git-svn-id: svn://10.0.0.236/trunk@50420 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-12 04:38:21 +00:00
radha%netscape.com
270ce881b4 XPIDised session history. Corresponding changes to users of nsISessionHistory.
Bug # 15437. r=law


git-svn-id: svn://10.0.0.236/trunk@50419 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-12 04:37:43 +00:00
cls%seawood.org
173cc583c1 Temp fix for the dependency problem caused by the use of implicit shared libs. a=leaf
git-svn-id: svn://10.0.0.236/trunk@50418 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-12 03:42:02 +00:00
idk%eng.sun.com
651e1ddd8a Bug <a href=http://bugzilla.mozilla.org/show_bug.cgi?id=15892> 15892 </a>
increment pointer to  mime description string before calling strchr


git-svn-id: svn://10.0.0.236/trunk@50417 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-12 03:29:27 +00:00
waterson%netscape.com
30e53d03e9 Bug 16105. (Bugsplat 366256.) Ensure that nsISupports::Release() calls dtor only once by 'stabilizing' refcnt to a non-zero value before invoking the dtor. See also news://news.mozilla.org/37FD0F3C.3078AE5C%40netscape.com. r=scc,fur
git-svn-id: svn://10.0.0.236/trunk@50416 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-12 03:05:10 +00:00
warren%netscape.com
0a71bb415f Fixed missed GetFileSpec
git-svn-id: svn://10.0.0.236/trunk@50415 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-12 02:35:00 +00:00
rbs%maths.uq.edu.au
daf51ae193 Revamp of the architecture for stretchy symbols so that nsMathMLChar only deals with the atomic stretchy task.
git-svn-id: svn://10.0.0.236/trunk@50414 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-12 02:12:36 +00:00
waterson%netscape.com
e20da712ec Bug 16105. (Bugsplat 366256.) Ensure that nsISupports::Release() calls dtor only once by 'stabilizing' refcnt to a non-zero value before invoking the dtor. See also news://news.mozilla.org/37FD0F3C.3078AE5C%40netscape.com. r=scc,fur
git-svn-id: svn://10.0.0.236/trunk@50413 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-12 02:10:08 +00:00
alecf%netscape.com
a4d81273ff upating status
git-svn-id: svn://10.0.0.236/trunk@50412 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-12 02:07:13 +00:00
rbs%maths.uq.edu.au
931605d622 Removing a duplicate reference to a src file
git-svn-id: svn://10.0.0.236/trunk@50411 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-12 02:06:05 +00:00
rbs%maths.uq.edu.au
ba241132ea Removing a typedef and adding a new NS_MATHML_OPERATOR_MUTABLE flag
git-svn-id: svn://10.0.0.236/trunk@50409 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-12 01:58:27 +00:00
selmer%netscape.com
36bb330940 Created new Interpret.cpp & CInterpret class
git-svn-id: svn://10.0.0.236/trunk@50408 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-12 01:54:00 +00:00
rbs%maths.uq.edu.au
328d62f08f [MathML] removing registration hooks. They are now handled by nsLayoutModule.
git-svn-id: svn://10.0.0.236/trunk@50407 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-12 01:48:05 +00:00
warren%netscape.com
6a952509ef Lowercased idl method names for scriptability. Cleaned up nsIURL interface.
git-svn-id: svn://10.0.0.236/trunk@50406 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-12 01:39:37 +00:00
peterl%netscape.com
3295631735 store system colors as int rather than enums
return proper result code when setting system color
r=rods


git-svn-id: svn://10.0.0.236/trunk@50405 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-12 01:31:33 +00:00
slamm%netscape.com
f12855c796 Remove extra 'mozilla/' in cvsblame'd source link.
git-svn-id: svn://10.0.0.236/trunk@50404 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-12 01:25:47 +00:00
rbs%maths.uq.edu.au
121acfa205 [MathML] Setting a bolean to PR_TRUE to allow generated pseudo content (e.g., :before, :after) in MathML.
git-svn-id: svn://10.0.0.236/trunk@50403 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-12 01:19:34 +00:00
cathleen%netscape.com
01eb918031 fix mac packager list, bug 16141, r=ssu
git-svn-id: svn://10.0.0.236/trunk@50402 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-12 01:11:42 +00:00
selmer%netscape.com
63d606d58f Fix up inclusions of headers
git-svn-id: svn://10.0.0.236/trunk@50401 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-12 00:56:51 +00:00
pavlov%netscape.com
8f331211d9 fix cursor blinking on linux r=ramiro
git-svn-id: svn://10.0.0.236/trunk@50400 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-12 00:44:07 +00:00
alecf%netscape.com
e2e17b4ff5 finish landing nsIModule for compose
this and my last checkin r=sspizter
no bug, porkjockey work


git-svn-id: svn://10.0.0.236/trunk@50399 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-12 00:37:39 +00:00
alecf%netscape.com
d5785373e3 land nsIModule for mail compose
git-svn-id: svn://10.0.0.236/trunk@50398 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-12 00:34:06 +00:00
peterl%netscape.com
1299fd6c0b better result code testing in recreate frames for content
part of fix for 14134
r=pierre


git-svn-id: svn://10.0.0.236/trunk@50397 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-12 00:32:13 +00:00
peterl%netscape.com
7021f197de added ignore value to user-focus
r=hyatt


git-svn-id: svn://10.0.0.236/trunk@50396 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-12 00:30:54 +00:00
peterl%netscape.com
df37832d89 added 'ignore' keyword
r=hyatt


git-svn-id: svn://10.0.0.236/trunk@50395 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-12 00:30:19 +00:00
warren%netscape.com
6d83d361f0 Fixed bloat snapshotting capabilities. r=kipp
git-svn-id: svn://10.0.0.236/trunk@50394 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-12 00:29:54 +00:00
warren%netscape.com
93c11dbc7d Added NS_LOG_RELEASE for bloat stats. r=kmcclusk
git-svn-id: svn://10.0.0.236/trunk@50393 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-12 00:28:14 +00:00
ssu%netscape.com
6a84236160 fixing bug #16095. apprunner.exe got renamed to mozilla.exe. This fix updates the installer to create the proper windows shortcut. Not part of tinderbox. r=dbragg@netscape.com
git-svn-id: svn://10.0.0.236/trunk@50392 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-12 00:23:37 +00:00
peterl%netscape.com
8b985c46d4 fix return type for append reflow command (was returning PRBool for nsresult)
part of fix for 14134
r=pierre


git-svn-id: svn://10.0.0.236/trunk@50391 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-12 00:23:10 +00:00
peterl%netscape.com
bd0a1b5cb4 dont strip multiple changes with nsnull frames
part of fix for 14134
r=pierre


git-svn-id: svn://10.0.0.236/trunk@50390 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-12 00:22:18 +00:00
peterl%netscape.com
b765a3d4c4 add 'ignore' to user focus
r=hyatt


git-svn-id: svn://10.0.0.236/trunk@50389 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-12 00:21:06 +00:00
dougt%netscape.com
06ac17fb62 fixes bug 15709. r=dveditz.
git-svn-id: svn://10.0.0.236/trunk@50388 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-12 00:20:23 +00:00
evaughan%netscape.com
4dbf02b9bd added files: mozilla/view/src/nsScrollPortView.cpp
git-svn-id: svn://10.0.0.236/trunk@50387 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-12 00:16:34 +00:00
sspitzer%netscape.com
da4d6e495b fix for #16098, r=mscott. Now we have "Mozilla Profile Manager" for the mac, which is the same as -ProfileManager on the other platforms
git-svn-id: svn://10.0.0.236/trunk@50386 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-12 00:16:31 +00:00
evaughan%netscape.com
b6c93b5c5c Integrated Gfx scrollbars.
git-svn-id: svn://10.0.0.236/trunk@50385 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-12 00:16:06 +00:00
mscott%netscape.com
6d6b3023f8 support nsIStreamObserver to get rid of an assert in necko.
r=sspitzer


git-svn-id: svn://10.0.0.236/trunk@50384 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-12 00:13:45 +00:00
cbegle%netscape.com
d31b3296a7 new files.
new tests for xpconnect.  r=jband.


git-svn-id: svn://10.0.0.236/trunk@50383 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-12 00:12:43 +00:00
varada%netscape.com
bb0622beb7 changing minlen and maxlen in edit fields
git-svn-id: svn://10.0.0.236/trunk@50382 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-12 00:12:10 +00:00
alecf%netscape.com
342865f5fe was not setting the "type" attribute during CreateIncomingServer
fixes #16075
r=sspitzer


git-svn-id: svn://10.0.0.236/trunk@50381 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-12 00:07:14 +00:00
varada%netscape.com
e6f4dfa6bc bug #5958 validating entering of characters in the newconfigdialog edit fields
git-svn-id: svn://10.0.0.236/trunk@50380 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-12 00:05:38 +00:00
kmcclusk%netscape.com
f52acaed14 Implemented nsRenderingContextWin::CopyClipRegion. bug 13913; r=rods@netscape.com
git-svn-id: svn://10.0.0.236/trunk@50379 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-12 00:05:04 +00:00
ducarroz%netscape.com
888a71ee23 Fix for bug 15235 & 14785. I checkin this for jefft. Messages need to be save using platform specific line break. R=ducarroz
git-svn-id: svn://10.0.0.236/trunk@50378 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-12 00:03:17 +00:00
kmcclusk%netscape.com
90932ba7f3 Changed WIN32 windows style from WS_EX_CLIENTEDGEto WS_EX_WINDOWEDGE to
stop drawing client windows sunken. bug=15151; r=rods@netscape.com


git-svn-id: svn://10.0.0.236/trunk@50377 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-11 23:56:55 +00:00
rods%netscape.com
b845870367 changed fonts for select and optgroup to match r=kmcclusk b=12230
git-svn-id: svn://10.0.0.236/trunk@50376 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-11 23:48:41 +00:00
varada%netscape.com
c3b9e376e5 fix to bug #15339- added SetForegroundWindowin the OnSetActive code in the wizardui.cpp
git-svn-id: svn://10.0.0.236/trunk@50375 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-11 23:47:49 +00:00
nhotta%netscape.com
59ee43f7fc Adding a new interface which does a charset conversion plus NE and NCR for fallback. Part of bug fix #8865, r=ftang.
git-svn-id: svn://10.0.0.236/trunk@50374 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-11 23:47:27 +00:00
rods%netscape.com
a30fed502d removed css system color references (not implemented on Mac yet)
changed all checkbox borders to 2 pixels r=kmcclusk b=13854


git-svn-id: svn://10.0.0.236/trunk@50373 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-11 23:44:36 +00:00
nisheeth%netscape.com
d65bc1efa0 We now use the new RAPTOR_STOPWATCH_DEBUGTRACE macro to annotate all manipulations of the timers.
git-svn-id: svn://10.0.0.236/trunk@50372 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-11 23:42:56 +00:00
nisheeth%netscape.com
932343b896 Changes not part of build. We now use the new RAPTOR_STOPWATCH_DEBUGTRACE macro to annotate all manipulations of the timers.
git-svn-id: svn://10.0.0.236/trunk@50371 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-11 23:33:14 +00:00
nisheeth%netscape.com
4443e74058 Changes not part of build. Added a debug trace macro that outputs to the console only when DEBUG_STOPWATCH is defined.
git-svn-id: svn://10.0.0.236/trunk@50370 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-11 23:30:45 +00:00
rogerl%netscape.com
9a868467c2 NOT A PART OF SEAMONKEY BUILD
- fixed test ECMA references,
- added test to -002


git-svn-id: svn://10.0.0.236/trunk@50368 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-11 22:59:25 +00:00
norris%netscape.com
6a9e7e63c8 Fix bug:
Subject:
        optimizer SecurityException
   Date:
        Mon, 11 Oct 1999 17:37:51 -0400
   From:
        Andrew Wason <aw@softcom.com>
     To:
        norris@netscape.com (Norris Boyd)
    CC:
        Howard Lin <howard@softcom.com>




We use our own SecuritySupport implementation in Rhino.  This is properly
getting called by the optimizer to generate new classes (e.g.
org.mozilla.javascript.gen.c5 etc.)

However, after defining the class, Codegen.compile calls getClassLoader()
on the new class.  The default SecurityManager doesn't allow
getClassLoader() to be called and so an exception is thrown:

java.lang.RuntimeException: Malformed optimizer package
java.security.AccessControlException: access denied
(java.lang.RuntimePermission getClassLoader )
        at org.mozilla.javascript.optimizer.Codegen.compile(Codegen.java:138)
        at org.mozilla.javascript.Context.compile(Context.java:1761)
        at org.mozilla.javascript.Context.compile(Context.java:1691)
        at org.mozilla.javascript.Context.compileReader(Context.java:810)
        at org.mozilla.javascript.Context.evaluateReader(Context.java:725)
        [...]

This is kind of a pain to duplicate outside of our application, but if you
require a test case I can create one.

Codegen is attempting to call loadClass() after it uses
SecuritySupport.defineClass().  Our SecuritySupport calls loadClass()
internally in its defineClass() implementation.  This is what JavaAdapter
expects.

This is from Codegen.compile():

                         if (securitySupport == null) {
                             if (Context.isSecurityDomainRequired())
                                 throw new SecurityException("Required " +
                                             "security context missing");
                             if (classLoader == null)
                                 classLoader = new JavaScriptClassLoader();
                             clazz = classLoader.defineClass(name, classFile);
                         } else {
                             clazz = securitySupport.defineClass(name,
classFile,
                                                                 securityDom
securityDomain);
                         }
                         ClassLoader loader = clazz.getClassLoader();
                         clazz = loader.loadClass(name);


This is from JavaAdapter.createAdapterClass():


         SecuritySupport ss = cx.getSecuritySupport();
         if (ss != null)  {
             Object securityDomain = cx.getSecurityDomainForStackDepth(-1);
             return ss.defineClass(adapterName, bytes, securityDomain);
         } else {
             if (classLoader == null)
                 classLoader = new MyClassLoader();
             classLoader.defineClass(adapterName, bytes);
             return classLoader.loadClass(adapterName, true);
         }


So JavaAdapter is assuming SecuritySupport.defineClass() will call
ClassLoader.loadClass() on the new class, while Codegen is assuming it
needs to call ClassLoader.loadClass() on the class defined by
SecuritySupport.defineClass().

These should be made consistent, and in both cases it should be assumed
that SecuritySupport will both define and load the class.


Andrew
--
Andrew Wason
SoftCom, Inc.
aw@softcom.com


git-svn-id: svn://10.0.0.236/trunk@50367 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-11 22:48:13 +00:00
rogerl%netscape.com
2fc190da13 NOT A PART OF SEAMONKEY BUILD
- removed redundant test & fixed test for 'super' to detect syntax error


git-svn-id: svn://10.0.0.236/trunk@50366 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-11 22:38:40 +00:00
varada%netscape.com
d6fa660ea6 #6569 adding Message function to OnNext handler
git-svn-id: svn://10.0.0.236/trunk@50365 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-11 22:30:02 +00:00
varada%netscape.com
2c4f182411 #15327 changing minlen to maxlen
git-svn-id: svn://10.0.0.236/trunk@50364 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-11 22:28:59 +00:00
sfraser%netscape.com
159030e89c Part of fix for 15795; nsFileSpecMac.cpp is no longer pulled in with a nasty #include, and is thus added to the project. r=dougt
git-svn-id: svn://10.0.0.236/trunk@50362 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-11 21:19:47 +00:00
terry%mozilla.org
c140cc2ce4 Got rid of silly debugging hack.
git-svn-id: svn://10.0.0.236/trunk@50361 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-11 21:19:46 +00:00
sfraser%netscape.com
8023b08ebc Fix for bugs 15795 and 16090 -- fix startup crash which was due to an uninitialized nsFileSpec trashing the stack. Also no longer set mError on CreateDirectory if the dir already exists, prevent += "foo" when mError is set, and add assertions XP to catch calls with NULL strings.
reviewed by dougt and (in part) sspitzer. a=leaf.


git-svn-id: svn://10.0.0.236/trunk@50360 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-11 21:19:06 +00:00
terry%mozilla.org
c90da152c8 Sort votes in decreasing order, not increasing.
git-svn-id: svn://10.0.0.236/trunk@50359 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-11 21:17:17 +00:00
leaf%mozilla.org
f9f813ef1c removing multiple include of mozilla/silentdl from raptor modules
git-svn-id: svn://10.0.0.236/trunk@50357 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-11 19:48:28 +00:00
slamm%netscape.com
8fad354f5e Remove '-test' from output file name
git-svn-id: svn://10.0.0.236/trunk@50356 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-11 19:46:59 +00:00
slamm%netscape.com
9a58260a6e finished testing
git-svn-id: svn://10.0.0.236/trunk@50355 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-11 19:43:46 +00:00
slamm%netscape.com
d1bd5d5e97 New file indexing. Use '/cvsroot' instead of lxr index.
git-svn-id: svn://10.0.0.236/trunk@50354 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-11 19:42:53 +00:00
slamm%netscape.com
ea86098377 Skip attic files.
git-svn-id: svn://10.0.0.236/trunk@50353 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-11 19:40:51 +00:00
slamm%netscape.com
dcfe02ab7b slight tweak. take 2.
git-svn-id: svn://10.0.0.236/trunk@50352 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-11 19:37:32 +00:00
slamm%netscape.com
cb5728cc3b slight tweak
git-svn-id: svn://10.0.0.236/trunk@50351 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-11 19:36:12 +00:00
slamm%netscape.com
1a57622faf Need to account for ,v
git-svn-id: svn://10.0.0.236/trunk@50350 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-11 19:34:57 +00:00
slamm%netscape.com
5bfc12b38e Test new file indexing.
git-svn-id: svn://10.0.0.236/trunk@50349 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-11 19:26:38 +00:00
varada%netscape.com
fb01047518 checking in fixes for bug #6569 - confirmation on clicking the finish button
git-svn-id: svn://10.0.0.236/trunk@50348 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-11 19:23:25 +00:00
terry%mozilla.org
a8e3ac3d29 Let's not keep everything locked up while regenerating.
git-svn-id: svn://10.0.0.236/trunk@50347 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-11 19:02:49 +00:00
terry%mozilla.org
8d648e06d7 Stop reporting "area"; don't report voters on the CC line.
git-svn-id: svn://10.0.0.236/trunk@50346 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-11 18:54:45 +00:00
terry%mozilla.org
c49588441a Make "rescanall" only check bugs which have changed in the last two days.
git-svn-id: svn://10.0.0.236/trunk@50345 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-11 18:23:21 +00:00
terry%mozilla.org
d9793670d5 Added ability to run "processmail rescanall" to scan *every* bug for
any mail that ought to be sent to someone.


git-svn-id: svn://10.0.0.236/trunk@50344 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-11 18:18:39 +00:00
terry%mozilla.org
865140e021 Oops; need extra directions to avoid problems when removing the "area" column.
git-svn-id: svn://10.0.0.236/trunk@50343 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-11 17:41:47 +00:00
terry%mozilla.org
6e44e98669 Stupid hack to let things work with people who have bookmarked
vote-sorting URLs using the old style.


git-svn-id: svn://10.0.0.236/trunk@50342 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-11 17:21:18 +00:00
terry%mozilla.org
97ae527556 Added a "votes" field to the bugs table, which caches the total number
of votes that have been cast for that bug.  This let me simplify the
SQL in buglist.cgi, which makes things more efficient and fixes
several strange bugs.


git-svn-id: svn://10.0.0.236/trunk@50341 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-11 17:14:32 +00:00
kipp%netscape.com
c2c9a9c0b6 Updated documentation to be more accurate; provided description of command line arguments
git-svn-id: svn://10.0.0.236/trunk@50340 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-11 15:30:17 +00:00
Jerry.Kirk%Nexwarecorp.com
058528945e Adding a "; else true" to work around broken shell under QNX4 for the
Neutrino cross-compile.
Bug #16049 r=Dale.Stansberry@Nexwarecorp.com


git-svn-id: svn://10.0.0.236/trunk@50339 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-11 14:41:25 +00:00
neeti%netscape.com
b3d531541b updating status
git-svn-id: svn://10.0.0.236/trunk@50338 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-11 14:17:18 +00:00
briano%netscape.com
f52490e687 Automated update
git-svn-id: svn://10.0.0.236/trunk@50337 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-11 11:16:05 +00:00
briano%netscape.com
16ba6581af Automated update
git-svn-id: svn://10.0.0.236/trunk@50336 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-11 11:07:20 +00:00
ramiro%netscape.com
7fe99209ab Fix for bug 13522. Duplicate nsTimer.cpp files. Removing the old ones.
r=pavlov@netscape.com,sfraser@netscape.com.


git-svn-id: svn://10.0.0.236/trunk@50335 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-11 04:01:35 +00:00
ramiro%netscape.com
64aa89c32a Fix for bug 13522. Duplicate nsITimer.h files. Removing the old ones.
r=pavlov@netscape.com.


git-svn-id: svn://10.0.0.236/trunk@50334 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-11 03:48:21 +00:00
pavlov%netscape.com
770be8200a Do not draw images if we have an empty clip region r=syd fixes bug #11086
git-svn-id: svn://10.0.0.236/trunk@50333 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-11 03:04:59 +00:00
mcafee%netscape.com
574bed9e24 Enable Solaris/Intel/egcs to build & run. Patch submitted by Roy Jones, r=mcafee
git-svn-id: svn://10.0.0.236/trunk@50332 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-10 23:41:23 +00:00
putterman%netscape.com
d468916c06 Remove ctor/dtor counter macros I added before it was determined we shouldn't
use them for xpcom classes.


git-svn-id: svn://10.0.0.236/trunk@50331 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-10 22:52:49 +00:00
putterman%netscape.com
9dbd192f71 Use ctor/dtor counter macros on non xpcom classes. reviewed by mscott. no bug.
git-svn-id: svn://10.0.0.236/trunk@50330 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-10 22:32:54 +00:00
putterman%netscape.com
e618bdbebb Switch over mailnews/base to use nsIModule. I forgot to mention that these
checkins were reviewed by mscott.  There's no bug.


git-svn-id: svn://10.0.0.236/trunk@50329 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-10 22:32:25 +00:00
putterman%netscape.com
7f3afb38db Switch over mailnews/base to use nsIModule.
git-svn-id: svn://10.0.0.236/trunk@50328 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-10 22:31:48 +00:00
putterman%netscape.com
1ef39b7b56 Create a version of NS_GENERIC_FACTORY_CONSTRUCTOR that lets you pass in
an initialization function.  No bug.  Reviewed by dp.


git-svn-id: svn://10.0.0.236/trunk@50327 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-10 22:30:55 +00:00
ramiro%netscape.com
a29fb3f1d9 Add .*.timestamp to ignore the new "ar" hack droppings.
git-svn-id: svn://10.0.0.236/trunk@50326 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-10 07:34:06 +00:00
rpotts%netscape.com
907eec02fc Removed 2 *extra* calls to NS_RELEASE in failure cases...
git-svn-id: svn://10.0.0.236/trunk@50325 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-10 06:58:42 +00:00
dveditz%netscape.com
cb001a0982 build fix, packager needs to know about changed Win32 names
git-svn-id: svn://10.0.0.236/trunk@50324 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-10 04:59:59 +00:00
warren%netscape.com
6320eadc46 Fixed refcounting problem and possible out-of-memory condition. r=kipp
git-svn-id: svn://10.0.0.236/trunk@50323 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-10 02:08:08 +00:00
dveditz%netscape.com
30a83caa1d Fixing 8.3 library name problems, bugs 10355, 10359,10364, 10365, 10372, 11796, 11791. Checking in for cathleen, r=dveditz
git-svn-id: svn://10.0.0.236/trunk@50322 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-10 01:32:59 +00:00
ssu%netscape.com
765cdf4fa9 fixing bug #15953. No fix is not part of tinderbox builds. affects only windows. Got approval from Syd_Sheriff. Also updated config.ini to not reference the editor since it has been rolled into the core.xpi.
git-svn-id: svn://10.0.0.236/trunk@50321 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-09 22:21:11 +00:00
ssu%netscape.com
f818f184a0 this checkin is to help fix bug #15393. There is one more step to truly fix it, which will come later. Reviewed by sgehani@netscape.com. This only affects windows platforms. This fix is needed because xpistub.dll no longers requires two callback functions: XpiStart() and XpiFinal().
git-svn-id: svn://10.0.0.236/trunk@50320 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-09 21:41:02 +00:00
ssu%netscape.com
2478da99aa this checkin is to help fix bug #15393. There is one more step to truly fix it, which will come later. This fix is by dveditz, and reviewed by ssu.
git-svn-id: svn://10.0.0.236/trunk@50319 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-09 21:37:21 +00:00
rginda%ndcico.com
27e760dac4 * Makefile.in, makefile.win
Install new css files and alternate images.

* README
Removed some rot.

* events.js
Add ability to disable a hook without uninstalling it.
Changed return value of addHook to the new hook object.
Added getHook(name) method.
Removed unused variable from routeEvent.

* http.js, irc-debug.js
Fixed spelling error.

* irc.js
network.onConnect no longer forwards the event to the server.
Added getModeStr() method to the IRCChanMode object to retrieve the entire mode string for a channel.

* utils.js
Added Clone() constructor.
Fixed problem in stringTrim.
Added getStackTrace() ... Whoopee!! ...

* bsconnection.c, bsutil.c
Stop warnings on Mac.

* index.html
Change links to buttons to avoid troubles with other methods (href="javascript:f()" | (href="javascript:(void 0)" | href="#") onclick="f()")

* test3-commands.js
Wiring for /testdisplay and /msg commands.

* test3-handlers.js
Added debug message toggle menuitem handler.
Added style change menu item handler.
Added hack to work around bad KeyUp events.
Factored out some logic from onInputCompleteLine into getObjectDetails (in test3-static.js)
Added /testdisplay and /msg implementation.
Fixed error message for unknown network passed to /network.
Added topicDate to output of /topic command.
updateNetwork and updateChannel calls sprinkled throughout to keep the statusbar current.
Added topic change handler.

* test3-static.js
Post new messages top to bottom!!
Disable the debug hook by default.
Added getObjectDetails (factored out of test3-handlers.js)
Added setOutputStyle to dynamically change the .cs file used for the output window.
Implemented updateNetwork and updateChannel.
Massive changes to .display methods make output window now display using a table, instead of spans (much faster, btw.)
Fixed addHistory to trim the correct side of the output, regardless of print direction.

* test3.css
Factored out output window styles.

* test3.xul
Added menu options for debug message toggle and style changes.
Added statusbar (table.)

* test3-output-default.css, test3-output-marble.css
Added output window stylesheets.


git-svn-id: svn://10.0.0.236/trunk@50318 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-09 21:26:52 +00:00
ssu%netscape.com
84d2d35991 fixing bug #15584. reviewed by sgehani@netscape.com. Fixes build warnings under linux.
git-svn-id: svn://10.0.0.236/trunk@50317 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-09 21:08:35 +00:00
law%netscape.com
7f7558dc5d Bug #15916; cleaned up context menu generation to make it faster; rev=hyatt@netscape.com
git-svn-id: svn://10.0.0.236/trunk@50316 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-09 07:58:24 +00:00
law%netscape.com
2705d8b72b Bug #14999; removed use of toolkit app core; rev=scottip@netscape.com
git-svn-id: svn://10.0.0.236/trunk@50315 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-09 06:23:30 +00:00
law%netscape.com
0a8ef0fe92 Bug #14999; removed use of toolkit app core; rev=rgoodger@ihug.co.nz
git-svn-id: svn://10.0.0.236/trunk@50314 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-09 06:21:53 +00:00
law%netscape.com
8191c9d684 Bug #14999; removed use of toolkit app core; rev=davidm@netscape.com
git-svn-id: svn://10.0.0.236/trunk@50313 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-09 06:18:58 +00:00
law%netscape.com
79880beab5 Bug #14999; removed use of toolkit app core; rev=tao@netscape.com
git-svn-id: svn://10.0.0.236/trunk@50312 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-09 06:17:46 +00:00
law%netscape.com
7db449cd06 Bug #14999; removed use of toolkit app core; rev=sfraser@netscape.com
git-svn-id: svn://10.0.0.236/trunk@50311 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-09 06:16:33 +00:00
law%netscape.com
18dd71d7d3 Bug #14999; removed use of toolkit app core; rev=dbragg@netscape.com
git-svn-id: svn://10.0.0.236/trunk@50310 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-09 06:15:06 +00:00
jband%netscape.com
8d3833cb33 Much of this is under the auspices of bug 15794. r=mccabe.
- map xpcshell's 'quit()' to a loop exit rather than calling
'exit(0)' so that the cleanup and leak detection code will still
get called.

- add NS_InitXPCOM and NS_ShutdownXPCOM to xpcshell to run said
cleanup and leak detection code.

- use more NS_IF_* macros

- fix numerous places where code assumed that
nsXPConnect::GetXPConnect() does not add a new ref on the
xpconnect singleton object (the behavior changed some time back
but not all the uses did - brainfade!).

- fix nsXPCException::NewException to automatically trim
'dataless' native stackframes off of the front of a stack trace.
The old system of manually telling it how many frames to trim was
not working well. We really want the first frame showing to be an
'interesting' frame so that callers who get exceptions thrown at
them will see some useful information rather than an empty native
frame that represents (but says nothing about) some native frame
in the xpconnect runtime.

- remove an extra addref from the trimming loop in
nsXPCException::NewException.

- Stop building XPCJSStack objects. XPConnect stacks are singly
linked lists of XPCJSStackFrame objects with refcounted links. I
had this stupid idea that each object would have a refcounted
link to a XPCJSStack object that would tie together the lifetimes
of all objects in the chain. This was overcomplex and
unnecessary. The linked list was enough. Any frame without a
refcount deserved to be deleted because it is simply unreachable.
There was no reason to tie together all the lifetimes of each
object in the chain. So this has been simplified in a big way.

- fixed place in xpcthrower.cpp where we were leaking a refcount
on the xpconnect singleton each time an xpcexception was thrown.

- do cleanup and gc() at the end of xpctest_echo.js to use for
leak testing - all wrappers should go away.


git-svn-id: svn://10.0.0.236/trunk@50309 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-09 06:01:57 +00:00
morse%netscape.com
580e6e380c use nsIModule to prepare for memory leaks fixing. Bug# 14034. r=neeti
git-svn-id: svn://10.0.0.236/trunk@50308 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-09 04:50:32 +00:00
sdagley%netscape.com
f5924be40d XP_MAC GC leak detector changes: using LMGetCurStackBase to compute stack bottom, and considering all threads GCable. r=sdagley (checking in for beard). bug=15906
git-svn-id: svn://10.0.0.236/trunk@50306 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-09 03:39:54 +00:00
sdagley%netscape.com
886d9b7c4f XP_MAC: turning off a spurious assert in PR_Lock (which can get called at interrupt time!). r=sdagley (checking in for beard). bug=15906
git-svn-id: svn://10.0.0.236/trunk@50305 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-09 03:39:52 +00:00
beard%netscape.com
d2773dffe3 fix build bustage, accidentally left GC_LEAK_DETECTOR on.
git-svn-id: svn://10.0.0.236/trunk@50304 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-09 03:31:58 +00:00
beard%netscape.com
79da82091a fix memory leaks (nsMacMessage sink). r=pavlov, bug=15380
git-svn-id: svn://10.0.0.236/trunk@50302 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-09 03:08:56 +00:00
beard%netscape.com
8927726ce7 added "Dump Leaks" menu item. r=jar, bug=15906
git-svn-id: svn://10.0.0.236/trunk@50301 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-09 03:01:44 +00:00
beard%netscape.com
4aa916c066 added dump leaks command. added explicit calls to NS_InitXPCOM/NS_ShutdownXPCOM. r=jar, bug=15906
git-svn-id: svn://10.0.0.236/trunk@50300 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-09 03:01:43 +00:00
beard%netscape.com
a193449dbf Changed MemAllocatorGC.o target to build MemAllocatorDebug.o. r=jar, bug=15906
git-svn-id: svn://10.0.0.236/trunk@50299 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-09 02:58:20 +00:00
beard%netscape.com
6d47545512 removed FSp_fopen.c, SymFiles.cpp now using native Mac file I/O. r=jar, bug=15906
git-svn-id: svn://10.0.0.236/trunk@50298 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-09 02:57:51 +00:00
beard%netscape.com
d568e564ce added :dist:gc: and :dist:mac: to access paths. r=jar, bug=15906
git-svn-id: svn://10.0.0.236/trunk@50297 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-09 02:56:56 +00:00
beard%netscape.com
9a6d1be468 GC_add_roots -> GC_register_fragment, GC_remove_roots -> GC_unregister_fragment. r=jar, bug=15906
git-svn-id: svn://10.0.0.236/trunk@50296 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-09 02:56:55 +00:00
beard%netscape.com
c3710aa7cf added "IDE_Options.h" to ensure consistent build settings. r=jar, bug=15906
git-svn-id: svn://10.0.0.236/trunk@50295 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-09 02:54:38 +00:00
beard%netscape.com
ab9846ab1e added gc_fragments.h. r=jar, bug=15906
git-svn-id: svn://10.0.0.236/trunk@50294 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-09 02:53:25 +00:00
beard%netscape.com
bfb9762e5a nsFileSpec.GetLeafName() allocates a string, fix leak. r=warren, bug=15380
git-svn-id: svn://10.0.0.236/trunk@50293 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-09 02:52:46 +00:00
cls%seawood.org
f49139b533 Bug #13782 r=ramiro
Fixed the various clean targets so that a distclean is only performed on GtkMozilla when explicitly asked for.


git-svn-id: svn://10.0.0.236/trunk@50292 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-09 02:41:01 +00:00
dveditz%netscape.com
19c0e43ded fixing Win32 debug build bustage with NS_LOG_ADDREF. r=mccabe
git-svn-id: svn://10.0.0.236/trunk@50291 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-09 02:09:31 +00:00
mccabe%netscape.com
d69dd3df67 Fix to 15813. Change to using nsFileSpec to read .xpt files; this is 2x faster on the Mac. Fix courtesy Simon Fraser.
r=sfraser, or r=mccabe, depending on how you look at it.


git-svn-id: svn://10.0.0.236/trunk@50290 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-09 02:07:35 +00:00
edburns%acm.org
dc683794a3 Fix for http://bugzilla.mozilla.org/show_bug.cgi?id=15902
Approved by: edburns@acm.org
Reviewed by: edburns@acm.org
Authored by: idk@eng.sun.com


git-svn-id: svn://10.0.0.236/trunk@50289 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-09 01:34:29 +00:00
selmer%netscape.com
dc6d4aa6fa New standard makefile
git-svn-id: svn://10.0.0.236/trunk@50288 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-09 01:33:45 +00:00
rhp%netscape.com
99e13cf601 Changes to fix VCard display problems - Changed generated JS - Bugs: #14204 and #12352 - Reviewer: scottip
git-svn-id: svn://10.0.0.236/trunk@50287 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-09 01:19:00 +00:00
edburns%acm.org
66eaef7892 Fix for http://bugzilla.mozilla.org/show_bug.cgi?id=15607
Approved by: av@netscape.com
Reviewed by: av@netscape.com

/**

 * This method queries the prefs for proxy information.

 * It has been tested and is known to work in the following three cases

 * when no proxy host or port is specified

 * when only the proxy host is specified

 * when only the proxy port is specified

 * This method conforms to the return code specified in

 * http://developer.netscape.com/docs/manuals/proxy/adminnt/autoconf.htm#1020923

 * with the exception that multiple values are not implemented.

 */

NS_IMETHODIMP nsPluginHostImpl::FindProxyForURL(const char* url, char* *result)


git-svn-id: svn://10.0.0.236/trunk@50286 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-09 01:18:02 +00:00
slamm%netscape.com
5ff13771d4 Use temporary file name without process number for checkout. I was getting the name wrong because I refered to it in a new process (still using the 17606 variable. Hopefully this will be the final checking for bug #15750. r=waterson. I updated some comments too.
git-svn-id: svn://10.0.0.236/trunk@50285 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-09 00:31:17 +00:00
dp%netscape.com
c6019b3551 adding precheckin tests. r=matt
git-svn-id: svn://10.0.0.236/trunk@50284 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-08 23:50:49 +00:00
dp%netscape.com
3be8f0bb27 Adding precheckin tests
git-svn-id: svn://10.0.0.236/trunk@50283 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-08 23:48:20 +00:00
av%netscape.com
f82a173c1b Bug 15178, r=vidur adding check for return value avoiding crash
git-svn-id: svn://10.0.0.236/trunk@50282 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-08 23:47:03 +00:00
av%netscape.com
c4fd2231d1 Bug 15178, r=vidur adding check for null-pointer avoiding crash
git-svn-id: svn://10.0.0.236/trunk@50281 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-08 23:46:23 +00:00
terry%mozilla.org
22765f12e4 Fixed bug 15890 -- was producing garbled SQL if doing a query
that required the bugs_activity table.


git-svn-id: svn://10.0.0.236/trunk@50280 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-08 23:45:42 +00:00
kipp%netscape.com
fb8e1bdb06 Fixed cellmap ctor/dtor logging to not show up negative
git-svn-id: svn://10.0.0.236/trunk@50279 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-08 23:42:13 +00:00
kipp%netscape.com
9c16516bfc Fixed a comment that was out of date
git-svn-id: svn://10.0.0.236/trunk@50278 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-08 23:41:39 +00:00
kipp%netscape.com
a4f420d4fb Fixed up hook to track library loads for refcnt logging
git-svn-id: svn://10.0.0.236/trunk@50277 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-08 23:41:18 +00:00
kipp%netscape.com
6a697df2cd Always call dump-statistics and reset-statistics so that MOZ_DUMP_LEAKS isn't required
git-svn-id: svn://10.0.0.236/trunk@50276 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-08 23:40:52 +00:00
kipp%netscape.com
fabbe52905 Tweaked to avoid a crash in case bloat tracking is on but there is no bloat data to dump
git-svn-id: svn://10.0.0.236/trunk@50275 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-08 23:39:57 +00:00
beard%netscape.com
b625f8c219 modernized constants.
git-svn-id: svn://10.0.0.236/trunk@50274 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-08 23:35:34 +00:00
beard%netscape.com
3270b2a66f Rewrote using Mac file I/O, since MSL can only manage 35 FILEs.
git-svn-id: svn://10.0.0.236/trunk@50273 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-08 23:35:32 +00:00
jfrancis%netscape.com
84003fe77b applying same fix as rev 1.28 (initializing mIsDone) to the rest of the Init() methods.
git-svn-id: svn://10.0.0.236/trunk@50272 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-08 23:34:07 +00:00
nisheeth%netscape.com
2a38ee05b4 Not currently part of the build. Added a stack behind the save/restore timing macros.
git-svn-id: svn://10.0.0.236/trunk@50271 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-08 23:27:09 +00:00
akhil.arora%sun.com
9dcd28272e Fixes Bug 15837 by instantiating the proper subtype of Node instead of Node.
Fixed by Igor Nekrestyanov <nis@sparc.spb.su>.
Reviewed by Akhil Arora <akhil.arora@sun.com>.


git-svn-id: svn://10.0.0.236/trunk@50270 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-08 23:22:52 +00:00
troy%netscape.com
bae6f56e4b Changes to SizeOf() code only. This code is debug code that only runs
when you chose the "Show Frame Sizes" menu item...


git-svn-id: svn://10.0.0.236/trunk@50269 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-08 23:18:19 +00:00
kipp%netscape.com
deff3927b7 new
git-svn-id: svn://10.0.0.236/trunk@50268 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-08 23:04:26 +00:00
selmer%netscape.com
6f9a832691 Configs instead of Customizations directory
git-svn-id: svn://10.0.0.236/trunk@50267 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-08 22:56:29 +00:00
rogerl%netscape.com
5e3057bc5f Fixed 14060 - calling exec on java methods was gettmg caught by exec
trapping nonsense.


git-svn-id: svn://10.0.0.236/trunk@50266 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-08 22:55:33 +00:00
syd%netscape.com
062e198b32 Export platform.h. This is legacy stuff that should be removed eventually.
r=mcafee.


git-svn-id: svn://10.0.0.236/trunk@50264 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-08 22:37:37 +00:00
syd%netscape.com
52eb9ba5eb Build into include for exports (currently just platform.h) r=mcafee
git-svn-id: svn://10.0.0.236/trunk@50263 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-08 22:36:46 +00:00
kipp%netscape.com
ba85b17922 Unbreak people who were actually using MOZ_TRACE_XPCOM_REFCNT
git-svn-id: svn://10.0.0.236/trunk@50262 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-08 22:30:19 +00:00
troy%netscape.com
69fbd973a0 Fix for blocker #15839. r=kipp@netscape.com,kin@netscape.com
Typing into a text area wasn't working properly. Problem was that when the text
changed we were reflowing the text frames with a resize reflow command and
we thought we could optimize the reflow. So I changed ContentChanged() to
mark each text frame dirty so we would know not to do the optimization


git-svn-id: svn://10.0.0.236/trunk@50261 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-08 22:04:31 +00:00
kipp%netscape.com
041db07f43 Fixed opt build bustage
git-svn-id: svn://10.0.0.236/trunk@50260 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-08 22:04:04 +00:00
kipp%netscape.com
60a9b36aae Fixed windows build bustage
git-svn-id: svn://10.0.0.236/trunk@50256 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-08 21:19:42 +00:00
cls%seawood.org
075aedf4ee Ok, let's not try to generate the remove list if there is no library to remove things from
git-svn-id: svn://10.0.0.236/trunk@50255 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-08 21:17:32 +00:00
waterson%netscape.com
ca11a90c92 Initial revision. Not in build.
git-svn-id: svn://10.0.0.236/trunk@50251 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-08 21:15:21 +00:00
waterson%netscape.com
84e4143c7e Add new files not in the build.
git-svn-id: svn://10.0.0.236/trunk@50248 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-08 21:11:20 +00:00
morse%netscape.com
abd3497f8c use nsIModule to prepare for memory leaks fixing. Bug# 14034. r=neeti
git-svn-id: svn://10.0.0.236/trunk@50246 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-08 20:47:17 +00:00
cbegle%netscape.com
6389e9eed1 Adding new files. Tests for XPConnect. These files are not part of the
build.  R=jband@netscape.com


git-svn-id: svn://10.0.0.236/trunk@50245 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-08 20:45:37 +00:00
kipp%netscape.com
16a80cecba Tweaked stack trace display code
git-svn-id: svn://10.0.0.236/trunk@50244 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-08 20:42:33 +00:00
kipp%netscape.com
bbf17a2772 Support demangling again by working around crash bug in demangle library
git-svn-id: svn://10.0.0.236/trunk@50243 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-08 20:42:15 +00:00
kipp%netscape.com
5b712622da Enable NS_FreeImageManager now that the call is part of the tip
git-svn-id: svn://10.0.0.236/trunk@50242 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-08 20:41:49 +00:00
kipp%netscape.com
0eec4f1a12 nuked
git-svn-id: svn://10.0.0.236/trunk@50241 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-08 20:41:21 +00:00
kipp%netscape.com
e18af2d0ee Cleanup moz-decl-counter usage and fix NS_LOG_ADDREF usage
git-svn-id: svn://10.0.0.236/trunk@50239 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-08 20:41:19 +00:00
neeti%netscape.com
0f9df28d81 Converted nsxpi.dll and xpiflash.dll to use nsIModule to prepare for memory leaks fixing. Bug# 14034. r=dougt
git-svn-id: svn://10.0.0.236/trunk@50238 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-08 20:41:13 +00:00
ftang%netscape.com
655211e9e0 remove obsolted file
git-svn-id: svn://10.0.0.236/trunk@50237 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-08 20:35:24 +00:00
ftang%netscape.com
e62cab32bc change to nsIModule r=kipp
git-svn-id: svn://10.0.0.236/trunk@50236 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-08 20:30:58 +00:00
ftang%netscape.com
ff64ed5645 remove factory file and add module file
git-svn-id: svn://10.0.0.236/trunk@50235 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-08 20:30:42 +00:00
cls%seawood.org
7ac835a8b2 Added a test to see if there are any archive members to be removed before calling AR_DELETE as NetBSD's & OpenBSD's versions of ar do not like removing an empty list.
r=leaf


git-svn-id: svn://10.0.0.236/trunk@50234 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-08 20:30:28 +00:00
kipp%netscape.com
b44472476c Merged bloaty and moz ctor counting (space team work)
git-svn-id: svn://10.0.0.236/trunk@50233 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-08 20:29:47 +00:00
ftang%netscape.com
7ce12116c7 add new file for nsIMoudle work, r=kipp
git-svn-id: svn://10.0.0.236/trunk@50232 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-08 20:27:24 +00:00
slamm%netscape.com
16bf5b4e43 Backout troy's last set of changes. Caused bug #15790, 'opening bookmarks window and expanding mail folders crashes'. r=waterson.
git-svn-id: svn://10.0.0.236/trunk@50230 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-08 18:52:19 +00:00
beard%netscape.com
f5cc851bd0 First Checked In.
git-svn-id: svn://10.0.0.236/trunk@50229 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-08 17:51:45 +00:00
slamm%netscape.com
2b7533ef10 Fix empty sidebar. bug #15468. Need to wait for sidebar-panels in init routine.
git-svn-id: svn://10.0.0.236/trunk@50227 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-08 17:15:27 +00:00
rickg%netscape.com
24c8eb13e7 added default XML apos entity; no bug #. This update (and my last) were reviewed by peterl
git-svn-id: svn://10.0.0.236/trunk@50226 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-08 15:05:41 +00:00
rickg%netscape.com
7bfc990fcf fixed bug 15649; when the parsing library was modularized last week, tag lookup for view source got disconnected. This simply reconnects it.
git-svn-id: svn://10.0.0.236/trunk@50225 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-08 14:52:16 +00:00
terry%mozilla.org
b978d371e9 Added ability to query by votes.
git-svn-id: svn://10.0.0.236/trunk@50224 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-08 14:47:21 +00:00
terry%mozilla.org
8c7166d122 Added ability to query by votes.
git-svn-id: svn://10.0.0.236/trunk@50223 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-08 14:41:17 +00:00
buster%netscape.com
273f420e23 fixed my part of bug 15814 (Cleanup build warnings)
so trivial, no reviewer needed
fixed my part of bug  5403 (Services improperly released: Use NS_WITH_SERVICE)
a handful of subtle error handling bugs were fixed as a side effect
r=Akkana


git-svn-id: svn://10.0.0.236/trunk@50222 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-08 14:39:20 +00:00
law%netscape.com
edef6fb916 For bug #14999; adding new method to simplify applying OpenDialog to the hidden window. rev=danm@netscape.com
git-svn-id: svn://10.0.0.236/trunk@50219 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-08 14:04:17 +00:00
terry%mozilla.org
2aa7b332a8 Fixed bug 15808 -- previous change had busted querying of CC.
git-svn-id: svn://10.0.0.236/trunk@50218 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-08 14:01:02 +00:00
rods%netscape.com
db039d9432 ifdef'ed out a static counter for debugging. r=kmcclusk b=15637
git-svn-id: svn://10.0.0.236/trunk@50217 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-08 12:24:11 +00:00
sgehani%netscape.com
97b88d421f Failover implemented for i18n strings in XPInstall if the string bundle service is not available, fails, or if the .properties resource file is not avilable. Fixes install wizard logging. Completion of fix for bug 8140. [r=ssu]
git-svn-id: svn://10.0.0.236/trunk@50216 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-08 09:00:13 +00:00
sspitzer%netscape.com
4b800ef247 more clean up. #15402.
git-svn-id: svn://10.0.0.236/trunk@50215 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-08 07:58:54 +00:00
waterson%netscape.com
199c8166c7 Misc cleanup, r=hyatt
git-svn-id: svn://10.0.0.236/trunk@50214 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-08 07:26:39 +00:00
waterson%netscape.com
fbecb0f668 Add elements to element map by 'ref', as well.
git-svn-id: svn://10.0.0.236/trunk@50213 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-08 07:26:14 +00:00
sspitzer%netscape.com
1dd1cfee5a temporary printfs to help me debug the elusive #15792 that only bijals is seeing
git-svn-id: svn://10.0.0.236/trunk@50212 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-08 07:12:21 +00:00
sspitzer%netscape.com
52d84b804d just checking in comments. resizeToContent() makes the "Create Profile Wizard"
take up the whole screen.  (bug logged on danm already.)


git-svn-id: svn://10.0.0.236/trunk@50211 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-08 06:50:26 +00:00
cls%seawood.org
a0ade5ef67 Checking in locally generated configure until briano's script gets fixed
git-svn-id: svn://10.0.0.236/trunk@50210 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-08 05:57:01 +00:00
sspitzer%netscape.com
4b226a4436 when renaming a profile, and renaming the profile directory on disk,
don't do a copy and delete.  just rename the directory.
r=davidm, #15402


git-svn-id: svn://10.0.0.236/trunk@50209 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-08 05:41:40 +00:00
cls%seawood.org
07d74ceef4 Applied Jim Nance's, <jim_nance@yahoo.com>, patch to reduce the size of a build by using a modified version of GNU make's implicit ruleset that incrementally add object files to static library archive and eliminates the need to have the unused object files sitting around. A clobber is required to see the savings.
Bug #15241 . r=sleestack


git-svn-id: svn://10.0.0.236/trunk@50208 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-08 05:18:46 +00:00
sspitzer%netscape.com
d4f79e4e21 fix build bustage on windows.
git-svn-id: svn://10.0.0.236/trunk@50207 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-08 05:14:48 +00:00
troy%netscape.com
093e5bfd97 Change to SizeOf() code (diagnostic code only). Changed table frame
code to split the column cache size out into a separate listing


git-svn-id: svn://10.0.0.236/trunk@50206 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-08 05:12:55 +00:00
sspitzer%netscape.com
3ba1fc9867 more clean up of the profile code. #15402, r=davidm
make profileExists() part of the nsIProfile interface, so I can
get at it from JS.  startCommunicator is now startApprunner.
get RenameProfile() and DeleteProfile() to work better.
make the delete profile dialog size to content.
change the 2nd arg of DeleteProfile() to be a bool, and not a string.
use MakeUnique() to prevent undesired collisions of profiles on disk.


git-svn-id: svn://10.0.0.236/trunk@50205 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-08 04:58:32 +00:00
sspitzer%netscape.com
127e23606e add some bulletproofing. r=davidm
git-svn-id: svn://10.0.0.236/trunk@50204 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-08 04:55:37 +00:00
sspitzer%netscape.com
be500f5f77 make the prompt and alert dialogs resize to content.
fix by davidm, r=sspitzer, bug #15815


git-svn-id: svn://10.0.0.236/trunk@50203 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-08 04:51:19 +00:00
troy%netscape.com
28f1fa0323 Removed some dead code and moved some #if 0 code from the area frame
to the block frame. This completes the previous checkin


git-svn-id: svn://10.0.0.236/trunk@50202 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-08 04:45:12 +00:00
warren%netscape.com
15a67038a4 Fixed bug in computing object count mean and stddev.
git-svn-id: svn://10.0.0.236/trunk@50201 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-08 04:39:24 +00:00
troy%netscape.com
579c8e2248 Frame space reductions. r=kipp@netscape.com
Table cell frames and table caption frames now use block frames and not area
frames. This saves 24 bytes per frame instance


git-svn-id: svn://10.0.0.236/trunk@50200 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-08 04:32:46 +00:00
beard%netscape.com
312671bf23 added .xSYM address to source mapping.
git-svn-id: svn://10.0.0.236/trunk@50199 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-08 04:14:09 +00:00
beard%netscape.com
cc845797fa changed format of object size.
git-svn-id: svn://10.0.0.236/trunk@50198 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-08 04:13:44 +00:00
beard%netscape.com
8c486b4dbf added address to source mapping using .xSYM files.
git-svn-id: svn://10.0.0.236/trunk@50197 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-08 04:13:04 +00:00
beard%netscape.com
3da62e7fd4 added Histogram report.
git-svn-id: svn://10.0.0.236/trunk@50196 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-08 04:12:11 +00:00
beard%netscape.com
d75c5a8f47 First Checked In.
git-svn-id: svn://10.0.0.236/trunk@50195 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-08 04:11:39 +00:00
danm%netscape.com
fefde390b5 hiddenWindow loads its full glory only on the Mac. speeds launch time for everyone else. r:hyatt
git-svn-id: svn://10.0.0.236/trunk@50194 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-08 03:31:41 +00:00
peterl%netscape.com
d1916dab07 First step at fixing 12106, factored out style rule processing from
style sheets into a seperate style rule processor interface
r=troy


git-svn-id: svn://10.0.0.236/trunk@50193 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-08 03:09:31 +00:00
leaf%mozilla.org
12ad3a8ea1 << termination needs to be the first thing on the line, no preceding whitespace
fixing solaris build


git-svn-id: svn://10.0.0.236/trunk@50192 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-08 02:27:34 +00:00
peterl%netscape.com
41ae9835a0 removed setting of border color for table parts (cruft from the dark ages)
Bug 15802
r=rickg


git-svn-id: svn://10.0.0.236/trunk@50191 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-08 02:07:37 +00:00
mscott%netscape.com
42395fb4cd Bug #14612. I'm checking this in for warren. r=mscott
The pipe shouldn't block when you write more bytes into the pipe than the size of the pipe's buffer. Add an extra
notify to the writer of the pipe after we read data out of it.


git-svn-id: svn://10.0.0.236/trunk@50190 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-08 02:03:34 +00:00
ducarroz%netscape.com
02844df3be Fix for bug 15720, We need to tell the nsMsgLineBuffer which format of line break we will use. R=jefft,mscott
git-svn-id: svn://10.0.0.236/trunk@50189 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-08 01:55:36 +00:00
warren%netscape.com
c9fbdb8075 Fixed AddRef/Release problems to eliminate negative refcounts in Bloaty.
git-svn-id: svn://10.0.0.236/trunk@50188 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-08 01:49:06 +00:00
tao%netscape.com
9470ef781b Hook up l10n/ when MOZ_L10N is defined.
git-svn-id: svn://10.0.0.236/trunk@50187 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-08 01:32:44 +00:00
alecf%netscape.com
450082561c fix mac-specific bustage
git-svn-id: svn://10.0.0.236/trunk@50186 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-08 01:11:13 +00:00
tao%netscape.com
de2f3b6942 Move da-DK files to l10n/lang; r=leaf
git-svn-id: svn://10.0.0.236/trunk@50185 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-08 01:06:56 +00:00
alecf%netscape.com
c3ba33bbb8 fix windows bustage
git-svn-id: svn://10.0.0.236/trunk@50184 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-08 01:01:56 +00:00
edburns%acm.org
d6eb736cf5 1999-10-07 <Ed Burns <ed.burns@sun.com>>
* This change fixes
 	http://bugzilla.mozilla.org/show_bug.cgi?id=15793 which caused one
 	to have to copy the component.reg and components directory.  It
 	also causes webclient to do autoregistration.  It also adds a
 	debugging method to BrowserControlMozillaShim.java
 	nativeDebugBreak().

	This changes makes webclient depend on having mozilla sources from
 	10/5/99 or later.

	Reviewed by Mark Lin <marklin@eng.sun.com>
	Approved by Ed Burns <edburns@acm.org>, module owner


git-svn-id: svn://10.0.0.236/trunk@50183 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-08 00:52:53 +00:00
edburns%acm.org
f0ebe3333d 1999-10-07 <Ed Burns <ed.burns@sun.com>>
* This change fixes
 	http://bugzilla.mozilla.org/show_bug.cgi?id=15793 which caused one
 	to have to copy the component.reg and components directory.  It
 	also causes webclient to do autoregistration.  It also adds a
 	debugging method to BrowserControlMozillaShim.java
 	nativeDebugBreak().

	This changes makes webclient depend on having mozilla sources from
 	10/5/99 or later.

	Reviewed by Mark Lin <marklin@eng.sun.com>
	Approved by Ed Burns <edburns@acm.org>, module owner


git-svn-id: svn://10.0.0.236/trunk@50182 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-08 00:48:01 +00:00
alecf%netscape.com
0a89ba79ef oops, remove XP_UNIX specific stuff which was busting things
git-svn-id: svn://10.0.0.236/trunk@50181 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-08 00:37:17 +00:00
terry%mozilla.org
479c02d23b Sorting by the vote column was busted.
git-svn-id: svn://10.0.0.236/trunk@50180 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-08 00:30:49 +00:00
sspitzer%netscape.com
af65076fcc don't specify the width and height, so the dialog resizes to content.
git-svn-id: svn://10.0.0.236/trunk@50178 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-08 00:17:22 +00:00
alecf%netscape.com
867ac81c42 add new NS_xxx_MODULE* macros (not used anywhere in the build just yet)
git-svn-id: svn://10.0.0.236/trunk@50177 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-08 00:12:29 +00:00
jband%netscape.com
1c2af52291 fix warning of old style C++ variable scope declared in 'for'. bug 15778. r=slamm
git-svn-id: svn://10.0.0.236/trunk@50176 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-08 00:11:05 +00:00
tao%netscape.com
524f22fa3d Move localized resource files to mozilla/l10n/lang.
git-svn-id: svn://10.0.0.236/trunk@50173 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-07 23:59:32 +00:00
alecf%netscape.com
f562178cfd exorcise xp.h from compose header files, in preparation for nsIModule landing
r=sspitzer


git-svn-id: svn://10.0.0.236/trunk@50172 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-07 23:55:42 +00:00
terry%mozilla.org
ff8d0b5547 Added the ability for users to "vote" on which bugs they think should
be fixed.


git-svn-id: svn://10.0.0.236/trunk@50171 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-07 23:54:52 +00:00
rickg%netscape.com
32ae9a79ff fixed bug 15881; r=kmcclusk
git-svn-id: svn://10.0.0.236/trunk@50170 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-07 23:52:29 +00:00
rickg%netscape.com
dee37d8ec6 fixed bug 15788; r=kmcclusk
git-svn-id: svn://10.0.0.236/trunk@50169 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-07 23:51:29 +00:00
mscott%netscape.com
14bcf4dfb6 Bug #11836 --> convert local factory to be a nsIModule
r=bienvenu


git-svn-id: svn://10.0.0.236/trunk@50168 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-07 23:35:10 +00:00
mscott%netscape.com
53ff6e3994 Bug #12198 --> don't dereference a null ptr for the uri. return gracefully.
r=sspitzer


git-svn-id: svn://10.0.0.236/trunk@50167 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-07 23:29:13 +00:00
mscott%netscape.com
dea623bfa3 Bug #15615 --> when the proxy code is processing an event, we can't be holding onto the event queue's monitor. Because
you could run into the scenario where in processing the event, the thread blocks waiting for an event from another thread.
That thread tries to post the event to the orginal thread's event Queue but can't enter the queue's monitor.
r=warren (or reviewed by me depending on your point of view since we figured it out together).


git-svn-id: svn://10.0.0.236/trunk@50166 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-07 23:25:36 +00:00
danm%netscape.com
c631c144f2 killing general table and td rules since these are global to the entire app, and table display:block in particular will break all tables. want to remove other rules, too, but stopped with the delightfully self-contradictory #righttext, which isn't used. r:hyatt
git-svn-id: svn://10.0.0.236/trunk@50165 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-07 23:10:41 +00:00
waterson%netscape.com
2064c545e9 Bug 15687. Make sure to test whether CreateTemplateBuilder() succeeded before dereferencing the builder we get back. r=rjc
git-svn-id: svn://10.0.0.236/trunk@50164 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-07 23:07:00 +00:00
terry%mozilla.org
7edab401af Helpfile for voting feature.
git-svn-id: svn://10.0.0.236/trunk@50163 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-07 23:03:59 +00:00
slamm%netscape.com
70d8dbcabe Make the sidebar panels appear. Bug #15468. r=mcafee. Had 'datasources' defined when it wasn't needed.
git-svn-id: svn://10.0.0.236/trunk@50159 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-07 22:56:22 +00:00
selmer%netscape.com
fdf016b522 varada - bug #15770 adding extra funtions to create button in checklist.ini to verify presence of config before doing a copy
git-svn-id: svn://10.0.0.236/trunk@50157 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-07 22:18:13 +00:00
sspitzer%netscape.com
eb6f6392d7 add new line to the end of the file.
git-svn-id: svn://10.0.0.236/trunk@50156 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-07 22:05:53 +00:00
slamm%netscape.com
7d127002f9 Fix solaris build bustage. The shell does not like {} command grouping. Use () instead.
git-svn-id: svn://10.0.0.236/trunk@50155 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-07 22:04:04 +00:00
rods%netscape.com
4d74acf338 minor adjustment for focus
git-svn-id: svn://10.0.0.236/trunk@50154 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-07 21:58:14 +00:00
rods%netscape.com
4c6b85103e Addtional changes for form padding and borders
r=kmcclusk


git-svn-id: svn://10.0.0.236/trunk@50153 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-07 21:54:13 +00:00
warren%netscape.com
fc64e1c69b Added 'Bloaty' refcounting and memory bloat statistics code
git-svn-id: svn://10.0.0.236/trunk@50152 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-07 21:50:20 +00:00
mcafee%netscape.com
c322512ff3 Adding leaky to the linux/intel build. a=ramiro, r=slamm
git-svn-id: svn://10.0.0.236/trunk@50151 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-07 21:48:05 +00:00
rods%netscape.com
3b7075a69b Changed the border and padding for all the form control frames to be as compatible with Nav Quirks as we can
added rules for form controls inside of tables
r=kmcclusk


git-svn-id: svn://10.0.0.236/trunk@50150 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-07 21:47:54 +00:00
rods%netscape.com
3848b18fe7 Added the COMPAre macro for comparing sizes with NavQuirks
r=kmcclusk


git-svn-id: svn://10.0.0.236/trunk@50149 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-07 21:46:31 +00:00
neeti%netscape.com
b0bb720dd1 updating status.
git-svn-id: svn://10.0.0.236/trunk@50148 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-07 21:44:37 +00:00
valeski%netscape.com
5735cf240f not in build. test app for makeabsolute performance
git-svn-id: svn://10.0.0.236/trunk@50147 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-07 21:43:49 +00:00
rods%netscape.com
32093a83c6 Changed the way the list figures out how high a single item is, it now subtracts out the padding & border instead of just the border
r=kmcclusk


git-svn-id: svn://10.0.0.236/trunk@50146 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-07 21:39:50 +00:00
rods%netscape.com
f291b097d5 Removed code where standard mode was incorrectly subtracting border size
r=kmcclusk


git-svn-id: svn://10.0.0.236/trunk@50145 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-07 21:37:02 +00:00
slamm%netscape.com
1c08cd13d9 Quit when cvs has an error. Previously it kept going. Bug #15750. r=mcafee. Also change default module from SeaMonkeyEditor to SeaMonkeyAll.
git-svn-id: svn://10.0.0.236/trunk@50144 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-07 21:24:17 +00:00
rods%netscape.com
d66d5defc6 Added macro to help in figuring Nav Quirks default size for all
controls ifdef for just me. Renamed aMetrics to aDesiredSize
Did some clean. Nav Quirks obeys padding and not border.
Reworked how computed size is used r=kmcclusk


git-svn-id: svn://10.0.0.236/trunk@50143 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-07 21:09:47 +00:00
rods%netscape.com
e6f28ca7ba Added macro to help in figuring Nav Quirks default size for all
controls ifdef for just me r=kmcclusk


git-svn-id: svn://10.0.0.236/trunk@50142 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-07 21:07:38 +00:00
rods%netscape.com
e414c28907 Added macro to help in figuring Nav Quirks default size for all controls r=kmcclusk
git-svn-id: svn://10.0.0.236/trunk@50141 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-07 21:04:52 +00:00
dp%netscape.com
c94e8e9c8e Removing ifdef DEBUG_dp.
git-svn-id: svn://10.0.0.236/trunk@50140 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-07 21:03:48 +00:00
endico%mozilla.org
a566a33989 fixed html error so the grey text search box will be aligned at top
git-svn-id: svn://10.0.0.236/trunk@50139 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-07 21:02:59 +00:00
pinkerton%netscape.com
1452789bbd correctly determine when the image has changed sizes to avoid causing unnecessary reflows. now comparing twips to twips instead of twips to pixels. part of fix for bug #15722 (r=evaughan).
git-svn-id: svn://10.0.0.236/trunk@50138 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-07 21:02:58 +00:00
dp%netscape.com
cc675f4462 Instrumentation to detect leaks of BrowserInstance. r=don
git-svn-id: svn://10.0.0.236/trunk@50136 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-07 21:01:16 +00:00
sfraser%netscape.com
b591bc9b02 Fix for bug 15749; passing null strings to nsFileSpec routines was doing bad things, like strlen(NULL). r=dougt
git-svn-id: svn://10.0.0.236/trunk@50135 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-07 20:57:21 +00:00
norris%netscape.com
15352050f2 Enable URI checks for web JavaScript.
Fixes bug 11462 "Need checks for setting URLs"
Reviewed by mstoltz.


git-svn-id: svn://10.0.0.236/trunk@50134 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-07 20:56:49 +00:00
dp%netscape.com
27bf7b0e38 Fixed webshell leak caused by session history entry circular
reference. r=radha


git-svn-id: svn://10.0.0.236/trunk@50133 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-07 20:55:14 +00:00
kmcclusk%netscape.com
15925c0587 bug=15184 Made <input type=password> a form submitter. Hitting return in a password field
will now submit the form. r=rods@netscape.com


git-svn-id: svn://10.0.0.236/trunk@50132 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-07 20:54:42 +00:00
rods%netscape.com
6fb1b8e0d6 set the padding to 1 related to bug# 15314
git-svn-id: svn://10.0.0.236/trunk@50131 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-07 20:53:23 +00:00
rhp%netscape.com
f536f04be7 Changes for bug #13098 - Reviewer: jefft
git-svn-id: svn://10.0.0.236/trunk@50130 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-07 20:53:06 +00:00
pavlov%netscape.com
46858a98ee unif 0 synchronous drawing on linux and add some checks to make sure we are visible and don't dump paint events when we are going to ignore them r=akkana
git-svn-id: svn://10.0.0.236/trunk@50128 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-07 20:49:11 +00:00
kipp%netscape.com
759b90d985 Whoops, backed out last check - wasn't supposed to land it
git-svn-id: svn://10.0.0.236/trunk@50127 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-07 20:46:50 +00:00
kipp%netscape.com
3b5f2c1e21 r=kin; Added in ctor/dtor counts
git-svn-id: svn://10.0.0.236/trunk@50126 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-07 20:45:56 +00:00
rogerl%netscape.com
e143bf497c Fixed build failures - these files are NOT part of the seamonkey build.
git-svn-id: svn://10.0.0.236/trunk@50125 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-07 20:45:27 +00:00
rogerl%netscape.com
750861810b Fixed error reporting to not smack the source line with a zero, but use
copyN instead - things were failing when very last line of input had an
error and didn't end with '\n'. r=mccabe


git-svn-id: svn://10.0.0.236/trunk@50124 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-07 20:44:40 +00:00
dcone%netscape.com
c0cc4a7df7 Took out a pure virtual function CreateRenderingContext() that was declared in the interface
git-svn-id: svn://10.0.0.236/trunk@50123 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-07 20:43:03 +00:00
rogerl%netscape.com
df73818e4c Fixed build warnings by removing macros with '{..}'.
Made str_escape available for jsfile.
r=mccabe


git-svn-id: svn://10.0.0.236/trunk@50122 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-07 20:42:20 +00:00
rogerl%netscape.com
7ba994995c Making str_escape available for jsfile use. r=mccabe.
git-svn-id: svn://10.0.0.236/trunk@50121 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-07 20:41:15 +00:00
rogerl%netscape.com
cfd4889e52 Bug #12168. Catch new Array(NaN). r=mccabe.
git-svn-id: svn://10.0.0.236/trunk@50120 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-07 20:40:17 +00:00
dcone%netscape.com
09be733a85 Fixed some warnings
git-svn-id: svn://10.0.0.236/trunk@50119 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-07 20:40:00 +00:00
troy%netscape.com
70a3da2b30 Space reductions, r=karnaze@netscape.com
Eliminated one data member, moved one to flag frame state, and changed mBorderEdges
to be heap allocated (only for collapsing border model)


git-svn-id: svn://10.0.0.236/trunk@50117 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-07 20:38:50 +00:00
alecf%netscape.com
3f1f724756 add myself to fix DLLs
git-svn-id: svn://10.0.0.236/trunk@50116 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-07 20:15:58 +00:00
waterson%netscape.com
76ea87ea04 Bug 15683. Hack to get the tree open. Don't SetParent(nsnull), <option> elements do funky stuff when the <option> is inside a <xul:template>. r=kmcclusk
git-svn-id: svn://10.0.0.236/trunk@50114 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-07 19:32:39 +00:00
norris%netscape.com
9754a010ca Fix 15711 Can't call java.lang.Class methods from JS
git-svn-id: svn://10.0.0.236/trunk@50112 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-07 18:27:21 +00:00
norris%netscape.com
5ca75e8020 Subject:
Re: NPL vs. MPL
       Date:
            Wed, 06 Oct 1999 18:30:34 -0400
      From:
            "Ian D. Stewart" <idstewart@softhome.net>
        To:
            Norris Boyd <norris@netscape.com>
 References:
            1 , 2 , 3




Norris Boyd wrote:

  Great. So I'd like to change this copyright text

  /* -*- Mode: java; tab-width: 8; indent-tabs-mode: nil; c-basic-offset:
  4 -*-
   *
   * The contents of this file are subject to the Mozilla Public License
   * Version 1.0 (the "MozPL"); you may not use this file except in
   * compliance with the MozPL.  You may obtain a copy of the MozPL at
   * http://www.mozilla.org/NPL/
   *
   * Software distributed under the MozPL is distributed on an "AS IS"
  basis,
   * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the
  MozPL
   * for the specific language governing rights and limitations under the
   * MozPL.
   *
   * The Initial Developer of this code under the MozPL is Ian D. Stewart.

   * Portions created by Ian D. Stewart are Copyright (C) 1998, 1999
   * Ian D. Stewart.
   * All Rights Reserved.
   */

  to this:

  /* -*- Mode: java; tab-width: 8; indent-tabs-mode: nil; c-basic-offset:
  4 -*-
   *
   * The contents of this file are subject to the Netscape Public
   * License Version 1.1 (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.mozilla.org/NPL/
   *
   * Software distributed under the License is distributed on an "AS
   * IS" basis, WITHOUT WARRANTY OF ANY KIND, either express oqr
   * implied. See the License for the specific language governing
   * rights and limitations under the License.
   *
   * The Original Code is ListenerCollection, released
   * May 15, 1998.
   *
   * The Initial Developer of the Original Code is Ian D. Stewart.
   * Portions created by Ian D. Stewart are Copyright (C) 1998, 1999
   * Ian D. Stewart.
   * Rights Reserved.
   *
   * Contributor(s):
   * Ian D. Stewart
   *
   * Alternatively, the contents of this file may be used under the
   * terms of the GNU Public License (the "GPL"), in which case the
   * provisions of the GPL are applicable instead of those above.
   * If you wish to allow use of your version of this file only
   * under the terms of the GPL and not to allow others to use your
   * version of this file under the NPL, indicate your decision by
   * deleting the provisions above and replace them with the notice
   * and other provisions required by the GPL.  If you do not delete
   * the provisions above, a recipient may use your version of this
   * file under either the NPL or the GPL.
   */

  Can you give me your approval for this change?

Make it so.


Ian


git-svn-id: svn://10.0.0.236/trunk@50111 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-07 16:57:01 +00:00
dcone%netscape.com
75b915c855 Turned on the background tiling optimization.. Reviewed By rods
git-svn-id: svn://10.0.0.236/trunk@50110 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-07 14:57:32 +00:00
bienvenu%netscape.com
82ee650dbf try not to leak all environments r=davidmc
git-svn-id: svn://10.0.0.236/trunk@50109 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-07 14:45:26 +00:00
bienvenu%netscape.com
879bafb0b6 try not to leak all factories r=davidmc
git-svn-id: svn://10.0.0.236/trunk@50108 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-07 14:43:44 +00:00
bienvenu%netscape.com
fd723643f2 fix mork factory r=mscott 12326, also fix some memory leaks
git-svn-id: svn://10.0.0.236/trunk@50107 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-07 14:30:44 +00:00
bienvenu%netscape.com
5dbbb4bb89 fix mork factory r=mscott 12326, fix ref count logging
git-svn-id: svn://10.0.0.236/trunk@50106 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-07 14:29:45 +00:00
bienvenu%netscape.com
28bab47569 fix mork factory r=mscott 12326
git-svn-id: svn://10.0.0.236/trunk@50104 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-07 14:28:54 +00:00
bienvenu%netscape.com
391cdf28f4 fix mork factory r=waterson 12326
git-svn-id: svn://10.0.0.236/trunk@50103 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-07 14:27:50 +00:00
jefft%netscape.com
a2221d154c fixed bug 10801 -- [Featuure] Save Messages, bug 14794 - message sent from unsent folder display as raw message; we need to pay attention to where we want to save the message as template, if the message goes to the local mail folder we have to add the dummy envelope header plus the x mozilla status lines; when sending unsent messages we need to set from/sender information to pass the sanity check at the send time; reviewed by rhp
git-svn-id: svn://10.0.0.236/trunk@50102 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-07 14:27:11 +00:00
bienvenu%netscape.com
571b348058 use nsIModule for Mork r=mscott no bug
git-svn-id: svn://10.0.0.236/trunk@50101 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-07 14:26:15 +00:00
rods%netscape.com
af37c61c55 removed unused result to remove warning r=pinkerton
git-svn-id: svn://10.0.0.236/trunk@50100 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-07 13:47:43 +00:00
waterson%netscape.com
f958803974 Bug 13910. Make sure to update element map for XUL (as well as HTML) elements when changing 'id' or 'ref' attributes.
git-svn-id: svn://10.0.0.236/trunk@50099 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-07 10:09:17 +00:00
waterson%netscape.com
4bac26a215 Bug 13910. Make sure to add elements to the map by 'ref' attribute, as well.
git-svn-id: svn://10.0.0.236/trunk@50098 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-07 10:08:14 +00:00
sspitzer%netscape.com
834be86386 more clean up for #15402. disable the rename, delete and start buttons
if no profile is selected, and enable them when a profile is selected.
turn dumps into alerts to tell the user why something failed.


git-svn-id: svn://10.0.0.236/trunk@50097 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-07 09:41:33 +00:00
sspitzer%netscape.com
01e635a3a6 last touches to finally get Cancel (from the Create Profile Wizard) and Exit
(from the Profile Manager) to work properly.


git-svn-id: svn://10.0.0.236/trunk@50096 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-07 09:15:25 +00:00
sspitzer%netscape.com
4d9fe202fe fix my comment
git-svn-id: svn://10.0.0.236/trunk@50095 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-07 09:12:27 +00:00
sspitzer%netscape.com
faac109667 minor cleanup of the profile js. #15402
git-svn-id: svn://10.0.0.236/trunk@50094 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-07 09:03:07 +00:00
sspitzer%netscape.com
7ef56b5288 minor tweak on the way to getting Cancel / Exit to behave properly in the
Profile Manager UI.  they both set the current profile to "".


git-svn-id: svn://10.0.0.236/trunk@50093 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-07 09:01:23 +00:00
sspitzer%netscape.com
bde00ceef7 add documentation and fixes from Ben Goodger <rgoodger@ihug.co.nz>
also add the mozilla license.  r=sspitzer.


git-svn-id: svn://10.0.0.236/trunk@50092 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-07 08:47:16 +00:00
rickg%netscape.com
ac6276e5cd fixed leak using patch from beard; verified in purify. r=rgess; bug=15751
git-svn-id: svn://10.0.0.236/trunk@50090 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-07 07:22:57 +00:00
sspitzer%netscape.com
13d46b9f86 more fixes for #15402, general cleanup of the profile code. Close button is now Exit. remove GetSingleProfile(), use GetFirstProfile() instead. Add ForgetCurrentProfile() for use in getting cancel to work properly.
git-svn-id: svn://10.0.0.236/trunk@50089 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-07 06:57:38 +00:00
sspitzer%netscape.com
c0b38598d6 GetSingleProfile() is going away. use GetFirstProfile now.
git-svn-id: svn://10.0.0.236/trunk@50088 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-07 06:55:59 +00:00
sspitzer%netscape.com
c959c10bfc fix for #15735, r=waterson. fix the JS error by re-writing the C style
fancy logic.


git-svn-id: svn://10.0.0.236/trunk@50087 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-07 06:37:32 +00:00
warren%netscape.com
1e7a6bdb4d Fixed warnings.
git-svn-id: svn://10.0.0.236/trunk@50086 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-07 04:10:12 +00:00
neeti%netscape.com
7425479597 Converted to use nsIModule to prepare for memory leaks fixing. Bug# 14034. r=dveditz
git-svn-id: svn://10.0.0.236/trunk@50085 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-07 03:39:36 +00:00
rhp%netscape.com
9cdcbef4af Fixing a test program makefile. THIS IS NOT PART OF ANY BUILD!
git-svn-id: svn://10.0.0.236/trunk@50084 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-07 03:39:02 +00:00
rhp%netscape.com
9eb3c904c6 Fixing a test program. THIS IS NOT PART OF ANY BUILD!
git-svn-id: svn://10.0.0.236/trunk@50083 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-07 03:38:42 +00:00
sspitzer%netscape.com
94a677a8af fix for bug #15402. exit if we get past the profile manager without a current profile. this can happen.
git-svn-id: svn://10.0.0.236/trunk@50082 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-07 03:10:18 +00:00
beard%netscape.com
9d922a368f First Checked In.
git-svn-id: svn://10.0.0.236/trunk@50081 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-07 03:03:36 +00:00
morse%netscape.com
1424e84e14 fix bug 15721, cookies not persistent, r=jar nsAppRunner.cpp
git-svn-id: svn://10.0.0.236/trunk@50080 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-07 02:48:27 +00:00
ramiro%netscape.com
f2333c7dab Added mozilla/tools/leaky to SeaMonkeyCore. r=leaf.
git-svn-id: svn://10.0.0.236/trunk@50079 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-07 02:39:56 +00:00
beard%netscape.com
a57d0470d2 First Checked In.
git-svn-id: svn://10.0.0.236/trunk@50078 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-07 02:11:44 +00:00
varada%netscape.com
dc0146ae24 have made error dialog box systemmodal bug #15339
git-svn-id: svn://10.0.0.236/trunk@50077 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-07 02:07:23 +00:00
rjc%netscape.com
1978802be8 Add in CTOR/DTOR stuff for leak detection. Review: hyatt@netscape.com
git-svn-id: svn://10.0.0.236/trunk@50076 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-07 01:51:30 +00:00
kipp%netscape.com
51e85831e8 r=peterl; fixed a regression that I regrettably caused; had the test for success backwards
git-svn-id: svn://10.0.0.236/trunk@50075 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-07 01:44:16 +00:00
varada%netscape.com
0a87564964 %Root% is a global variable that contains the value of the current working directory - so we can use it in an inifile to resolve the relative root locations
git-svn-id: svn://10.0.0.236/trunk@50074 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-07 01:39:34 +00:00
harishd%netscape.com
946d742a4d In reference to bug # 12415
Added assertion ( per warrne's request ) to detect null char occasionally appearing in the input
stream provided by necko
R=pollmann


git-svn-id: svn://10.0.0.236/trunk@50073 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-07 01:30:56 +00:00
akkana%netscape.com
bc8b6d116e 13750,13753,14075,15293,13873,12551:
- Rewrite wrapping logic for plaintext output sink,
  and run all output through the wrapping/formatting Write method
  (which now has logic to determine when we should be wrapping).
- Handle blockquote type=cite mail quotes.
- Write several new regression tests for plaintext output bugs,
  and include those tests and their expected output into the
  automated output test.
r=sfraser,harishd


git-svn-id: svn://10.0.0.236/trunk@50072 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-07 01:10:32 +00:00
mcafee%netscape.com
0a81ee7839 Cleaning up whitespace so I can edit this file with a clue.
git-svn-id: svn://10.0.0.236/trunk@50071 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-07 01:07:41 +00:00
slamm%netscape.com
52995d7ec4 Remove call to sidebarOverlayInit(). This is already called in sidebarOverlay.js when sidebarOverlay.xul loads. Fixes bug #15719, 'Sidebar panels get added twice'. r=waterson.
git-svn-id: svn://10.0.0.236/trunk@50070 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-07 01:03:19 +00:00
sspitzer%netscape.com
deecdfd350 add an alert if there is no profile name. bug #15402
git-svn-id: svn://10.0.0.236/trunk@50069 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-07 00:55:51 +00:00
kipp%netscape.com
5fc1175eb9 Fixed a memory leak in the sizeof-handler logic (blush)
git-svn-id: svn://10.0.0.236/trunk@50068 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-07 00:49:40 +00:00
harishd%netscape.com
b84b2685ff Mapping nsDTDMode to eParseMode (in mozilla/htmlparser/src/nsIDTD.h)
R=pollmann


git-svn-id: svn://10.0.0.236/trunk@50067 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-07 00:35:16 +00:00
kipp%netscape.com
99aaa55232 Updated SizeOf methods for html content objects to be more accurate; implemented MOZ_DECL_CTOR_COUNTER for all html content objects
git-svn-id: svn://10.0.0.236/trunk@50066 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-07 00:35:04 +00:00
kipp%netscape.com
4e6e50c103 Tweaked call of log_release
git-svn-id: svn://10.0.0.236/trunk@50065 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-07 00:32:25 +00:00
kipp%netscape.com
b17c92e839 Added some atoms to support SizeOf metrics
git-svn-id: svn://10.0.0.236/trunk@50064 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-07 00:31:41 +00:00
kipp%netscape.com
d5ce80751a Work around a crash by stubbing out some pointers that are weak links that are not to be used during shutdown
git-svn-id: svn://10.0.0.236/trunk@50063 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-07 00:31:21 +00:00
kipp%netscape.com
b87e5bb00d Don't forget to remove the observer when dtor is running (fixes a sometimes crash in viewer); also fixed a memory leak of a style context
git-svn-id: svn://10.0.0.236/trunk@50062 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-07 00:30:20 +00:00
kipp%netscape.com
a72c992c6f Eliminate a memory leak of a style context (which ends up leaking all the stylecontexts upward)
git-svn-id: svn://10.0.0.236/trunk@50061 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-07 00:29:28 +00:00
harishd%netscape.com
080879ab10 Bug 13647
In nsXIFConverter::BeginContainer(const nsString& aTag)
newline was getting appended by default at the end of a tag.
Setting the default value to PR_FALSE to avoid newline insertion
at the end of a tag.
R=akkana


git-svn-id: svn://10.0.0.236/trunk@50060 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-07 00:28:58 +00:00
kipp%netscape.com
78b500998c Eliminate a warning
git-svn-id: svn://10.0.0.236/trunk@50059 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-07 00:28:41 +00:00
sspitzer%netscape.com
7097d190f2 bulletproofing for bug #15728, r=alecf
if there are no panels, just return.


git-svn-id: svn://10.0.0.236/trunk@50058 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-07 00:28:24 +00:00
sspitzer%netscape.com
f49a6fc3a9 workaround fix for #15728. r=alecf. prevent crashing when I click on the tab in the create profile wizard.
git-svn-id: svn://10.0.0.236/trunk@50057 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-07 00:24:44 +00:00
varada%netscape.com
9299843cda change customization to configs directory in checklist.ini in some files
git-svn-id: svn://10.0.0.236/trunk@50056 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-07 00:15:35 +00:00
varada%netscape.com
0925de79f3 changed customizations directory to Configs in wizardmachine.cp as well as in the checklist.ini
git-svn-id: svn://10.0.0.236/trunk@50055 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-07 00:11:01 +00:00
rogerl%netscape.com
b1873070a7 More errors-as-exceptions stuff
git-svn-id: svn://10.0.0.236/trunk@50054 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-06 23:55:33 +00:00
mcafee%netscape.com
5b962a0f3c Adding option for modeless pref dialog, ifdef'd off by default. r=akkana
git-svn-id: svn://10.0.0.236/trunk@50053 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-06 23:54:47 +00:00
sgehani%netscape.com
6b11a987a4 *** NOT PART OF BUILD ***
DEBUG symbolic constant renamed to MIW_DEBUG.


git-svn-id: svn://10.0.0.236/trunk@50052 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-06 23:52:08 +00:00
sgehani%netscape.com
d016fe35cc *** NOT PART OF BUILD ***
DEBUG symbolic constant changed from DEBUG to MIW_DEBUG.


git-svn-id: svn://10.0.0.236/trunk@50051 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-06 23:51:14 +00:00
sgehani%netscape.com
be68b07064 *** NOT PART OF BUILD ***
Cleanup of inflation routines.


git-svn-id: svn://10.0.0.236/trunk@50050 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-06 23:50:10 +00:00
sgehani%netscape.com
c45dd4d212 *** NOT PART OF BUILD ***
Disable back button on welcome window preventing user from returning to the license window.


git-svn-id: svn://10.0.0.236/trunk@50049 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-06 23:49:16 +00:00
sgehani%netscape.com
3600061916 *** NOT PART OF BUILD ***
Disk space checking is now accurate for "Custom Install".


git-svn-id: svn://10.0.0.236/trunk@50048 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-06 23:48:09 +00:00
sgehani%netscape.com
f7d9ac0919 *** NOT PART OF BUILD ***
Detect and don't download pre-existing .xpi files. Fixes bug 15695.


git-svn-id: svn://10.0.0.236/trunk@50047 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-06 23:47:02 +00:00
sgehani%netscape.com
542eeddaf1 *** NOT PART OF BUILD ***
Mouse over component now highlights and updates long description: fixes bug 14322.


git-svn-id: svn://10.0.0.236/trunk@50046 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-06 23:45:49 +00:00
harishd%netscape.com
0b8b118754 Cleaned up warnings. R=rickg
git-svn-id: svn://10.0.0.236/trunk@50044 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-06 23:24:28 +00:00
sspitzer%netscape.com
4c88fb3ec4 whoops, checked in dos formatted text files from a unix box. ran dos2unix on them to fix it. part of fix for #15402. these new files come from Ben Goodger <rgoodger@ihug.co.nz> r=sspitzer
git-svn-id: svn://10.0.0.236/trunk@50042 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-06 23:19:53 +00:00
troy%netscape.com
75bf4aa54d b=11971, r=peterl@netscape,karnaze@netscape.com
Changed ContentInserted() to use GetFrameFor() so we target the table cell's
area frame


git-svn-id: svn://10.0.0.236/trunk@50041 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-06 23:17:28 +00:00
pavlov%netscape.com
88babc4d7b final step to make menus dismiss on unix r=hyatt
git-svn-id: svn://10.0.0.236/trunk@50040 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-06 23:00:53 +00:00
akkana%netscape.com
ada22baf14 15712: Fix gtk double-click events. r=pavlov
git-svn-id: svn://10.0.0.236/trunk@50039 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-06 22:57:00 +00:00
vidur%netscape.com
d46c14654b Added window.scrollBy/scrollTo/scrollX/scrollY. Scopus bug 361046. R=troy
git-svn-id: svn://10.0.0.236/trunk@50038 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-06 22:07:42 +00:00
sspitzer%netscape.com
578092310a remove references to xul.css, as it is no longer needed.
git-svn-id: svn://10.0.0.236/trunk@50037 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-06 22:07:29 +00:00
troy%netscape.com
032742ad4c Moved space manager to block frame and changed it the space manager is
temporary only during the reflow process
r=kipp@netscape.com


git-svn-id: svn://10.0.0.236/trunk@50036 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-06 22:05:23 +00:00
kmcclusk%netscape.com
7c76fd51f5 r=rods; bug=15478; Added WS_EX_TOOLWINDOW extended style for popup windows
to prevent popups from creating empty task bar buttons.
bug=6061; NS_DISPLAYCHANGE event is now generated when the display depth changes
on WIN32.


git-svn-id: svn://10.0.0.236/trunk@50035 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-06 21:54:49 +00:00
norris%netscape.com
48f3a0603c More license wrangling: fix the release date (1999, not 1998).
git-svn-id: svn://10.0.0.236/trunk@50031 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-06 21:52:17 +00:00
sspitzer%netscape.com
20945ad3ee remove unused code, now that CreateNewProfile() takes two arguments
git-svn-id: svn://10.0.0.236/trunk@50030 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-06 21:52:02 +00:00
rpotts%netscape.com
b286c0c010 Removed dead code inside of #if 0 blocks...
git-svn-id: svn://10.0.0.236/trunk@50026 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-06 21:43:21 +00:00
sspitzer%netscape.com
9c68bc61cc fix the create profile wizard ui.
this work was done by the almighty Ben Goodger <rgoodger@ihug.co.nz>
r=sspitzer
I did a little clean up, and made it so show the native file path


git-svn-id: svn://10.0.0.236/trunk@50025 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-06 21:36:59 +00:00
jband%netscape.com
cd534a023e - the rest of the fix for bug 14738 - detect JSErrors with
JSErrorReports when thrown as exceptions. Extract JSErrorReport
and convert to an xpcexception. This restores functionality that
was whacked when JS errors-as-exceptions was enabled in the JS
engine.
- add conversion support for string-with-length as part of array
support mentioned in bug 13420. All the array stuff is basically
in with minimal testcases. More comprehensive tests need to be
written to verify and tune the code.
- fix a broken #undef
- switch to using PR_Alloc/PR_Free internally in nsjsid where we
were using new/delete before. This is prompted by warren's change
to nsID::ToString that uses PR_Alloc were before it used new.
This fixes an alloc/delete mismatch detected by Purify.
r=mccabe


git-svn-id: svn://10.0.0.236/trunk@50024 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-06 21:35:27 +00:00
sspitzer%netscape.com
ac743ecce8 fix for #15197 (and a whole bunch of duplicates).
fix by vidur, r=rogerl


git-svn-id: svn://10.0.0.236/trunk@50023 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-06 21:31:34 +00:00
neeti%netscape.com
68ccc3d94a updating status. Not part of the build
git-svn-id: svn://10.0.0.236/trunk@50022 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-06 21:13:38 +00:00
norris%netscape.com
cedec739aa Fix another portion of 13192 Mozilla is "oversecured" and does not allow access to documents in the same domain
Reviewed by vidur.


git-svn-id: svn://10.0.0.236/trunk@50021 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-06 21:13:37 +00:00
norris%netscape.com
cd59845c25 Fix 15618 [CRASH] JS assertion on table regression test
Reviewed by rogerl@netscape.com.


git-svn-id: svn://10.0.0.236/trunk@50020 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-06 21:12:21 +00:00
waterson%netscape.com
84fb96cb65 Bug 13910. Fix flash panel style rules, XUL, and JS so that flashes start to display again. r=slamm.
git-svn-id: svn://10.0.0.236/trunk@50019 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-06 21:08:50 +00:00
neeti%netscape.com
6b2d99d685 updating status. Not part of the build
git-svn-id: svn://10.0.0.236/trunk@50018 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-06 21:07:30 +00:00
beard%netscape.com
e6c61c5ffe added EcmaError.java, NativeError.java
git-svn-id: svn://10.0.0.236/trunk@50017 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-06 21:07:04 +00:00
neeti%netscape.com
b84f7a78de updating status. Not part of the build
git-svn-id: svn://10.0.0.236/trunk@50016 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-06 21:05:25 +00:00
neeti%netscape.com
f6d3593b2e updating status. Not part of the build
git-svn-id: svn://10.0.0.236/trunk@50015 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-06 20:58:41 +00:00
sspitzer%netscape.com
d6ec571916 make sure we save the prefs when we exit. will fix a bunch of problems, including #15705. r=alecf, a=leaf
git-svn-id: svn://10.0.0.236/trunk@50014 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-06 20:52:50 +00:00
gagan%netscape.com
a378b87978 Partial checkins for fixing bug # 10333. Added the nsIStatusCodeEventSink for conveying status codes to the UI thread from the socket ones. r=mscott,a=don
git-svn-id: svn://10.0.0.236/trunk@50013 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-06 20:50:12 +00:00
norris%netscape.com
734f2fb55c Update contributors, add some license text.
git-svn-id: svn://10.0.0.236/trunk@50012 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-06 20:50:04 +00:00
cbegle%netscape.com
4cdb11b194 tests for javascript errors as exceptions, a feature that was recently
added to the javascript engine.

not part of the build.


git-svn-id: svn://10.0.0.236/trunk@50011 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-06 20:45:44 +00:00
gagan%netscape.com
7258a74fc0 added files: mozilla/netwerk/base/public/nsIStatusCodeEventSink.idl
git-svn-id: svn://10.0.0.236/trunk@50010 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-06 20:44:23 +00:00
terry%mozilla.org
944a16f933 Wow. Turns out this stuff would only handle 10 products. Did the
cheap fix that lets it handle 1000 products.


git-svn-id: svn://10.0.0.236/trunk@50009 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-06 20:37:37 +00:00
neeti%netscape.com
3b3d0e4e1b updating status. Not part of the build
git-svn-id: svn://10.0.0.236/trunk@50008 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-06 20:36:28 +00:00
vidur%netscape.com
f614c92aba Added document.width/document.height to nsIDOMNSDocument. Bug 961. R: troy
git-svn-id: svn://10.0.0.236/trunk@50007 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-06 20:33:58 +00:00
vidur%netscape.com
e16887dc96 Implemented document.width/document.height by looking at the dimensions of the view of the frame of the document element. Bug 961. R: troy
git-svn-id: svn://10.0.0.236/trunk@50006 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-06 20:32:49 +00:00
putterman%netscape.com
12980882c5 Added constructor/destructor counting macros for various mailnews
classes.  reviewed by bienvenu.  no bug.


git-svn-id: svn://10.0.0.236/trunk@50005 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-06 20:32:25 +00:00
buster%netscape.com
1e0b48570c fixed some space leaks reported by kipp. no bug #, r=tague
added some assertions and error checking to nsEditor::Do, no bug #, r=kin
fixed bug 14898 (implemented type-in state for any context), r=jfrancis


git-svn-id: svn://10.0.0.236/trunk@50004 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-06 20:27:41 +00:00
ramiro%netscape.com
3412f4f935 Take myself out of the "you suck" list. r=dp
git-svn-id: svn://10.0.0.236/trunk@50003 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-06 20:22:23 +00:00
mscott%netscape.com
9baa358bf2 No Bug #.......removing an obsolete file that isn't part of the build
r=valeski


git-svn-id: svn://10.0.0.236/trunk@50002 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-06 20:21:35 +00:00
bienvenu%netscape.com
9b0345f34f fix leak of accounts, mail session r=scottip bug 000
git-svn-id: svn://10.0.0.236/trunk@50000 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-06 20:00:27 +00:00
jfrancis%netscape.com
0209785bbb revised rules system api to include "handled" parameter and ceased to overload the meaning of the "cancel" parameter; added TypedText() method to editor, editorshell, and logging, so that logging will work properly with typing; coallesce deletions for undo purposes r=buster@netscape.com
git-svn-id: svn://10.0.0.236/trunk@49999 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-06 19:34:09 +00:00
srinivas%netscape.com
7ef083b590 Backed out previous checkin.
git-svn-id: svn://10.0.0.236/trunk@49996 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-06 19:33:52 +00:00
srinivas%netscape.com
97336400bc Previous change backed out.
git-svn-id: svn://10.0.0.236/trunk@49995 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-06 19:31:17 +00:00
srinivas%netscape.com
a633fa30b6 Backout previous change.
git-svn-id: svn://10.0.0.236/trunk@49994 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-06 19:30:01 +00:00
dmose%mozilla.org
52a561a9c0 removing obsolete doc file; a=leaf@mozilla.org
git-svn-id: svn://10.0.0.236/trunk@49993 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-06 19:17:56 +00:00
terry%mozilla.org
45c9c2b5a6 Missing some whitespace that may be vital.
git-svn-id: svn://10.0.0.236/trunk@49991 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-06 19:07:38 +00:00
srinivas%netscape.com
ea30288c1f Fixed bug in previous checkin - initialize variables before use.
git-svn-id: svn://10.0.0.236/trunk@49990 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-06 19:07:19 +00:00
harishd%netscape.com
77f9635cce Fix for Bugs
13640, 13736 - Memory leaks - R=rickg
1312 - Hooked up XHTML DOCTYPE - R=rickg
7590 - Prematuredly closing <SCRIPT> on seeing </SCRIPTERR>
2749 - Strict comment handling for noquirks mode - R=rickg
14955 - LEGEND inside FIELDSET was causing infinite looping - R=rickg,pollmann
14952 - LABEL got closed on seeing SPAN (LABEL can contain SPAN ) - R=pollmann
15381 - comment handling for XIF and HTML - R=akkana
15346 - Stray end tag caused loading blank document - R=rickg,pollmann


git-svn-id: svn://10.0.0.236/trunk@49988 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-06 19:04:29 +00:00
neeti%netscape.com
3963f45810 updating status
git-svn-id: svn://10.0.0.236/trunk@49987 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-06 19:01:51 +00:00
mgleeson1%netscape.com
210400fa8f r=waterson enums used in structs must be public members for HPUX
git-svn-id: svn://10.0.0.236/trunk@49986 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-06 18:56:03 +00:00
mgleeson1%netscape.com
9d0be77836 r=kipp removed unnecessary include for dlfcn.h
git-svn-id: svn://10.0.0.236/trunk@49985 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-06 18:53:41 +00:00
waterson%netscape.com
223352ad77 Comment out '_dead' renaming to get context menus working again. r=law
git-svn-id: svn://10.0.0.236/trunk@49984 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-06 18:53:32 +00:00
srinivas%netscape.com
852ba0f2aa Fixed typo in previous checkin. Also, the correct bug # is 15680.
git-svn-id: svn://10.0.0.236/trunk@49983 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-06 18:49:27 +00:00
rhp%netscape.com
58d7842b20 Changes for Bug #13512 - Reviewer: Bienvenu
git-svn-id: svn://10.0.0.236/trunk@49982 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-06 18:35:16 +00:00
srinivas%netscape.com
bf992aac1f Add the SO_BROADCAST option. Bug #365862.
git-svn-id: svn://10.0.0.236/trunk@49981 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-06 18:31:22 +00:00
bienvenu%netscape.com
ba3a9ad68c use nsIModule for factory, r=rhp bug 000
git-svn-id: svn://10.0.0.236/trunk@49980 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-06 18:30:35 +00:00
norris%netscape.com
522636a5de Make sure creation of class loader is inside a try block to handle security exceptions.
git-svn-id: svn://10.0.0.236/trunk@49979 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-06 17:39:48 +00:00
valeski%netscape.com
6f9ef9e6d4 r=warren, 15457. Added file extension attribute to URL implementations
git-svn-id: svn://10.0.0.236/trunk@49977 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-06 14:36:22 +00:00
pavlov%netscape.com
a1c9b6dcaa get CaptureRollupEvents working properly on unix. Fix focus problem that was being caused by grabbing the focus via SetFocus(). Fix potential crash in OnRealize(). fixes 15169, 15537, 15470 r=rods (for focus parts) r=blizzard@redhat.com (for all of it)
git-svn-id: svn://10.0.0.236/trunk@49974 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-06 14:04:05 +00:00
pavlov%netscape.com
743ccfad5b ifdef out the call to CaptureMouse since it is no longer needed r=rods
git-svn-id: svn://10.0.0.236/trunk@49973 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-06 13:36:39 +00:00
warren%netscape.com
055d89c0e3 Updating xpcom registry usage as per edburns@acm.org and dp's suggestions.
git-svn-id: svn://10.0.0.236/trunk@49972 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-06 09:57:50 +00:00
brendan%mozilla.org
3188df57a2 Fix Object.prototype.toSource so it parenthesizes outermost-toSource literals for eval roundtrips.
git-svn-id: svn://10.0.0.236/trunk@49971 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-06 09:09:31 +00:00
warren%netscape.com
bf35f71ce1 Fixed nsCOMPtr bustage.
git-svn-id: svn://10.0.0.236/trunk@49970 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-06 09:03:43 +00:00
warren%netscape.com
49e47e3066 Fixed build warnings.
git-svn-id: svn://10.0.0.236/trunk@49969 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-06 08:51:48 +00:00
warren%netscape.com
30cf63de80 Added AsyncOpen to nsIChannel for URL dispatching. Added ContentLength to InputStreamChannel. (r=rpotts,valeski)
git-svn-id: svn://10.0.0.236/trunk@49968 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-06 08:26:01 +00:00
dougt%netscape.com
3e9e75feec Fix for 11812. Reordered the clean up so that deletion of the "real" object
happens after NS_RELEASE of the proxy object.  This is a test program.

reviewed by gagan.


git-svn-id: svn://10.0.0.236/trunk@49967 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-06 08:17:04 +00:00
warren%netscape.com
ccc05991a3 added files: mozilla/netwerk/base/public/nsIFileSystem.idl
git-svn-id: svn://10.0.0.236/trunk@49966 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-06 08:16:48 +00:00
gagan%netscape.com
c39e2405d9 An event sink to transfer status codes to a consumer of necko.
This is not in the build as yet.


git-svn-id: svn://10.0.0.236/trunk@49965 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-06 07:49:32 +00:00
mcafee%netscape.com
478e94b19b Removing unnecessary label rule that was making prefs look like crap. Thanks to pavlov for this fix. r=pavlov,myself
git-svn-id: svn://10.0.0.236/trunk@49964 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-06 07:45:05 +00:00
warren%netscape.com
541b381b71 Added nsIFileSystem interface for new file transport implementation.
git-svn-id: svn://10.0.0.236/trunk@49963 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-06 07:27:22 +00:00
ftang%netscape.com
0851c72b83 fix bug 15647 r=sdagley. Swap progid base between ENCODER/DECODER
git-svn-id: svn://10.0.0.236/trunk@49962 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-06 07:11:40 +00:00
pavlov%netscape.com
644f5864a9 initial work on unix installer
git-svn-id: svn://10.0.0.236/trunk@49961 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-06 06:59:20 +00:00
waterson%netscape.com
c4175bcb0e Fix incorrect use of CBufDescriptor that was causing persistence to flake.
git-svn-id: svn://10.0.0.236/trunk@49960 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-06 06:42:27 +00:00
waterson%netscape.com
58cd4c0ef8 Suppress assertions with context menus for now.
git-svn-id: svn://10.0.0.236/trunk@49959 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-06 06:40:06 +00:00
brendan%mozilla.org
a17b679975 Top-level ToSource function for primitive type roundtrips.
git-svn-id: svn://10.0.0.236/trunk@49958 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-06 06:37:55 +00:00
brendan%mozilla.org
e8d09fd3a6 Fix two multi-threaded GC-rooting bugs:
- js_NewFunction wasn't initializing (clearing) JSFunction members before it
  linked the JSFunction to a JSObject that the GC could reach from a root.
- Make sure frame.scopeChain is cleared before linking frame via cx->fp, even
  though we set frame.scopeChain to some object later (another signal that we
  should rework js_Invoke to inline it and otherwise optimize it).


git-svn-id: svn://10.0.0.236/trunk@49957 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-06 06:29:43 +00:00
mscott%netscape.com
ccf2994b95 (not part of the build!)
just add a new line to the end of the file....


git-svn-id: svn://10.0.0.236/trunk@49956 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-06 06:21:40 +00:00
mscott%netscape.com
7277b119b3 Bug #15655 --> new file for mime to use nsIModule. This is not part of the build and has not been reviewed yet. The review will happen
when I land all the rest of the changes related to converting mime to use nsIModule.


git-svn-id: svn://10.0.0.236/trunk@49955 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-06 06:00:40 +00:00
rpotts%netscape.com
c0d2a0e2f2 bug #15605. Reviewed by nisheeth. Check the return code from GoToAnchor(...) :-)
git-svn-id: svn://10.0.0.236/trunk@49954 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-06 05:15:13 +00:00
jefft%netscape.com
347134e10d fixed bug 15291 - Pop3 local mail folder message lines not ended with platform specific line endings; replacing CRLF with platform specific MSG_LINEBREAK; reviewed by bienvenu, mscott
git-svn-id: svn://10.0.0.236/trunk@49953 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-06 04:56:02 +00:00
neeti%netscape.com
2eb2dcca67 updating status
git-svn-id: svn://10.0.0.236/trunk@49952 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-06 04:47:08 +00:00
bienvenu%netscape.com
9446096dca fix ref count tracing for composite data source bug 666 n/a r=waterson
git-svn-id: svn://10.0.0.236/trunk@49951 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-06 04:45:14 +00:00
neeti%netscape.com
7362f1b13f Converted wallet.dll and wlltvwrs.dll to use nsIModule to prepare for memory leaks fixing. Bug# 14034. r=morse
git-svn-id: svn://10.0.0.236/trunk@49950 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-06 04:42:59 +00:00
troy%netscape.com
148aeb9479 Space issue. r=kipp@netscape.com
Replaced hash table which used lots of memory with simple linked list of
FrameInfo* structs


git-svn-id: svn://10.0.0.236/trunk@49949 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-06 04:22:51 +00:00
karnaze%netscape.com
89bd8c3bc9 fixed assertion in viewer sample 4. AdjustForCollapsingCols was incorrectly counting as columns frames which were not of display type NS_STYLE_DISPLAY_TABLE_COLUMN and something must have changed elsewhere to tickle this.
git-svn-id: svn://10.0.0.236/trunk@49948 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-06 03:59:07 +00:00
ramiro%netscape.com
f3bc03de75 Im an idiot, i applied the same patch twice. Sorry. Backout my last change.
git-svn-id: svn://10.0.0.236/trunk@49947 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-06 03:38:49 +00:00
rjc%netscape.com
d69298a9d2 Fix broken XUL. Review: sdagley
git-svn-id: svn://10.0.0.236/trunk@49946 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-06 03:33:28 +00:00
mscott%netscape.com
417b06f591 Bug #000 (no bug needed). Remove nsIStreamConverter2.idl.
r=valeski


git-svn-id: svn://10.0.0.236/trunk@49945 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-06 03:27:55 +00:00
mscott%netscape.com
9fce7b0c15 Bug #0000 (no bug # needed) remove nsIStreamConverter2.idl
r=valeski


git-svn-id: svn://10.0.0.236/trunk@49944 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-06 03:27:15 +00:00
mscott%netscape.com
e7538bfe37 bug #000 (no bug # needed). removing obsolete file from the build
nsIStreamconverter2.idl
r=valeski


git-svn-id: svn://10.0.0.236/trunk@49943 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-06 03:21:44 +00:00
mscott%netscape.com
9c726938af Bug #000 (no bug number needed) remove an obsolete file from the build (nsIStreamConverter2.idl)
r=valeski


git-svn-id: svn://10.0.0.236/trunk@49942 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-06 03:20:39 +00:00
rjc%netscape.com
bed7f86409 Update leak docs. (Not part of build.)
git-svn-id: svn://10.0.0.236/trunk@49941 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-06 03:00:06 +00:00
valeski%netscape.com
7a33492452 r=sdagley, 15654 was deleting a void * which is a no-no on hp.
git-svn-id: svn://10.0.0.236/trunk@49940 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-06 02:54:49 +00:00
sfraser%netscape.com
08f88ab066 Fix the file creator code so that the library gets the nice pretty icon. r=sdagley
git-svn-id: svn://10.0.0.236/trunk@49939 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-06 02:38:35 +00:00
sdagley%netscape.com
9fc68e8c6c Add documentation comments for Mac library loading. r=sfraser
git-svn-id: svn://10.0.0.236/trunk@49937 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-06 02:37:14 +00:00
dmose%mozilla.org
a81253b229 new version of LICENSE; not part of the build
git-svn-id: svn://10.0.0.236/trunk@49936 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-06 02:14:51 +00:00
waterson%netscape.com
0d44d897c3 Fix leaking rowgroup frame. r=hyatt.
git-svn-id: svn://10.0.0.236/trunk@49935 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-06 01:50:14 +00:00
mgleeson1%netscape.com
8e1de98ab5 r=kipp changed illegal escape \{ to {
git-svn-id: svn://10.0.0.236/trunk@49934 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-06 01:41:38 +00:00
varada%netscape.com
011f173694 fix to bug #15327 adding MinLen field to the edit widget
git-svn-id: svn://10.0.0.236/trunk@49933 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-06 01:38:02 +00:00
rjc%netscape.com
2ffbb4f583 Bug #14034: Convert to nsIModule to prepare for memory leak fixing. Also fix leak of search stream listener. Review: sdagley@netscape.com
git-svn-id: svn://10.0.0.236/trunk@49932 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-06 01:37:47 +00:00
hangas%netscape.com
6563efab51 Porkjocky: .xul file troubleshooting. Removed duplicate references to css files within the same windows for performance. Wrapped another tree in a <div> to avoid scrolling issues. r=davidm
git-svn-id: svn://10.0.0.236/trunk@49931 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-06 01:35:36 +00:00
varada%netscape.com
c70061dbb3 Bug fix for #15327 - determination of length of edit fields
git-svn-id: svn://10.0.0.236/trunk@49930 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-06 01:32:00 +00:00
sfraser%netscape.com
a591a0e509 Fix access paths to not look for lib/xp. r=sdagley
git-svn-id: svn://10.0.0.236/trunk@49929 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-06 01:21:23 +00:00
sfraser%netscape.com
6dd1042b5d Don't export headers in lib/mac/MacMemoryAllocator any more. NSPR no longer needs the one that was being exported. r=sdagley
git-svn-id: svn://10.0.0.236/trunk@49928 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-06 01:20:44 +00:00
sfraser%netscape.com
b98dbfaa02 Fixed access paths to remove lib/xp, and mozilla/include. xp_regexp.h is now exported, and found in dist. r=sdagley
git-svn-id: svn://10.0.0.236/trunk@49927 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-06 01:19:58 +00:00
sfraser%netscape.com
3e38e2ea2a Export xp_regexp.h, for libjar. r=sdagley
git-svn-id: svn://10.0.0.236/trunk@49926 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-06 01:19:18 +00:00
sfraser%netscape.com
cb8f332910 Changed to export using the .exp file, to reduce link warnings. r=sdagley
git-svn-id: svn://10.0.0.236/trunk@49924 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-06 01:17:56 +00:00
sfraser%netscape.com
32644723fe First Checked In.
git-svn-id: svn://10.0.0.236/trunk@49923 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-06 01:17:19 +00:00
dp%netscape.com
25f4419ba0 updating status
git-svn-id: svn://10.0.0.236/trunk@49920 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-06 01:09:54 +00:00
sfraser%netscape.com
c4429f5066 Change Mac library loading to load using the FSSpec. r=dp
git-svn-id: svn://10.0.0.236/trunk@49919 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-06 01:09:13 +00:00
sdagley%netscape.com
15caf3db1c New calls to load code fragments by name or index, and utility routines for getting fragment names from the 'cfrg' resource. r=sfraser
git-svn-id: svn://10.0.0.236/trunk@49918 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-06 01:07:15 +00:00
sdagley%netscape.com
d89dab4e33 Added #define NSPR_AS_SHARED_LIB to avoid (never called) MacInitializeMemory. This is just tidy up. r=sfraser
git-svn-id: svn://10.0.0.236/trunk@49917 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-06 01:06:27 +00:00
sdagley%netscape.com
6e8fa75abe New implementations of PR_LoadNamedFragment and PR_LoadIndexedFragment, which now allow loading libraries by FSSpec. Mac only. r=sfraser
git-svn-id: svn://10.0.0.236/trunk@49916 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-06 01:05:33 +00:00
sdagley%netscape.com
b9147e6fd2 Added prlink_mac.h, r=sfraser
git-svn-id: svn://10.0.0.236/trunk@49915 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-06 01:04:06 +00:00
sdagley%netscape.com
35708ce998 Included some new header files, so that building with 'require function prototypes' works better. r=sfraser
git-svn-id: svn://10.0.0.236/trunk@49914 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-06 01:03:00 +00:00
waterson%netscape.com
d48f50c349 Fix dumb leak.
git-svn-id: svn://10.0.0.236/trunk@49913 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-06 01:02:11 +00:00
sdagley%netscape.com
190716d4ac First Checked In.
git-svn-id: svn://10.0.0.236/trunk@49912 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-06 01:00:58 +00:00
rogerl%netscape.com
74e6cc86a3 Added version 150, changed version testing in regexp
git-svn-id: svn://10.0.0.236/trunk@49911 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-06 00:10:27 +00:00
waqar%netscape.com
b576ab2cb5 # 9777
r vidur
d When splitText has an index error, it used to send NS_ERROR not it sends
  the proper DOM index size error.


git-svn-id: svn://10.0.0.236/trunk@49910 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-06 00:06:53 +00:00
tao%netscape.com
c9f9d5ee25 Add flags to selectively build subdirectories.
git-svn-id: svn://10.0.0.236/trunk@49909 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-06 00:03:37 +00:00
kipp%netscape.com
3a0fa24595 Cleanup special viewers too
git-svn-id: svn://10.0.0.236/trunk@49908 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-06 00:00:18 +00:00
kipp%netscape.com
be0faff780 Implement ShowContentSize; fixed a bug where we weren't removing the browser window as a doc-loader observer which sometimes triggers a crash when the -f argument to the viewer is used
git-svn-id: svn://10.0.0.236/trunk@49907 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-05 23:59:59 +00:00
cata%netscape.com
7b445faf02 added files: mozilla/intl/uconv/ucvtw2/nsUCvTw2Module.cpp, removed files: mozilla/intl/uconv/ucvtw2/nsUCvTW2Dll.cpp
git-svn-id: svn://10.0.0.236/trunk@49906 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-05 23:58:49 +00:00
morse%netscape.com
3f799e031d fix bug 15572, clean up build warnings, reviewed slamm
git-svn-id: svn://10.0.0.236/trunk@49905 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-05 23:58:45 +00:00
kipp%netscape.com
71408231d2 Tweaked refcnt munging to better support refcnt tracking
git-svn-id: svn://10.0.0.236/trunk@49904 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-05 23:58:32 +00:00
kipp%netscape.com
3a3369076f Fixed a memory leak of widgets triggered when the close box for a window is hit
git-svn-id: svn://10.0.0.236/trunk@49903 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-05 23:57:57 +00:00
cata%netscape.com
934632fc76 added files: mozilla/intl/uconv/ucvtw/nsUCvTwModule.cpp, removed files: mozilla/intl/uconv/ucvtw/nsUCvTWDll.cpp
git-svn-id: svn://10.0.0.236/trunk@49902 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-05 23:57:29 +00:00
kipp%netscape.com
bdf07b5f16 Work around a flaw in the doc-loader not handling a RemoveObserver call during an observer notification
git-svn-id: svn://10.0.0.236/trunk@49901 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-05 23:57:20 +00:00
morse%netscape.com
f082f7eb5e fix bug 15572, fix up build warnings, reviewed slamm
git-svn-id: svn://10.0.0.236/trunk@49900 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-05 23:56:59 +00:00
kipp%netscape.com
2f507e7b3c Improved printouts so that addref/release tracing always shows the old/new refcnts in decimal instead of old in decimal and new in hex
git-svn-id: svn://10.0.0.236/trunk@49899 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-05 23:56:33 +00:00
cata%netscape.com
b18dd56b44 added files: mozilla/intl/uconv/ucvlatin/nsUCvLatinModule.cpp, removed files: mozilla/intl/uconv/ucvlatin/nsUCvLatinDll.cpp
git-svn-id: svn://10.0.0.236/trunk@49898 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-05 23:56:08 +00:00
cata%netscape.com
bfa9612c50 Converting library to Module. Bug 15589. Reviewed by dp.
git-svn-id: svn://10.0.0.236/trunk@49897 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-05 23:54:18 +00:00
kipp%netscape.com
71a5f24ba3 Implemented suggested change so that leak info is printed if an env variable is used
git-svn-id: svn://10.0.0.236/trunk@49896 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-05 23:54:08 +00:00
cata%netscape.com
b8d939ca6e added files: mozilla/intl/uconv/ucvko/nsUCvKoModule.cpp, removed files: mozilla/intl/uconv/ucvko/nsUCvKODll.cpp
git-svn-id: svn://10.0.0.236/trunk@49895 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-05 23:53:21 +00:00
cata%netscape.com
28fb79fcef added files: mozilla/intl/uconv/ucvja/nsUCvJaModule.cpp, removed files: mozilla/intl/uconv/ucvja/nsUCVJADll.cpp
git-svn-id: svn://10.0.0.236/trunk@49894 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-05 23:51:46 +00:00
ducarroz%netscape.com
869cfacaf7 related to bug 14561, fix some other case where we didn't bring back errors while sending message. R=rhp
git-svn-id: svn://10.0.0.236/trunk@49893 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-05 23:48:40 +00:00
dmose%mozilla.org
79a8db9e5d updating NPL boilerplate to 1.1; only comments changed
git-svn-id: svn://10.0.0.236/trunk@49892 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-05 23:48:08 +00:00
kipp%netscape.com
53b538cfc8 Support SizeOf methods
git-svn-id: svn://10.0.0.236/trunk@49891 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-05 23:47:46 +00:00
hangas%netscape.com
efca1f8c77 Fix bug 13729 for putterman/hyatt. Tree headers not always displaying on Mac/Linux. Commented out optimization in Reflow(). r=hyatt.
git-svn-id: svn://10.0.0.236/trunk@49890 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-05 23:46:16 +00:00
mcafee%netscape.com
28e1dfd154 removing redundant xul: tags, minor whitespace stuff. r=slamm
git-svn-id: svn://10.0.0.236/trunk@49889 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-05 23:44:41 +00:00
pollmann%netscape.com
1c6394c2d0 Bug 15170: Implement onchange notification for list boxes
git-svn-id: svn://10.0.0.236/trunk@49888 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-05 23:43:06 +00:00
mcafee%netscape.com
4518901d71 xul: is redundant in xul files. r=slamm
git-svn-id: svn://10.0.0.236/trunk@49887 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-05 23:40:07 +00:00
rjc%netscape.com
31eba671e2 Bug # 14034: Convert to nsIModule to prepare for memory leak fixing. Review: dp@netscape.com
git-svn-id: svn://10.0.0.236/trunk@49886 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-05 23:39:48 +00:00
danm%netscape.com
08ffd64c70 Release XP menu rollup listener before menu is executed. This restores normal event handling earlier. Fixes bug 15596. r:hyatt
git-svn-id: svn://10.0.0.236/trunk@49884 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-05 23:31:06 +00:00
selmer%netscape.com
149b556a40 new fn definitions
git-svn-id: svn://10.0.0.236/trunk@49883 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-05 23:18:35 +00:00
selmer%netscape.com
12bc995595 Removed temporary 'NewConfig' fix in favor of real fix
git-svn-id: svn://10.0.0.236/trunk@49882 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-05 23:18:12 +00:00
selmer%netscape.com
ab205b541a Fix dialogs a little (more required) and fix handling of GlobalArrayIndex
git-svn-id: svn://10.0.0.236/trunk@49881 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-05 23:17:07 +00:00
selmer%netscape.com
b51d6a324e Updates to make all functions go through 'command' except generatelist and installbuilder (fix those later)
git-svn-id: svn://10.0.0.236/trunk@49880 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-05 23:15:49 +00:00
ramiro%netscape.com
f037c3b791 Fix for bug 15245. Rearrange the inclusion of system headers to unbreak
some unix compilers.  Patch provided by tor@cs.brown.edu and reviewed by me.


git-svn-id: svn://10.0.0.236/trunk@49879 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-05 23:08:19 +00:00
varada%netscape.com
040d9254e3 moving branding_page4.ini to the page before the installer page bug 11342
git-svn-id: svn://10.0.0.236/trunk@49878 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-05 22:57:18 +00:00
cata%netscape.com
230b7ea144 Fix my Unix breakage.
git-svn-id: svn://10.0.0.236/trunk@49877 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-05 22:33:09 +00:00
waterson%netscape.com
495ac5394c Fix crasher when loading XUL in viewer and no localstore is present.
git-svn-id: svn://10.0.0.236/trunk@49876 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-05 22:22:40 +00:00
rhp%netscape.com
3924a3e115 Fix for my screw up...sorry about this.
git-svn-id: svn://10.0.0.236/trunk@49875 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-05 22:15:43 +00:00
rogerl%netscape.com
ac914fc99e Bug #14545 - get array length exceptions working with non-Number array
contructor arguments.


git-svn-id: svn://10.0.0.236/trunk@49874 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-05 22:11:57 +00:00
waterson%netscape.com
33cab018e9 Bug 13910. Make sure we push the 'NC:description' attribute. r=dougt
git-svn-id: svn://10.0.0.236/trunk@49873 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-05 22:11:44 +00:00
morse%netscape.com
e03ce189b4 fix bug 14889, lazy initialization of wallet, r=sfraser
git-svn-id: svn://10.0.0.236/trunk@49872 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-05 22:11:22 +00:00
mscott%netscape.com
b605bcf7c8 Bug #15583 --> fix warning (unused variable)
r=sspitzer


git-svn-id: svn://10.0.0.236/trunk@49871 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-05 22:03:50 +00:00
sspitzer%netscape.com
2e1f51d842 fix for #15617. always save prefs after migration. not sure why prefs aren't being saved anymore, but this is a good idea. r=mscott
git-svn-id: svn://10.0.0.236/trunk@49870 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-05 22:02:58 +00:00
cata%netscape.com
e532cb3ce3 added files: mozilla/intl/uconv/ucvcn/nsUCvCnModule.cpp, removed files: mozilla/intl/uconv/ucvcn/nsUCvCnDll.cpp
git-svn-id: svn://10.0.0.236/trunk@49869 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-05 21:26:47 +00:00
cata%netscape.com
6278c9cdb6 Converting library to Module. Bug 15589. Reviewed by dp.
git-svn-id: svn://10.0.0.236/trunk@49868 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-05 21:25:47 +00:00
dougt%netscape.com
08e25e2af2 1) Adding an eventsinkgetter interface so that when 13894 become unblocked (when gagan
checks in his protocol messages)  we will automatically get onStatus and onProgress
notification.  reviewed by dveditz.


git-svn-id: svn://10.0.0.236/trunk@49867 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-05 21:18:48 +00:00
rhp%netscape.com
9230e0bd2b Fix for #14120 - Reviewer - bienvenu
git-svn-id: svn://10.0.0.236/trunk@49866 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-05 21:17:17 +00:00
dougt%netscape.com
f10ff94359 Change pref name
Added Preferences for software notification timer (see 14729) r. samir g.


git-svn-id: svn://10.0.0.236/trunk@49865 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-05 21:15:30 +00:00
dougt%netscape.com
699606d62a set software notification timer to once per week. 14729 R. sgehani
Update pref name


git-svn-id: svn://10.0.0.236/trunk@49864 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-05 21:14:13 +00:00
waterson%netscape.com
b4e6b84fea Bug 15301. Remove RDF graph from XUL content model construction. Landed XUL_19991005_BRANCH; see branch comments for detailed checkin information. r=shaver,hyatt.
git-svn-id: svn://10.0.0.236/trunk@49863 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-05 21:13:55 +00:00
jband%netscape.com
32816676db the JS engine part of the fix for bug 14738. This does two things: 1) expose the JSClass for JSError so that it is possible to detect from the outside if a given JSObject is of that JSError class, and 2) expose an api call via which the JSErrorReport can be extracted from a JSError (if present). This change required renaming the JSClass used for JSError, so many lines were touched
git-svn-id: svn://10.0.0.236/trunk@49861 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-05 21:07:23 +00:00
mscott%netscape.com
dfe61b8c0c Bug #0000 (no bug number necessary). remove old STREAM_CONVERTER_HACK #ifdef code because we no longer need this.
This was the hack we used before we had a stream converter service to load rfc822 data into a webshell and get it
converted to html.
r=warren


git-svn-id: svn://10.0.0.236/trunk@49856 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-05 20:54:03 +00:00
neeti%netscape.com
23d28fee69 Not part of the build. Took some more dlls for conversion to use nsImodule
git-svn-id: svn://10.0.0.236/trunk@49855 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-05 20:49:20 +00:00
sspitzer%netscape.com
185c444bad fix for #15610, alert on failure to rename or delete a profile. r=mscott
git-svn-id: svn://10.0.0.236/trunk@49854 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-05 20:49:09 +00:00
hangas%netscape.com
bb00d4e082 Fixing bug 13443 (crash scrolling results pane of address book), added <html:div> around the trees as per Hyatt's suggestion which Scottip reminded me of today. r=scottip
git-svn-id: svn://10.0.0.236/trunk@49853 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-05 20:49:08 +00:00
mscott%netscape.com
bc20c13bee Bug #14739 --> fix use of unitiailized variable.
r=sspitzer


git-svn-id: svn://10.0.0.236/trunk@49852 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-05 20:48:37 +00:00
sspitzer%netscape.com
0685d4013e remove work around for #15458. that bug has been fixed.
gayatrib and I both tested it.


git-svn-id: svn://10.0.0.236/trunk@49851 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-05 20:47:41 +00:00
varada%netscape.com
6c0dabbcc9 Validation for .nci in the entry field during creation of NCI files
git-svn-id: svn://10.0.0.236/trunk@49849 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-05 20:30:20 +00:00
rogerl%netscape.com
51378fb74f Errors as exceptions working from generated code.
git-svn-id: svn://10.0.0.236/trunk@49848 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-05 19:44:24 +00:00
sspitzer%netscape.com
ae215e19d6 fix for #15578, r=mscott, a=granrose, fix crash on startup.
not sure why we don't have a webshell here...


git-svn-id: svn://10.0.0.236/trunk@49846 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-05 18:13:15 +00:00
sspitzer%netscape.com
2aa4acab95 fix for #15578, r=mscott, a=granrose
properly migrate the bookmarks file on windows.


git-svn-id: svn://10.0.0.236/trunk@49845 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-05 18:10:20 +00:00
kipp%netscape.com
8626b336eb Added ctor/dtor counting to the parser tokens
git-svn-id: svn://10.0.0.236/trunk@49842 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-05 15:00:05 +00:00
kipp%netscape.com
feff21ed38 r=jband; fixed a memory leak
git-svn-id: svn://10.0.0.236/trunk@49841 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-05 14:56:41 +00:00
kipp%netscape.com
ebce0e90ac Renamed the ctor/dtor counting macros to make more sense
git-svn-id: svn://10.0.0.236/trunk@49840 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-05 14:54:05 +00:00
kipp%netscape.com
a87258a834 Added in ctor/dtor counting
git-svn-id: svn://10.0.0.236/trunk@49839 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-05 14:53:40 +00:00
kipp%netscape.com
bcb12509a4 r=dp; Added in ctor/dtor counting
git-svn-id: svn://10.0.0.236/trunk@49838 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-05 14:53:20 +00:00
kipp%netscape.com
54966bf91e r=beard; Added in ctor/dtor counting
git-svn-id: svn://10.0.0.236/trunk@49837 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-05 14:52:53 +00:00
kipp%netscape.com
011094c243 r=peterl; Added in ctor/dtor counting
git-svn-id: svn://10.0.0.236/trunk@49836 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-05 14:52:20 +00:00
jefft%netscape.com
dc5a959bfb fixed bug 15556 - treat forward quoted as inline; default to forward as attachment if get pref failed; reviewed rhp
git-svn-id: svn://10.0.0.236/trunk@49835 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-05 14:52:19 +00:00
kipp%netscape.com
8fdcb733f6 Removed static ctors
git-svn-id: svn://10.0.0.236/trunk@49834 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-05 14:51:56 +00:00
kipp%netscape.com
a4aa98059e r=troy; Added in ctor/dtor counting
git-svn-id: svn://10.0.0.236/trunk@49833 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-05 14:51:12 +00:00
kipp%netscape.com
beb412d2f0 r=troy; Added some atoms to help eliminate global ctors
git-svn-id: svn://10.0.0.236/trunk@49832 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-05 14:51:02 +00:00
kipp%netscape.com
cd7adcfa5b r=troy; Removed some of my own debug noise
git-svn-id: svn://10.0.0.236/trunk@49831 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-05 14:50:30 +00:00
kipp%netscape.com
ddfb13e8bd whitespace noise
git-svn-id: svn://10.0.0.236/trunk@49830 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-05 14:50:06 +00:00
kipp%netscape.com
6455b470d5 Whitespace tweak
git-svn-id: svn://10.0.0.236/trunk@49829 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-05 14:48:58 +00:00
kipp%netscape.com
2e0f295a75 Added in a way to shutdown the image manager
git-svn-id: svn://10.0.0.236/trunk@49828 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-05 14:48:44 +00:00
kipp%netscape.com
0fe83f199b Remove some compiler warnings
git-svn-id: svn://10.0.0.236/trunk@49827 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-05 14:48:01 +00:00
jefft%netscape.com
3bf966446e fixed bug 9540, 10827, 11991 - copy news article failed on certain platforms; replacing CRLF to platform specific MSG_LINEBREAK; reviewed by mscott
git-svn-id: svn://10.0.0.236/trunk@49823 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-05 14:20:15 +00:00
jefft%netscape.com
d280db659f fixed bug 9540, 10827, 11991 - copy news article failed on certain platforms; replacing CRLF to platform specific MSG_LINEBREAK; reviewed by mscott
git-svn-id: svn://10.0.0.236/trunk@49822 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-05 14:15:04 +00:00
rpotts%netscape.com
52fa2d449f Added a missing lock to nsSocketTransport::OnFull... reviewed by warren.
git-svn-id: svn://10.0.0.236/trunk@49820 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-05 08:41:37 +00:00
rpotts%netscape.com
bd2b8bbb50 bug #14181. Reviewed by pnunn. Fixed crash when loading large (or slow) animated GIF images on linux.
git-svn-id: svn://10.0.0.236/trunk@49819 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-05 08:36:43 +00:00
mscott%netscape.com
9540a1b2bb fix vc5.0 build......include nsISupportsArray before using a com ptr on it.
git-svn-id: svn://10.0.0.236/trunk@49818 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-05 06:56:12 +00:00
dp%netscape.com
a4303afba6 Fixed build bustage caused by undefined min()
git-svn-id: svn://10.0.0.236/trunk@49817 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-05 06:28:17 +00:00
mscott%netscape.com
3f98b22adb Bug #0000 --> (no bug necessary)....add a #ifdef guard around this header file
so we don't try to include the contents multiple times!!
r=sspitzer


git-svn-id: svn://10.0.0.236/trunk@49816 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-05 05:53:31 +00:00
rickg%netscape.com
3f9c7372e6 no changes made; just forcing a recompile
git-svn-id: svn://10.0.0.236/trunk@49815 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-05 05:52:12 +00:00
mscott%netscape.com
628723cd09 Bug #11837 use NS_GENERIC_FACTORY_CONSTRUCTOR, remove NS_New**
r=sspitzer


git-svn-id: svn://10.0.0.236/trunk@49813 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-05 05:46:20 +00:00
mscott%netscape.com
d84901b036 Bug #11837 use NS_GENERIC_FACTORY_CONSTRUCTOR for our components
the factory should cache nsIGenericFactory objects for each
component we know how to produce.
r=sspitzer


git-svn-id: svn://10.0.0.236/trunk@49812 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-05 05:45:07 +00:00
mscott%netscape.com
c12b68d3bc Bug #11837 --> in order to use NS_GENERIC_FACTORY_CONSTRUCTOR the
class declaration needs to be in the header file. Removing old NS_New*
method in favor of NS_GENERIC_FACTORY_CONSTRUCTOR.
r=sspitzer


git-svn-id: svn://10.0.0.236/trunk@49811 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-05 05:44:41 +00:00
sspitzer%netscape.com
7159500167 added files: mozilla/profile/src/nsProfileFactory.cpp
git-svn-id: svn://10.0.0.236/trunk@49810 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-05 05:20:58 +00:00
sspitzer%netscape.com
8c517b89c5 fix for #15262, r=mscott
break apart the profile factory from nsProfile.cpp and put it into nsProfileFactory.cpp
also, apply dp's patch to use nsIModule.  r=sspitzer


git-svn-id: svn://10.0.0.236/trunk@49809 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-05 05:20:45 +00:00
pavlov%netscape.com
489535b9e0 fix bugs in find dialog and make it use the dialog overlay. make it not resizeable, fixed style rules on the windows and buttons. r=sfraser
git-svn-id: svn://10.0.0.236/trunk@49808 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-05 05:20:29 +00:00
rjc%netscape.com
0899d7c171 Fix bug # 15435: prevent long ( > 255) URL corruption. Also convert over to a nsIModule. Review: dp@netscape.com
git-svn-id: svn://10.0.0.236/trunk@49807 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-05 05:11:09 +00:00
rpotts%netscape.com
2c951d67c1 Fixed up broken test case while investigating bug #14181...
git-svn-id: svn://10.0.0.236/trunk@49806 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-05 05:02:56 +00:00
rickg%netscape.com
685d8d596e fixed bug 15290; eliminated a leak; r=kmcclusk
git-svn-id: svn://10.0.0.236/trunk@49805 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-05 04:54:53 +00:00
radha%netscape.com
ac0f716288 Fix for bug #13329 . Back and forward not consistent all the time.
Fix already checked in to the M10 branch. Merging changes to tip.


git-svn-id: svn://10.0.0.236/trunk@49804 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-05 04:49:58 +00:00
rickg%netscape.com
4a9749eec3 bugs 13038 and 14920; also improved comments. r=kmcclusk
git-svn-id: svn://10.0.0.236/trunk@49803 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-05 04:47:19 +00:00
jband%netscape.com
37f1655b17 xpidl compiler was failing to complain that it is an error to use [shared] with 'inout' params. (no bug was filed) r=mccabe
git-svn-id: svn://10.0.0.236/trunk@49802 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-05 04:23:35 +00:00
karnaze%netscape.com
aa9be56cfa bug 14818 - made standard mode like NavQuirks when handling colspans exceeding the number of columns.
git-svn-id: svn://10.0.0.236/trunk@49801 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-05 04:21:00 +00:00
putterman%netscape.com
b4b00ba592 Fix bug 15479 - crash when mousing over folder pane scrollbar. Also, fix 12645 - assertion
when using folder pane scrollbar.  Also, make 3pane menu and toolbar look normal.  various
parts reviewed by hyatt and hangas.


git-svn-id: svn://10.0.0.236/trunk@49800 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-05 04:14:26 +00:00
sspitzer%netscape.com
41337e7380 a bunch of changes, all reviewed by mscott.
fix some bugs with next, back, and cancel in the profile manager.
(#15223, #15271)
re-write all callers of nsProfile::GetCurrentProfileDir() to use the file locator.
(#15063)
more profile code clean up. (#15042)
rename the old 4.x history.dat file.  it's called history.dat in 5.0, but the file
formats are different.  (binary in 4.x, vs mork in 5.0)


git-svn-id: svn://10.0.0.236/trunk@49797 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-05 04:12:58 +00:00
norris%netscape.com
3c9599e418 Fix 15458 "onLoadHandler does not work"
Reviewed by mstoltz.


git-svn-id: svn://10.0.0.236/trunk@49796 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-05 04:08:14 +00:00
rpotts%netscape.com
fa598b6cae bug #15341 and bug #15344. Use the documentloader observer instead of a stream observer.
git-svn-id: svn://10.0.0.236/trunk@49795 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-05 04:04:16 +00:00
sgehani%netscape.com
ff7384e823 Added Mac alias creation feature for install script writers using XPInstall: bugs 9363, 14345, 15503; r=ssu.
Fixed nsFileSpec<->nsInstall error translation in File operations exposed to install script writers: bug 15486; r=ssu.


git-svn-id: svn://10.0.0.236/trunk@49794 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-05 04:04:01 +00:00
tao%netscape.com
9c58478520 Add makefiles for Unix.
git-svn-id: svn://10.0.0.236/trunk@49793 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-05 03:55:45 +00:00
mccabe%netscape.com
1664bd1228 Initial checkin of TestScan.java, a simple driver for generating and printing various kinds of parse trees, and for profiling scanning, parsing and compiling.
git-svn-id: svn://10.0.0.236/trunk@49792 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-05 03:47:04 +00:00
alecf%netscape.com
455a608f47 add new findServer() method and javadoc comments
r=sspitzer
#15140


git-svn-id: svn://10.0.0.236/trunk@49791 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-05 03:29:42 +00:00
waterson%netscape.com
0db46fd24d Bug 15511. Make sure container element sets 'parent' backpointer to null before releasing child; prevents dangling references if child is still referenced from elsewhere. r=vidur
git-svn-id: svn://10.0.0.236/trunk@49790 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-05 03:20:57 +00:00
sfraser%netscape.com
2306c86ff9 Use CR for line termination on Macintosh, and don't call flush() for an endl. r dougt.
git-svn-id: svn://10.0.0.236/trunk@49788 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-05 03:00:13 +00:00
troy%netscape.com
9598e1278f Checked in workaround for tree-view/apprunner problem of assert in GetColumnWidth()
git-svn-id: svn://10.0.0.236/trunk@49787 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-05 02:41:36 +00:00
selmer%netscape.com
016eba860a Most of CopyDir ready
git-svn-id: svn://10.0.0.236/trunk@49786 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-05 02:22:36 +00:00
kipp%netscape.com
e62c5f3e87 backed out dps erroneous fix
git-svn-id: svn://10.0.0.236/trunk@49785 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-05 01:44:35 +00:00
kipp%netscape.com
8aa6b7aa38 Fixed build wastage
git-svn-id: svn://10.0.0.236/trunk@49784 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-05 01:43:34 +00:00
dmose%mozilla.org
de7b2e5e74 update license boilerplate to NPL dual w/GPL, r=norris@netscape,a=norris@netscape.com
git-svn-id: svn://10.0.0.236/trunk@49783 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-05 01:42:01 +00:00
shawnp%earthling.net
17b2b4cace To determine what gfx toolkit is being used at runtime, I added the
following functions to the nsIUnixToolkitService interface:
SetWidgetToolkitName(), SetGfxToolkitName(), IsValidWidgetToolkit(),
IsValidGfxToolkit(), GetWidgetToolkitName(), GetGfxToolkitName(). I also
added the implementation for these functions. Reviewed by
ramiro@netscape.com.


git-svn-id: svn://10.0.0.236/trunk@49782 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-05 01:35:21 +00:00
shawnp%earthling.net
0b401a86ba Improved info that is logged. Only bother to do something in OnPaint() if there
is a pixmap to copy from. Reviewed by ramiro@netscape.com.


git-svn-id: svn://10.0.0.236/trunk@49781 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-05 01:31:56 +00:00
shawnp%earthling.net
8fff423963 Implemented stub CaptureRollupEvents() and SetTitle() functions. Now handle
both Qt and Xlib gfx toolkits at runtime. Fixed a bug in SetCursor(). Can now
track cursor movement when no mouse button is pressed. Got rid of flickering
when repainting web pages. Reviewed by ramiro@netscape.com.


git-svn-id: svn://10.0.0.236/trunk@49780 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-05 01:31:18 +00:00
shawnp%earthling.net
4046113676 Now use separate PR_LOG module for scrolling. Stopped generation of double
scroll events. Reviewed by ramiro@netscape.com.


git-svn-id: svn://10.0.0.236/trunk@49779 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-05 01:30:23 +00:00
shawnp%earthling.net
f6d25e7c68 Added mouse enter/exit event. Added focus in/out event. Now use seperate PR_LOG
modules for events. Combined MousePressedEvent() and MouseReleasedEvent() into
MouseButtonEvent(). Reviewed by ramiro@netscape.com.


git-svn-id: svn://10.0.0.236/trunk@49778 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-05 01:29:07 +00:00
despotdaemon%netscape.com
90d52f24b4 Pseudo-automatic update of changes made by dmose@mozilla.org.
git-svn-id: svn://10.0.0.236/trunk@49777 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-05 01:28:52 +00:00
shawnp%earthling.net
14a4b48d16 Added constructor needed for integration with Xlib gfx toolkit. Reviewed by
ramiro@netscape.com.


git-svn-id: svn://10.0.0.236/trunk@49776 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-05 01:28:24 +00:00
shawnp%earthling.net
5475d74886 Implemented stub SetCheckboxType() and GetCheckboxType() functions.
Reviewed by ramiro@netscape.com.


git-svn-id: svn://10.0.0.236/trunk@49775 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-05 01:27:44 +00:00
shawnp%earthling.net
aa82528d79 Implemented stub GetEnabled() and IsHelpMenu() functions. Reviewed by
ramiro@netscape.com.


git-svn-id: svn://10.0.0.236/trunk@49774 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-05 01:26:39 +00:00
kipp%netscape.com
2359272160 Disabled leak cleanup until other reviews come in
git-svn-id: svn://10.0.0.236/trunk@49773 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-05 01:26:14 +00:00
dp%netscape.com
1d765d463d Fixing build bustage.
git-svn-id: svn://10.0.0.236/trunk@49772 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-05 01:25:55 +00:00
shawnp%earthling.net
fc4c559faa Updated to better match values used by the gtk widget toolkit (assuming
those are more correct values). Reviewed by ramiro@netscape.com.


git-svn-id: svn://10.0.0.236/trunk@49771 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-05 01:24:46 +00:00
shawnp%earthling.net
af2c5a6328 Added a static function to determine at runtime what gfx toolkit is being
used. Reviewed by ramiro@netscape.com.


git-svn-id: svn://10.0.0.236/trunk@49770 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-05 01:23:47 +00:00
shawnp%earthling.net
66f0536716 Now link in libxlibgrb.so when building libwidgetqt.so so that Qt can work
with the Xlib gfx toolkit. Reviewed by ramiro@netscape.com.


git-svn-id: svn://10.0.0.236/trunk@49769 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-05 01:22:48 +00:00
shawnp%earthling.net
cdbe7612ce Added missing entries to the menus. Added key accessors for menu items that
were missing them. Reviewed by ramiro@netscape.com.


git-svn-id: svn://10.0.0.236/trunk@49768 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-05 01:21:29 +00:00
jband%netscape.com
0afa0bedfe NOT PART OF BUILD updating status page
git-svn-id: svn://10.0.0.236/trunk@49767 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-05 00:53:26 +00:00
dmose%mozilla.org
239d60872d update license boilerplate to NPL dual w/GPL, r=norris@netscape,a=norris@netscape.com
git-svn-id: svn://10.0.0.236/trunk@49766 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-05 00:44:05 +00:00
kipp%netscape.com
74b117887f Found another type of symbol that indicates the presence of a static ctor
git-svn-id: svn://10.0.0.236/trunk@49765 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-05 00:39:48 +00:00
troy%netscape.com
eb8deb8c1b Removed unused data member
git-svn-id: svn://10.0.0.236/trunk@49764 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-05 00:32:07 +00:00
kipp%netscape.com
f0a6db6e3e r=ramiro; fix uninitialized refcnt bug that triggers an assertion when you're lucky
git-svn-id: svn://10.0.0.236/trunk@49763 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-05 00:31:55 +00:00
briano%netscape.com
1192ec6846 Automated update
git-svn-id: svn://10.0.0.236/trunk@49762 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-05 00:31:43 +00:00
alecf%netscape.com
d721125978 add detection for broken mmap()/write() behavior
contributed by jim_nance@yahoo.com
r=alecf


git-svn-id: svn://10.0.0.236/trunk@49761 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-05 00:29:09 +00:00
rogerl%netscape.com
4c19332cbb First cut at errors as exceptions - These changes should be benign since
the errors are being wrapped by runtime exceptions and still need to be
explicitly caught (this is happening in the interpreter, but not in
generated code).


git-svn-id: svn://10.0.0.236/trunk@49760 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-05 00:21:07 +00:00
waterson%netscape.com
4fa6ebaa6d Bug 15460. Expose XML element creation via nsIXMLElementFactory interface. r=kipp.
git-svn-id: svn://10.0.0.236/trunk@49759 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-05 00:12:21 +00:00
kipp%netscape.com
c9603305c7 r=dp; more leak tracking hooks added
git-svn-id: svn://10.0.0.236/trunk@49758 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-05 00:08:41 +00:00
waterson%netscape.com
9145c77cc4 Bug 15367. Dump 'class' instead of 'file/line' for NS_LOG_REFCNT. r=shaver,dp
git-svn-id: svn://10.0.0.236/trunk@49757 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-05 00:07:54 +00:00
kipp%netscape.com
eaaefb2093 r=dp; cleanup xpcom library too during shutdown to reduce global leaks
git-svn-id: svn://10.0.0.236/trunk@49756 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-05 00:07:39 +00:00
kipp%netscape.com
59997b00eb r=vidur; fixed a memory of a script content object
git-svn-id: svn://10.0.0.236/trunk@49755 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-05 00:05:38 +00:00
rhp%netscape.com
55b9838dc4 Fixes for bug #15363 and #14675 - reviewer bienvenu
git-svn-id: svn://10.0.0.236/trunk@49754 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-05 00:03:20 +00:00
kipp%netscape.com
81d2477caa r=troy; missed checkin from last weeks module carpool
git-svn-id: svn://10.0.0.236/trunk@49753 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-04 23:56:57 +00:00
alecf%netscape.com
40b89da05b exorcism of net.h from IMAP
r=mscott


git-svn-id: svn://10.0.0.236/trunk@49752 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-04 23:53:56 +00:00
alecf%netscape.com
0ce90ca711 Combined checkin:
- convert Compose enums to IDL #13261
- exorcise net.h from compose and mime
r=ducarroz and rhp on both


git-svn-id: svn://10.0.0.236/trunk@49751 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-04 23:50:56 +00:00
nhotta%netscape.com
c34375d22a Bug fix 15017, reviewed by akkana. Override SetDocumentCharacterSet for HTMLEditor to update META charset tag if exists.
git-svn-id: svn://10.0.0.236/trunk@49750 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-04 23:50:27 +00:00
kipp%netscape.com
d2eaa239f7 r=ramiro; fixed memory leak of a font-metrics object; also added in ctor/dtor counting for leak debugging
git-svn-id: svn://10.0.0.236/trunk@49749 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-04 23:48:55 +00:00
troy%netscape.com
4f1bf46f5d Space optimization for nsTableFrame. r=karnaze@netscape.com
- changed mBorderEdges to be heap allocated (only needed for collapsing border model)
- made the 8 boolean data members into bitfields
- changed mColumnWidths to be as small as necessary instead of defaulting its size to 100 elements


git-svn-id: svn://10.0.0.236/trunk@49748 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-04 23:48:05 +00:00
troy%netscape.com
7eedfae1ee Made sure mOutsideEdge is initizlied
git-svn-id: svn://10.0.0.236/trunk@49747 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-04 23:44:44 +00:00
ducarroz%netscape.com
03b778a6f7 Fix for bug 14561, Already checked in the M10 BRANCH. Error must have negative value. A=choffman, R=mscott
git-svn-id: svn://10.0.0.236/trunk@49746 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-04 23:43:57 +00:00
troy%netscape.com
6311b52e3d Performance optimizations. r=kmcclusk@netscape.com
I made the commonly accessed stock objects global, and I optimized the
SetupSolidPen() code


git-svn-id: svn://10.0.0.236/trunk@49745 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-04 23:42:28 +00:00
kipp%netscape.com
a3570edb7f r=dp; tidy up exit logic to release more global junk (space team work)
git-svn-id: svn://10.0.0.236/trunk@49744 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-04 23:41:53 +00:00
kipp%netscape.com
9246660bae r=dp,vidur,beard; close up some memory leaks related to shutdown of the viewer
git-svn-id: svn://10.0.0.236/trunk@49743 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-04 23:41:25 +00:00
kipp%netscape.com
db15162105 r=dp; implement some macros to help track memory leaks
git-svn-id: svn://10.0.0.236/trunk@49742 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-04 23:36:18 +00:00
kipp%netscape.com
af9cdee1dc r=brendan; applied changes recommended by brendan
git-svn-id: svn://10.0.0.236/trunk@49741 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-04 23:35:51 +00:00
peterl%netscape.com
50c6f531fe fixed leak of undisplayed content map nodes (which leak style contexts)
r=kipp


git-svn-id: svn://10.0.0.236/trunk@49740 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-04 23:33:23 +00:00
valeski%netscape.com
3b535ab2ef NOT part of the build.
git-svn-id: svn://10.0.0.236/trunk@49739 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-04 23:13:11 +00:00
valeski%netscape.com
3e9e763bae NOT part of the build.
git-svn-id: svn://10.0.0.236/trunk@49738 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-04 23:12:02 +00:00
norris%netscape.com
288c2fdcfb Fix up makefiles; previous patch was mis-applied.
git-svn-id: svn://10.0.0.236/trunk@49733 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-04 21:31:21 +00:00
morse%netscape.com
66a3fad9de oops -- I carelessly left out a carriage return in my last checkin
git-svn-id: svn://10.0.0.236/trunk@49732 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-04 21:07:01 +00:00
morse%netscape.com
6558fcffeb fix profile-manager bustage in todays build, checked in by request of leaf
git-svn-id: svn://10.0.0.236/trunk@49731 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-04 20:59:16 +00:00
kipp%netscape.com
ef2c286317 Fixed uninitialized members in the TreeNode struct
git-svn-id: svn://10.0.0.236/trunk@49729 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-04 20:25:53 +00:00
norris%netscape.com
19a71ea13f Fix bug found by Andrew Wason (see below).
Problem was that one transformation of a node to GETVAR wasn't protected by a check of inWithStatement().

======================================
Subject:
        multiple scopes
   Date:
        Fri, 01 Oct 1999 12:39:14 -0400
   From:
        Andrew Wason <aw@softcom.com>
     To:
        norris@netscape.com
    CC:
        Howard Lin <howard@softcom.com>




When I create two scopes, and one scope evaulates a string in the other
scope, it works.  However, if I do this while handling an exception thrown
within a JavaAdapter method, it fails with an exception.

Run the attached Java program with the two script files.  scope1.js
evaluates a string "printMessage" in the scope of scope2.js.  This returns
a function object which is then invoked.  This works in 3 cases, but fails
in the 4th (in the catch in the JavaAdapter).  Even in the 4th case where
it fails, printing the function object looks normal.

Am I doing something wrong, or is there a bug here?

java CrossScope scope1.js scope2.js

Outside of JavaAdapter
works before exception
works after exception
Inside of JavaAdapter
works before exception
Caught exception
pma=
function printMessage(msg) {
     java.lang.System.out.println(msg);
}

Exception in thread "main" org.mozilla.javascript.JavaScriptException:
org.mozilla.javascript.EvaluatorException: The undefined value has no
properties.
         at
org.mozilla.javascript.JavaScriptException.wrapException(JavaScriptException
.java:61)
         at
org.mozilla.javascript.NativeJavaMethod.call(NativeJavaMethod.java,
Compiled Code)
         at org.mozilla.javascript.ScriptRuntime.call(ScriptRuntime.java:1256)
         at org.mozilla.javascript.Interpreter.interpret(Interpreter.java,
Compiled Code)
         at
org.mozilla.javascript.InterpretedScript.call(InterpretedScript.java:49)
         at
org.mozilla.javascript.InterpretedScript.exec(InterpretedScript.java:37)
         at org.mozilla.javascript.Context.evaluateReader(Context.java:697)
         at CrossScope.<init>(CrossScope.java:30)
         at CrossScope.main(CrossScope.java:10)


Thanks,
Andrew

import java.io.*;
import org.mozilla.javascript.*;

public class CrossScope {
	private Context m_jsContext;
	private Scriptable m_scope1;
	private Scriptable m_scope2;

	public static void main(String args[]) throws Exception {
		new CrossScope(args[0], args[1]);
	}

	private CrossScope(String strFile1, String strFile2) throws Exception {
		// Associate Context with main thread
		m_jsContext = Context.enter();
                m_jsContext.setOptimizationLevel(-1);

		// Init scope1, expose Scope object
  		m_scope1 = m_jsContext.initStandardObjects(new ImporterTopLevel());
		m_scope1.put("Scope", m_scope1, this);

		// Init scope2
		m_scope2 = m_jsContext.initStandardObjects(new ImporterTopLevel());

		// Run script in scope2
		Reader r2 = new FileReader(strFile2);
		m_jsContext.evaluateReader(m_scope2, r2, strFile2, 1, null);

		// Eval input JS in scope1 - it can in turn eval JS over in scope2
		Reader r1 = new FileReader(strFile1);
		Object obj = m_jsContext.evaluateReader(m_scope1, r1, strFile1, 1, null);
		if (obj instanceof Throwable)
			((Throwable)obj).printStackTrace();

		m_jsContext.exit();
	}

	public Object scope1Eval(String str) throws JavaScriptException {
			Context cx = Context.enter(m_jsContext);
			Object objResult = cx.evaluateString(m_scope1, str, "scope1EvalString", 1, null);
			cx.exit();
			return objResult;
	}

	public Object scope2Eval(String str) throws JavaScriptException {
			Context cx = Context.enter(m_jsContext);
			Object objResult = cx.evaluateString(m_scope2, str, "scope2EvalString", 1, null);
			cx.exit();
			return objResult;
	}
}


// Scope1

importPackage(java.lang);

System.out.println("Outside of JavaAdapter");

try {
	var pm = Scope.scope2Eval("printMessage");
	pm("works before exception");
	System.arraycopy(null, 5, null, 5, 100);
} catch (e) {
	var pma = Scope.scope2Eval("printMessage");
	pma("works after exception");
}

var obj = new Runnable() {
	run: function() {
		System.out.println("Inside of JavaAdapter");
		try {
			var pm = Scope.scope2Eval("printMessage");
			pm("works before exception");
			System.arraycopy(null, 5, null, 5, 100);
		} catch (e) {
			System.out.println("Caught exception");
			var pma = Scope.scope2Eval("printMessage");
			System.out.println("pma=" + pma);
			pma("works after exception");
		}
	}
};

obj.run();



// Scope2

function printMessage(msg) {
	java.lang.System.out.println(msg);
}


git-svn-id: svn://10.0.0.236/trunk@49726 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-04 18:27:30 +00:00
endico%mozilla.org
36e083362c make file searches case insentive
git-svn-id: svn://10.0.0.236/trunk@49725 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-04 18:11:27 +00:00
tao%netscape.com
d2b440e23a First checkin of da-DK files (from Henrik) into l10n/lang.
git-svn-id: svn://10.0.0.236/trunk@49724 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-04 18:01:19 +00:00
valeski%netscape.com
1c2b2f6390 adding keyword protocol handler to tree. this code is NOT in the build yet.
git-svn-id: svn://10.0.0.236/trunk@49722 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-04 16:34:45 +00:00
kipp%netscape.com
86725c9808 Added -R flag and logic for managing refcnt dumping better
git-svn-id: svn://10.0.0.236/trunk@49721 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-04 16:32:03 +00:00
neeti%netscape.com
0cb4e10e77 cookie module conversion done
git-svn-id: svn://10.0.0.236/trunk@49720 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-04 14:34:54 +00:00
neeti%netscape.com
1c9d47ade0 *** empty log message ***
git-svn-id: svn://10.0.0.236/trunk@49719 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-04 14:08:52 +00:00
rods%netscape.com
ff1ff17b9d fixes bug #15265, changes reviewed by kmcclusk. Changes in the way it used the computed values
git-svn-id: svn://10.0.0.236/trunk@49718 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-04 13:49:00 +00:00
colin%theblakes.com
2eb916adb2 Don't link against xptinfo - its not needed. r=ramiro
git-svn-id: svn://10.0.0.236/trunk@49717 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-04 10:44:49 +00:00
colin%theblakes.com
41dd85d37f Make mkdepend lines shorter (OpenVMS only). r=ramiro
git-svn-id: svn://10.0.0.236/trunk@49716 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-04 10:43:28 +00:00
duncan%be.com
d0d0e41c47 Hack into compileable shape.
git-svn-id: svn://10.0.0.236/trunk@49715 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-04 08:52:17 +00:00
karnaze%netscape.com
c3e71c904f column allocation does fixed and adjusted fixed (colspans) in separate steps. Simplified AllocateConstrained. Fixed bug 14332.
git-svn-id: svn://10.0.0.236/trunk@49714 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-04 05:19:32 +00:00
ramiro%netscape.com
b6cc6b0ab0 Fix for xlib build bustage.
git-svn-id: svn://10.0.0.236/trunk@49713 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-04 04:49:45 +00:00
karnaze%netscape.com
399a1319c0 regression test changes
git-svn-id: svn://10.0.0.236/trunk@49712 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-04 04:48:13 +00:00
dp%netscape.com
77b37126c4 bug# 15433 Fixed call to NS_ADDREF() that would cause double
evaluation when MOZ_REFCNT is defined. Fixed checking for
OUT_OF_MEMORY condition. r=hyatt


git-svn-id: svn://10.0.0.236/trunk@49711 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-04 02:27:09 +00:00
leaf%mozilla.org
240237eba0 adding mozilla/gc/boehm to SeaMonkeyCore as per patrick beard's request
git-svn-id: svn://10.0.0.236/trunk@49710 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-04 01:17:58 +00:00
mscott%netscape.com
2e4127024c Bug #14680...migrating this bug from the M10 branch. make input and output stream for the converter pipe non-blocking.
r=ducarroz


git-svn-id: svn://10.0.0.236/trunk@49709 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-04 01:01:48 +00:00
mscott%netscape.com
322798e844 Bug #11837 --> rewrite the imap factory to use nsIModule. This meant adding appropriate factory methods to the components.
r=bienvenu


git-svn-id: svn://10.0.0.236/trunk@49708 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-04 00:29:18 +00:00
mscott%netscape.com
94f2a23952 Bug #11837 --> rewrite the imap factory to use nsIModule.
r=bienvenu


git-svn-id: svn://10.0.0.236/trunk@49707 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-04 00:27:42 +00:00
mscott%netscape.com
18a7fb8d42 Bug #15192 --> build the pab before the history ab for name completion.
r=bienvenu.


git-svn-id: svn://10.0.0.236/trunk@49706 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-04 00:26:10 +00:00
mscott%netscape.com
b36e29928a Bug #000...trivial fix so no bug # filed. Fix a leak of nsIURI by using nsCOMPtr.
r=bienvenu.


git-svn-id: svn://10.0.0.236/trunk@49705 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-04 00:25:12 +00:00
beard%netscape.com
9a1b140b6b First Checked In.
git-svn-id: svn://10.0.0.236/trunk@49702 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-03 23:28:33 +00:00
beard%netscape.com
90cd1e6284 File Removed.
git-svn-id: svn://10.0.0.236/trunk@49701 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-03 23:26:57 +00:00
beard%netscape.com
9f5a8b5090 breakage fixing, gc_stdout -> GC_stdout
git-svn-id: svn://10.0.0.236/trunk@49700 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-03 22:30:35 +00:00
sdagley%netscape.com
6c3f751156 changed from directly using "MSL ShLibRuntime.Lib" to using "NSLibraryStartup.o" to enable GC leak detector. r=beard
git-svn-id: svn://10.0.0.236/trunk@49699 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-03 22:04:08 +00:00
sdagley%netscape.com
e9dac37427 using __NSTerminate() rather than __terminate, for GC leak detector. r=beard
git-svn-id: svn://10.0.0.236/trunk@49698 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-03 22:04:07 +00:00
beard%netscape.com
bc66d4807f removed pulling of mozilla/gc/boehm, no longer building NStdLibGC target. r=smfr
git-svn-id: svn://10.0.0.236/trunk@49697 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-03 21:51:39 +00:00
beard%netscape.com
508a0c5b7d Added GC exports, so Stubs target will generate them.
git-svn-id: svn://10.0.0.236/trunk@49696 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-03 21:49:41 +00:00
beard%netscape.com
795fab8784 removed NSStdLibGC target, and .exp file. Moved exports to the one true NSStdLib.exp, so that Stubs target will see them. r=smfr
git-svn-id: svn://10.0.0.236/trunk@49695 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-03 21:48:57 +00:00
beard%netscape.com
3ecbfc5cdf added more GC stub functions, so that NSStdLib can export them. r=smfr
git-svn-id: svn://10.0.0.236/trunk@49694 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-03 21:47:11 +00:00
beard%netscape.com
f038869d64 fixed breakage, until mozilla/gc/boehm gets added to the default module.
git-svn-id: svn://10.0.0.236/trunk@49693 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-03 21:31:43 +00:00
beard%netscape.com
0c2f0d51f9 calling __NSInitialize/__NSTerminate to enable GC leak detector. r=smfr
git-svn-id: svn://10.0.0.236/trunk@49692 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-03 20:53:11 +00:00
beard%netscape.com
75c8c9cd12 changed from directly using "MSL ShLibRuntime.Lib" to using "NSLibraryStartup.o" to enable GC leak detector. r=smfr
git-svn-id: svn://10.0.0.236/trunk@49691 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-03 20:47:12 +00:00
beard%netscape.com
da97767078 changed from directly using "MSL DropInRuntime.Lib" to using "NSComponentStartup.o" to enable GC leak detector. r=smfr
git-svn-id: svn://10.0.0.236/trunk@49690 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-03 20:46:23 +00:00
beard%netscape.com
eaf44edde8 changed from directly using "MSL AppRuntime.Lib" to using "NSAppStartup.o" to enable GC leak detector. r=smfr
git-svn-id: svn://10.0.0.236/trunk@49689 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-03 20:43:01 +00:00
beard%netscape.com
ed2580f15a changed from directly using "MSL ShLibRuntime.Lib" to using "NSLibraryStartup.o" to enable GC leak detector. r=smfr
git-svn-id: svn://10.0.0.236/trunk@49688 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-03 20:37:53 +00:00
beard%netscape.com
cd941313ec changed from directly using "MSL ShLibRuntime.Lib" to using "NSLibraryStartup.o" to enable GC leak detector. r=smfr
git-svn-id: svn://10.0.0.236/trunk@49686 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-03 20:23:01 +00:00
beard%netscape.com
f25b9d367d changed from directly using "MSL DropInRuntime.Lib" to using "NSLibraryStartup.o" to enable GC leak detector. r=smfr
git-svn-id: svn://10.0.0.236/trunk@49685 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-03 20:13:50 +00:00
beard%netscape.com
da4024048d changed from directly using "MSL AppRuntime.Lib" to using "NSAppStartup.o" to enable GC leak detector. r=smfr
git-svn-id: svn://10.0.0.236/trunk@49684 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-03 20:11:44 +00:00
beard%netscape.com
a50c5f3df5 changed from directly using "MSL ShLibRuntime.Lib" to using "NSLibraryStartup.o" to enable GC leak detector. r=smfr
git-svn-id: svn://10.0.0.236/trunk@49683 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-03 20:08:40 +00:00
beard%netscape.com
4133a2fff5 added pulling of mozilla/gc/boehm, conditionally building gc.mcp if $GC_LEAK_DETECTOR is true, and building MemAllocator.mcp[MemAllocatorGC.o], NSStdLib.mcp[NSStdLibGC.shlb] if $GC_LEAK_DETECTOR is true. r=smfr
git-svn-id: svn://10.0.0.236/trunk@49682 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-03 20:06:10 +00:00
beard%netscape.com
50068fd6e0 Added $GC_LEAK_DETECTOR. r=smfr
git-svn-id: svn://10.0.0.236/trunk@49681 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-03 20:03:39 +00:00
beard%netscape.com
7835dfb07e added GC_LEAK_DETECTOR variable. r=smfr
git-svn-id: svn://10.0.0.236/trunk@49680 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-03 20:01:48 +00:00
tonyr%fbdesigns.com
86f12df7f4 Update progID's from component://netscape/* to component://mozilla/*
git-svn-id: svn://10.0.0.236/trunk@49679 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-03 18:02:22 +00:00
tonyr%fbdesigns.com
9895a33add Fix bustage caused by new account manager API's
git-svn-id: svn://10.0.0.236/trunk@49678 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-03 18:00:23 +00:00
tonyr%fbdesigns.com
90b1f42534 Update to use nsIModule
git-svn-id: svn://10.0.0.236/trunk@49677 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-03 17:59:09 +00:00
tonyr%fbdesigns.com
0534ba836d Updated to use nsIModule
git-svn-id: svn://10.0.0.236/trunk@49676 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-03 17:55:56 +00:00
mcafee%netscape.com
1193314ab4 Better variable names for readability.
git-svn-id: svn://10.0.0.236/trunk@49675 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-03 08:13:41 +00:00
mcafee%netscape.com
3c1923f753 Adding text to debug pref UI documenting how the debugPaintFlashing pref works with the caps-lock key. r=braddr@portland.puremagic.com
git-svn-id: svn://10.0.0.236/trunk@49674 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-03 06:56:43 +00:00
beard%netscape.com
e5cdcb3d9a Modernized to use NSComponentStartup.o. Not part of build.
git-svn-id: svn://10.0.0.236/trunk@49673 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-03 02:58:48 +00:00
beard%netscape.com
1917b8abfe added access path to find Sample.idl. Not part of build.
git-svn-id: svn://10.0.0.236/trunk@49672 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-03 02:58:20 +00:00
hyatt%netscape.com
9060bb7e6c Fixing apprunner startup bustage on mac. r=beard
git-svn-id: svn://10.0.0.236/trunk@49671 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-03 01:41:06 +00:00
beard%netscape.com
ac349d4f71 Now that mozilla/lib/mac/NSStartup has been added to the modules file, SeaMonkeyEditor, reenabled building NSStartup.mcp. Converted building JSLoader.mcp into Components, per shaver's permission. r=smfr
git-svn-id: svn://10.0.0.236/trunk@49670 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-03 00:37:19 +00:00
leaf%mozilla.org
ef523b7bc1 adding mozilla/lib/mac/NSStartup
git-svn-id: svn://10.0.0.236/trunk@49669 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-03 00:12:49 +00:00
rjc%netscape.com
b928008ea2 Fix problem with nsSecurityManagerFactory conversion to be a nsIModule. Patch from peterl@netscape.com. Review: me.
git-svn-id: svn://10.0.0.236/trunk@49668 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-02 20:19:23 +00:00
peterl%netscape.com
8d9a25274c Don't access undisplayed content map if it isn't there...
git-svn-id: svn://10.0.0.236/trunk@49667 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-02 19:45:18 +00:00
rjc%netscape.com
dc26a2c638 Temporarily turning off the changes to nsSecurityManagerFactory to make it a nsIModule due to problem at startup.
git-svn-id: svn://10.0.0.236/trunk@49666 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-02 19:24:05 +00:00
morse%netscape.com
7eed8aaa95 add some new concatenation rules
git-svn-id: svn://10.0.0.236/trunk@49665 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-02 16:36:53 +00:00
rbs%maths.uq.edu.au
7f3f2e7069 Adding remaining MathML hooks. r:peterl.
git-svn-id: svn://10.0.0.236/trunk@49664 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-02 11:05:49 +00:00
rbs%maths.uq.edu.au
5022c51b04 Adding remaining MathML hooks
git-svn-id: svn://10.0.0.236/trunk@49663 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-02 11:01:41 +00:00
rbs%maths.uq.edu.au
1b6a18b9e4 Adding remaining MathML hooks and changing ifdef INCLUDE_MATHML to ifdef MOZ_MATHML to avoid thinking autoconf-related. r:peterl
git-svn-id: svn://10.0.0.236/trunk@49662 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-02 10:41:40 +00:00
rbs%maths.uq.edu.au
d3baf5491f Change of the IID for the nsIMathMLFrame interface. The previous IID was taken while the MathML code was awaiting to land.
git-svn-id: svn://10.0.0.236/trunk@49661 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-02 09:14:57 +00:00
rbs%maths.uq.edu.au
ef0e29ec51 Taking an interface ID for the nsIMathMLFrame interface
git-svn-id: svn://10.0.0.236/trunk@49660 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-02 09:00:39 +00:00
rbs%maths.uq.edu.au
142225cef1 Adding relative path to external DTD
git-svn-id: svn://10.0.0.236/trunk@49659 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-02 06:53:41 +00:00
rbs%maths.uq.edu.au
1a870b97f1 Initializing a variable to zero
git-svn-id: svn://10.0.0.236/trunk@49658 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-02 06:50:38 +00:00
rbs%maths.uq.edu.au
e1737fe531 Update to match recent changes in the nsIFrame API.
git-svn-id: svn://10.0.0.236/trunk@49657 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-02 06:20:30 +00:00
briano%netscape.com
712d5c7659 Added some tweaks and support for UnixWare 7.
git-svn-id: svn://10.0.0.236/trunk@49656 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-02 06:00:33 +00:00
peterl%netscape.com
b72d84c381 added hooks to track content that doesn't get a frame
Fix for bug 9013 (and any dynamic change from display:none) r=troy


git-svn-id: svn://10.0.0.236/trunk@49655 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-02 04:27:40 +00:00
peterl%netscape.com
5da81c87c7 Added ability to track changes to content without frame
Fix for bug 9013 (and any dynamic change from display:none) r=troy


git-svn-id: svn://10.0.0.236/trunk@49654 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-02 04:26:53 +00:00
peterl%netscape.com
f47d01c612 added API to track content that didn't get a frame
Fix for bug 9013 (and any dynamic change from display:none) r=troy


git-svn-id: svn://10.0.0.236/trunk@49653 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-02 04:26:24 +00:00
peterl%netscape.com
86ee025299 added multimap to track content that didn't get a frame
Fix for bug 9013 (and any dynamic change from display:none) r=troy


git-svn-id: svn://10.0.0.236/trunk@49652 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-02 04:25:29 +00:00
peterl%netscape.com
f6d5221996 removing dead style change code
r=troy


git-svn-id: svn://10.0.0.236/trunk@49651 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-02 04:24:20 +00:00
peterl%netscape.com
07e158b4cf removing dead style change code and refereneces to dead style change code
r=troy


git-svn-id: svn://10.0.0.236/trunk@49650 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-02 04:23:48 +00:00
peterl%netscape.com
39323d24e7 fixed fix to bug 15373. Now it won't crash on EOF conditions
git-svn-id: svn://10.0.0.236/trunk@49649 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-02 04:23:00 +00:00
scc%netscape.com
16b1141bdf Fixing Mac build bustage by backing out (actually commenting out) beards previous change. The project he cites isn't in the module (or something) and isn't getting checked out. Ergo, errors when you try to find it to build. Couldn't find anyone to review or approve and there is no bug number ... but it has to be done. I guess I'm going to hell.
git-svn-id: svn://10.0.0.236/trunk@49648 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-02 03:41:52 +00:00
norris%netscape.com
c3494a9ffb Fix the following bugs:
14443 "Same origin" security policy may be circumvented using docu
14820 Fixing up the relationship between nsCodeBasePrincipal and n
14919 Crash in JS MM code
Reviewed by mstoltz, approved by scc.


git-svn-id: svn://10.0.0.236/trunk@49647 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-02 03:41:37 +00:00
troy%netscape.com
bd5ca95ced Added SizeOf() handler for floater information maintained by the
line box


git-svn-id: svn://10.0.0.236/trunk@49644 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-02 02:51:03 +00:00
briano%netscape.com
612bb1db4c Added support for SCO UnixWare 7.
git-svn-id: svn://10.0.0.236/trunk@49643 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-02 02:49:32 +00:00
beard%netscape.com
e912c2233e added mozilla/lib/mac/NSStartup/NSStartup.mcp to the build. This will create NSAppStartup.o, NSComponentStartup.o, and NSLibraryStartup.o, and will permit conditional use of the GC leak detector. r=sdagley
git-svn-id: svn://10.0.0.236/trunk@49642 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-02 02:21:17 +00:00
beard%netscape.com
200e34d9af First Checked In.
git-svn-id: svn://10.0.0.236/trunk@49640 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-02 01:52:41 +00:00
hyatt%netscape.com
ca4aac906f Resolving apprunner bustage in an unfortunate way. r=danm
git-svn-id: svn://10.0.0.236/trunk@49639 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-02 01:48:59 +00:00
peterl%netscape.com
3dfcb47c99 removed leak of atom
git-svn-id: svn://10.0.0.236/trunk@49638 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-02 01:32:38 +00:00
selmer%netscape.com
c571661492 Major rework on interpreting commands
git-svn-id: svn://10.0.0.236/trunk@49637 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-02 01:28:27 +00:00
hyatt%netscape.com
4efb5b42d5 Fixing the problem with chrome skin initialization in viewer and apprunner.
git-svn-id: svn://10.0.0.236/trunk@49634 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-02 00:55:57 +00:00
rjc%netscape.com
e2b731d7df Update leak docs. (Not part of build.)
git-svn-id: svn://10.0.0.236/trunk@49633 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-02 00:52:49 +00:00
troy%netscape.com
67890faf02 Added SizeOf() handler for space manager
git-svn-id: svn://10.0.0.236/trunk@49632 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-02 00:52:01 +00:00
rjc%netscape.com
741f87253e Bug # 14034: Convert to nsIModule to prepare for memory leak fixing. Review: dp@netscape.com
git-svn-id: svn://10.0.0.236/trunk@49631 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-02 00:48:02 +00:00
gagan%netscape.com
ff2d0533a2 Fix for 14772. r-rjc/a-self. Removed the pragma no-cache header being sent to proxy requests.
git-svn-id: svn://10.0.0.236/trunk@49630 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-02 00:43:10 +00:00
av%netscape.com
8c170e98ee Fixing #13783 (garbage-pointer dereference)
git-svn-id: svn://10.0.0.236/trunk@49629 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-02 00:41:03 +00:00
kmcclusk%netscape.com
0a6c37218a r=rods;bug=14867 put in style rule to disable file selector button
bug=15328 put in disable rules for button label
bug=12227 To remove combobox reflows, changed padding settings for select's active
button to match non-active state. Also changed padding+border to match between
button's with focus and active buttons drawn with focus. Added gif for active state
of combo box to indicate that it is depressed.


git-svn-id: svn://10.0.0.236/trunk@49628 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-02 00:28:37 +00:00
frankm%eng.sun.com
7a48580674 To compile on Linux, renamed 'jarray' to 'theJarray' (jarray is a JNI type), and made sure all paths in xpjd_GetInterfaceInfoNative() return a jboolean (bug 15279).
Updated genproxy usage message, and moved printf within cmdline parsing code (bug 15386).
r=edburns@acm.org,akhil.arora@sun.com perm=scc


git-svn-id: svn://10.0.0.236/trunk@49626 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-02 00:18:02 +00:00
kmcclusk%netscape.com
e1b393609a r=rods; bug=15312 nsIWidget::GetParent now stops at the top of the widget hierarchy on WIN32
r=rods; bug=13644 Dropdown on WIN32 no longer causes parent window to change z-order or activation


git-svn-id: svn://10.0.0.236/trunk@49625 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-02 00:13:23 +00:00
tao%netscape.com
61705e7f39 makefile for lang.
git-svn-id: svn://10.0.0.236/trunk@49624 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-02 00:04:22 +00:00
briano%netscape.com
59b25d549c Automated update
git-svn-id: svn://10.0.0.236/trunk@49623 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-02 00:03:06 +00:00
troy%netscape.com
4e1923d3ad Hooked up SizeOf() for cell map and table layout strategies. Also added in
some table frame data that was missed


git-svn-id: svn://10.0.0.236/trunk@49622 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-02 00:02:54 +00:00
briano%netscape.com
42184097f4 Fix for HP-UX 11 problem trying to use libc_r when it shouldn't be.
git-svn-id: svn://10.0.0.236/trunk@49621 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-02 00:02:35 +00:00
valeski%netscape.com
285283e32e 15300 r=warren. Changed NS_NewThread api to default to PR_UNJOINABLE_THREAD, also added new NS_NewThread() function so you don't have to combine the runnable w/ thread creation. added threads to xpcom init so you can create them w/ the com mgr. 15298 r=gagan, FTP threads are now synched w/ ftp handler shutdown, removed extraneous buffer work, added ftp authentication, and ftp channel content length
git-svn-id: svn://10.0.0.236/trunk@49618 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-01 23:32:12 +00:00
valeski%netscape.com
780e7132fd 15300 r=warren. Changed NS_NewThread api to default to PR_UNJOINABLE_THREAD, also added new NS_NewThread() function so you don't have to combine the runnable w/ thread creation. added threads to xpcom init so you can create them w/ the com mgr.
git-svn-id: svn://10.0.0.236/trunk@49617 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-01 23:30:06 +00:00
dougt%netscape.com
1f12de6f96 adding hostname to socket provider. (r) warren.
git-svn-id: svn://10.0.0.236/trunk@49616 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-01 23:23:49 +00:00
briano%netscape.com
64c2d4fe86 Fix for AIX 4.2, specifically, but should help other platforms with shared library difficulties.
git-svn-id: svn://10.0.0.236/trunk@49614 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-01 23:07:38 +00:00
norris%netscape.com
69ec6c9b26 Contribution from Andrew Wason:
Subject:
        optimizer Makefiles
   Date:
        Fri, 01 Oct 1999 14:50:05 -0400
   From:
        Andrew Wason <aw@softcom.com>
     To:
        norris@netscape.com
    CC:
        Howard Lin <howard@softcom.com>




Norris,

Here are patches to the Rhino Makefiles to build the optimizer package and
the jsc compiler.  They also fix a problem with "gmake clean".

Andrew
--
Andrew Wason
SoftCom, Inc.
aw@softcom.com


git-svn-id: svn://10.0.0.236/trunk@49613 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-01 22:58:48 +00:00
norris%netscape.com
34f7a63ece \t doesn't work on Windows.
git-svn-id: svn://10.0.0.236/trunk@49612 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-01 22:56:30 +00:00
dp%netscape.com
aed86d7f55 Eliminating 3 leaks to servicemanager when running for the first time.
bug# 15387 r=law


git-svn-id: svn://10.0.0.236/trunk@49610 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-01 22:39:20 +00:00
dbragg%netscape.com
e42eb9313a Initial checkin of mac xpi build files. Approval=trudelle, Reviewer=ssu
git-svn-id: svn://10.0.0.236/trunk@49609 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-01 22:31:46 +00:00
hyatt%netscape.com
ac3d91fcff Restructuring ua.css.
git-svn-id: svn://10.0.0.236/trunk@49608 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-01 21:57:32 +00:00
hyatt%netscape.com
ade56298bb Restructuring ua.css to use html.css
git-svn-id: svn://10.0.0.236/trunk@49607 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-01 21:57:01 +00:00
Jerry.Kirk%Nexwarecorp.com
26bb29ed10 Photon Only...
Added ConsumeEvents parameter to CaptureRollupEvents
r=Michael.Kedl@Nexwarecorp.com


git-svn-id: svn://10.0.0.236/trunk@49606 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-01 21:54:47 +00:00
tao%netscape.com
a981cb2868 Add new makefile to hook up lang/ directory.
git-svn-id: svn://10.0.0.236/trunk@49605 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-01 21:54:30 +00:00
hyatt%netscape.com
2c843652fd Fixing bustage.
git-svn-id: svn://10.0.0.236/trunk@49604 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-01 21:47:17 +00:00
pierre%netscape.com
bf6316462c Fixed #14416 "GFX combo boxes cause zombie windows": there was a memory leak in WidgetToScreen and ScreenToWidget. r=dcone/sfraser
Fixed #14775 "Crash removing delete observer when closing windows": reshuffled nsToolkit and added nsMacFocusHandler to nsMacEventHandler. r=dcone/sfraser


git-svn-id: svn://10.0.0.236/trunk@49603 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-01 21:40:22 +00:00
pierre%netscape.com
a8c2a315be Fixed #14775 "Crash removing delete observer when closing windows": reshuffled nsToolkit and added nsMacFocusHandler to nsMacEventHandler. r=dcone/sfraser
git-svn-id: svn://10.0.0.236/trunk@49602 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-01 21:40:04 +00:00
fur%netscape.com
da2095c0dc Updated API
git-svn-id: svn://10.0.0.236/trunk@49601 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-01 21:30:53 +00:00
briano%netscape.com
2f25a96f14 Fixed the typo that broke the Unix builds.
git-svn-id: svn://10.0.0.236/trunk@49600 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-01 21:19:14 +00:00
Jerry.Kirk%Nexwarecorp.com
24cefa52e6 Photon Only changes...
remove bogus call to nsIAppShell->GetNativeData since it isn't used
Added code for menu RollUp
Change Invalidate Code  not to when widget is not Realized
Changed mUpdateArea from nsRect to nsIRegion
Moved the HandleEvent code from nsWindow to nsWidget
r=Michael.Kedl@Nexwarecorp.com


git-svn-id: svn://10.0.0.236/trunk@49599 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-01 21:06:43 +00:00
hyatt%netscape.com
deebca4e10 Adding skin.css
git-svn-id: svn://10.0.0.236/trunk@49598 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-01 21:01:24 +00:00
akkana%netscape.com
163649cbd0 Automated tests of output. Not part of apprunner, not built by default.
Fix Compare() function;
add lots of before and after files for testing various regressions;
add a TestOutSinks script which tests the known cases.


git-svn-id: svn://10.0.0.236/trunk@49596 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-01 20:55:01 +00:00
hyatt%netscape.com
04637210d9 Splitting xul.css into two files and making them load automatically at startup. R=danm@netscape.com
git-svn-id: svn://10.0.0.236/trunk@49595 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-01 20:49:07 +00:00
danm%netscape.com
2e268f54e5 making copacetic for AIX
git-svn-id: svn://10.0.0.236/trunk@49593 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-01 20:27:45 +00:00
valeski%netscape.com
7c54ad976a 15296 r=gagan. Added .txt extension to the MIME type extension resolver.
git-svn-id: svn://10.0.0.236/trunk@49592 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-01 20:25:38 +00:00
pavlov%netscape.com
4d36473556 remove files since we have idl files for both of these r=pinkerton
git-svn-id: svn://10.0.0.236/trunk@49591 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-01 20:16:36 +00:00
dp%netscape.com
bb72e03927 Using NS_ENSURE and NS_GET_IID()
git-svn-id: svn://10.0.0.236/trunk@49590 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-01 20:13:55 +00:00
kipp%netscape.com
90f49df885 r=peterl; bug=15373; Fixed atom memory leaky
git-svn-id: svn://10.0.0.236/trunk@49589 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-01 20:13:39 +00:00
av%netscape.com
f6b2303084 Fixing dereferencing null-pointer. Caused crash, #14496
git-svn-id: svn://10.0.0.236/trunk@49588 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-01 20:10:39 +00:00
dp%netscape.com
055feb1f4f Converter to nsIModule to prepare for memory leaks fixing.
Bug# 14034 r=waterson


git-svn-id: svn://10.0.0.236/trunk@49587 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-01 20:04:34 +00:00
kin%netscape.com
2471a39269 Fix VC5 build bustage with (T*) cast.
git-svn-id: svn://10.0.0.236/trunk@49583 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-01 16:23:17 +00:00
danm%netscape.com
f8f515a025 event handler holds weak reference to frame. fixes bug 14885. r:buster
git-svn-id: svn://10.0.0.236/trunk@49582 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-01 15:04:15 +00:00
dcone%netscape.com
1cfea69ffd added background fix.. commented out for now until other platforms are tested
git-svn-id: svn://10.0.0.236/trunk@49581 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-01 14:35:20 +00:00
rods%netscape.com
8da5559e0f Added new method to tell the listcontrolframe it is about to be rolled up by the combobox
this enables it to unset any temporary selections and restore the actual selection


git-svn-id: svn://10.0.0.236/trunk@49580 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-01 14:30:33 +00:00
rods%netscape.com
f6ec8c8015 ifdef'd out the new code that handles the computed size and ifdef'ed in the old code for Linux
git-svn-id: svn://10.0.0.236/trunk@49579 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-01 14:28:25 +00:00
rods%netscape.com
f896ef768d ifdef out a debug statement
git-svn-id: svn://10.0.0.236/trunk@49578 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-01 14:26:40 +00:00
rods%netscape.com
457fc28670 removed noisy printf
git-svn-id: svn://10.0.0.236/trunk@49577 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-01 14:20:45 +00:00
troy%netscape.com
3dc6e05d82 Optimized rendering context setup and solid brush handling
git-svn-id: svn://10.0.0.236/trunk@49576 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-01 14:19:36 +00:00
valeski%netscape.com
830f8c1257 15352 r=jevering. regular pointers to com ptrs changeover, as well as more initialization of a PRExplodedTime struct.
git-svn-id: svn://10.0.0.236/trunk@49575 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-01 14:10:02 +00:00
valeski%netscape.com
31bda0647d 12748 r=Andreas. Completely removed the GetHostByAddr() call so we no longer do any reverse lookups
git-svn-id: svn://10.0.0.236/trunk@49574 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-01 13:38:46 +00:00
valeski%netscape.com
7c49c9f9ea 15297 r=gagan. Condensed Enumerate() Reset() call combinations to overloaded Reset()
git-svn-id: svn://10.0.0.236/trunk@49573 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-01 13:37:11 +00:00
kin%netscape.com
698d1ed095 Fix for bug #12195: [DOGFOOD] caret cruft left after a backspace at end of line
Added code to DrawCaretWithContext() that makes sure that the caret
doesn't hang outiside the left edge of a frame.
r=sfraser@netscape.com


git-svn-id: svn://10.0.0.236/trunk@49572 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-01 13:16:30 +00:00
ramiro%netscape.com
6ee88bb33f fix build bustage.
git-svn-id: svn://10.0.0.236/trunk@49567 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-01 12:21:33 +00:00
782 changed files with 24334 additions and 142275 deletions

File diff suppressed because it is too large Load Diff

38
mozilla/netwerk/cache/Makefile.in vendored Normal file
View File

@@ -0,0 +1,38 @@
#
# The contents of this file are subject to the Netscape Public
# License Version 1.1 (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.mozilla.org/NPL/
#
# Software distributed under the License is distributed on an "AS
# IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or
# implied. See the License for the specific language governing
# rights and limitations under the License.
#
# The Original Code is mozilla.org code.
#
# The Initial Developer of the Original Code is Netscape
# Communications Corporation. Portions created by Netscape are
# Copyright (C) 1998 Netscape Communications Corporation. All
# Rights Reserved.
#
# Contributor(s):
#
DEPTH = ../..
topsrcdir = @top_srcdir@
srcdir = @srcdir@
VPATH = @srcdir@
include $(DEPTH)/config/autoconf.mk
DIRS = \
public \
memcache \
filecache \
mgr \
build \
$(NULL)
include $(topsrcdir)/config/rules.mk

33
mozilla/netwerk/cache/Makefile.win vendored Executable file
View File

@@ -0,0 +1,33 @@
#!gmake
#
# The contents of this file are subject to the Netscape Public
# License Version 1.1 (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.mozilla.org/NPL/
#
# Software distributed under the License is distributed on an "AS
# IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or
# implied. See the License for the specific language governing
# rights and limitations under the License.
#
# The Original Code is mozilla.org code.
#
# The Initial Developer of the Original Code is Netscape
# Communications Corporation. Portions created by Netscape are
# Copyright (C) 1998 Netscape Communications Corporation. All
# Rights Reserved.
#
# Contributor(s):
DEPTH=..\..
DIRS= \
public \
mgr \
memcache \
filecache \
build \
$(NULL)
include <$(DEPTH)\config\rules.mak>

View File

@@ -22,35 +22,33 @@ VPATH = @srcdir@
include $(DEPTH)/config/autoconf.mk
LIBRARY_NAME = widget_$(MOZ_WIDGET_TOOLKIT)
MODULE = nkcacke
LIBRARY_NAME = necko_cache
IS_COMPONENT = 1
CPPSRCS = nsWidgetSupport.cpp
LOCAL_INCLUDES = \
-I$(srcdir)/../xpwidgets \
-I$(srcdir)/../$(MOZ_WIDGET_TOOLKIT) \
-I$(srcdir) \
$(NULL)
CPPSRCS = nsNetDataCacheModule.cpp
SHARED_LIBRARY_LIBS = \
$(addprefix $(DIST)/lib/libraptorwidget,$(addsuffix _s.a,$(MOZ_WIDGET_TOOLKIT))) \
$(DIST)/lib/libraptorbasewidget_s.a \
$(DIST)/lib/libnkcachemgr_s.a \
$(DIST)/lib/libnkfilecache_s.a \
$(DIST)/lib/libnkmemcache_s.a \
$(DIST)/lib/libmozdbm_s.a \
$(DIST)/lib/libxpcomio_s.a \
$(NULL)
LOCAL_INCLUDES = \
-I$(DEPTH)/netwerk/cache/memcache \
-I$(DEPTH)/netwerk/cache/filecache \
-I$(DEPTH)/netwerk/cache/mgr \
$(NULL)
EXTRA_DSO_LDOPTS = \
$(MKSHLIB_FORCE_ALL) \
$(SHARED_LIBRARY_LIBS) \
$(MKSHLIB_UNFORCE_ALL) \
$(TOOLKIT_LIBS) \
$(XLDFLAGS) \
$(XLIBS) \
$(NULL)
include $(topsrcdir)/config/rules.mk
CXXFLAGS += $(TK_CFLAGS)
DEFINES += -D_IMPL_NS_WIDGET
$(LIBRARY) $(SHARED_LIBRARY): $(SHARED_LIBRARY_LIBS) Makefile

View File

@@ -0,0 +1,51 @@
#!gmake
#
# The contents of this file are subject to the Netscape Public
# License Version 1.1 (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.mozilla.org/NPL/
#
# Software distributed under the License is distributed on an "AS
# IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or
# implied. See the License for the specific language governing
# rights and limitations under the License.
#
# The Original Code is mozilla.org code.
#
# The Initial Developer of the Original Code is Netscape
# Communications Corporation. Portions created by Netscape are
# Copyright (C) 1998 Netscape Communications Corporation. All
# Rights Reserved.
#
DEPTH=..\..\..
MODULE=nkcache
MAKE_OBJ_TYPE=DLL
DLLNAME=nkcache
DLL=.\$(OBJDIR)\$(DLLNAME).dll
CPP_OBJS= \
.\$(OBJDIR)\nsNetDataCacheModule.obj \
$(NULL)
LLIBS= \
$(DIST)\lib\nkcachemgr_s.lib \
$(DIST)\lib\nkfilecache_s.lib \
$(DIST)\lib\nkmemcache_s.lib \
$(DIST)\lib\dbm32.lib \
$(DIST)\lib\xpcom.lib \
$(LIBNSPR)
INCS = $(INCS) \
-I$(DEPTH)\netwerk\cache\memcache \
-I$(DEPTH)\netwerk\cache\filecache \
-I$(DEPTH)\netwerk\cache\mgr \
$(NULL)
include <$(DEPTH)\config\rules.mak>
install:: $(DLL)
$(MAKE_INSTALL) .\$(OBJDIR)\$(DLLNAME).dll $(DIST)\bin\components
$(MAKE_INSTALL) .\$(OBJDIR)\$(DLLNAME).lib $(DIST)\lib

View File

@@ -0,0 +1,49 @@
/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*-
* The contents of this file are subject to the Netscape Public
* License Version 1.1 (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.mozilla.org/NPL/
*
* Software distributed under the License is distributed on an "AS
* IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or
* implied. See the License for the specific language governing
* rights and limitations under the License.
*
* The Original Code is Mozilla Communicator client code, released
* March 31, 1998.
*
* The Initial Developer of the Original Code is Netscape
* Communications Corporation. Portions created by Netscape are
* Copyright (C) 1998-1999 Netscape Communications Corporation. All
* Rights Reserved.
*
*/
#include "nsCOMPtr.h"
#include "nsIModule.h"
#include "nscore.h"
#include "nsIComponentManager.h"
#include "nsIServiceManager.h"
#include "nsIGenericFactory.h"
#include "nsINetDataCache.h"
#include "nsINetDataCacheManager.h"
#include "nsMemCacheCID.h"
#include "nsMemCache.h"
#include "nsNetDiskCache.h"
#include "nsNetDiskCacheCID.h"
#include "nsCacheManager.h"
// Factory method to create a new nsMemCache instance. Used
// by nsNetDataCacheModule
NS_GENERIC_FACTORY_CONSTRUCTOR_INIT(nsMemCache, Init)
NS_GENERIC_FACTORY_CONSTRUCTOR_INIT(nsNetDiskCache, Init)
NS_GENERIC_FACTORY_CONSTRUCTOR_INIT(nsCacheManager, Init)
static nsModuleComponentInfo components[] = {
{ "Memory Cache", NS_MEM_CACHE_FACTORY_CID, NS_NETWORK_MEMORY_CACHE_PROGID, nsMemCacheConstructor },
{ "File Cache", NS_NETDISKCACHE_CID, NS_NETWORK_FILE_CACHE_PROGID, nsNetDiskCacheConstructor },
{ "Cache Manager",NS_CACHE_MANAGER_CID, NS_NETWORK_CACHE_MANAGER_PROGID,nsCacheManagerConstructor }
};
NS_IMPL_NSGETMODULE("Network Data Cache", components)

View File

@@ -0,0 +1,60 @@
#
# The contents of this file are subject to the Mozilla Public
# License Version 1.1 (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.mozilla.org/MPL/
#
# Software distributed under the License is distributed on an "AS
# IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or
# implied. See the License for the specific language governing
# rights and limitations under the License.
#
# The Original Code is Mozilla Communicator.
#
# The Initial Developer of the Original Code is Intel Corp.
# Portions created by Intel Corp. are
# Copyright (C) 1999, 1999 Intel Corp. All
# Rights Reserved.
#
# Contributor(s): Yixiong Zou <yixiong.zou@intel.com>
# Carl Wong <carl.wong@intel.com>
#
DEPTH = ../../..
topsrcdir = @top_srcdir@
VPATH = @srcdir@
srcdir = @srcdir@
include $(DEPTH)/config/autoconf.mk
MODULE = nkcache
LIBRARY_NAME = nkfilecache_s
REQUIRES = nspr dbm
EXTRA_DSO_LDOPTS += -L$(DIST)/lib -lmozdbm_s
EXPORTS=nsNetDiskCacheCID.h \
nsNetDiskCache.h \
nsIDBAccessor.h \
nsDBAccessor.h \
$(NULL)
CPPSRCS = \
nsDBAccessor.cpp\
nsDBEnumerator.cpp \
nsNetDiskCache.cpp \
nsDiskCacheRecord.cpp \
nsDiskCacheRecordChannel.cpp \
$(NULL)
EXTRA_LIBS = $(NSPR_LIBS)
# we don't want the shared lib, but we want to force the creation of a
# static lib.
override NO_SHARED_LIB=1
override NO_STATIC_LIB=
include $(topsrcdir)/config/rules.mk

View File

@@ -1,4 +1,4 @@
#!nmake
#!gmake
#
# 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
@@ -17,13 +17,28 @@
DEPTH=..\..\..
include <$(DEPTH)/config/config.mak>
EXPORTS = \
nsITimer.h \
nsITimerCallback.h \
MODULE = nkcache
LIBRARY_NAME = nkfilecache_s
CPP_OBJS= \
.\$(OBJDIR)\nsDBAccessor.obj \
.\$(OBJDIR)\nsDBEnumerator.obj \
.\$(OBJDIR)\nsNetDiskCache.obj \
.\$(OBJDIR)\nsDiskCacheRecord.obj \
.\$(OBJDIR)\nsDiskCacheRecordChannel.obj \
$(NULL)
MODULE=timer
EXPORTS=nsNetDiskCacheCID.h
include <$(DEPTH)\config\rules.mak>
include <$(DEPTH)\config\rules.mak>
install:: $(LIBRARY)
$(MAKE_INSTALL) $(LIBRARY) $(DIST)\lib
clobber::
rm -rf $(OBJDIR)
rm -f $(DIST)\lib\$(LIBRARY_NAME).lib

View File

@@ -0,0 +1,416 @@
/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*-
*
* The contents of this file are subject to the Mozilla Public
* License Version 1.1 (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.mozilla.org/MPL/
*
* Software distributed under the License is distributed on an "AS
* IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or
* implied. See the License for the specific language governing
* rights and limitations under the License.
*
* The Original Code is Mozilla Communicator.
*
* The Initial Developer of the Original Code is Intel Corp.
* Portions created by Intel Corp. are
* Copyright (C) 1999, 1999 Intel Corp. All
* Rights Reserved.
*
* Contributor(s): Yixiong Zou <yixiong.zou@intel.com>
* Carl Wong <carl.wong@intel.com>
*/
/*
* This file is part of filecache implementation.
*
* nsIDBAccessor is a interface that shields all the direct database access
* method from nsNetDiskCache.
*
* nsDBAccessor is a implementation of the nsIDBAccessor interface. It
* uses dbm(Berkely) as the database.
*
* a nsDiskCacheRecord is mapped into two entries in the database,
* key->recordID
* recordID->metadata
*/
#include "nsDBAccessor.h"
#include "nscore.h"
#include "prtypes.h"
#include "plhash.h"
#include "nsCRT.h"
nsDBAccessor::nsDBAccessor() :
mDB(0) ,
mDBFile(0) ,
mSessionID(0) ,
mSessionCntr(0) ,
mDBFilesize(0)
{
mLastSyncTime = PR_IntervalNow() ;
NS_INIT_REFCNT();
}
nsDBAccessor::~nsDBAccessor()
{
Shutdown() ;
}
//
// Implement nsISupports methods
//
NS_IMPL_ISUPPORTS(nsDBAccessor, NS_GET_IID(nsIDBAccessor))
///////////////////////////////////////////////////////////
// nsIDBAccessor methods
NS_IMETHODIMP
nsDBAccessor::Init(nsIFileSpec* dbfile)
{
char* dbname ;
// this should cover all platforms.
dbfile->GetNativePath(&dbname) ;
mDBFile = dbfile ;
// FUR - how is page size chosen ? It's worth putting a comment
// in here about the possible usefulness of tuning these parameters
HASHINFO hash_info = {
16*1024 , /* bucket size */
0 , /* fill factor */
0 , /* number of elements */
0 , /* bytes to cache */
0 , /* hash function */
0} ; /* byte order */
mDB = dbopen(dbname,
O_RDWR | O_CREAT ,
0600 ,
DB_HASH ,
& hash_info) ;
nsCRT::free(dbname) ;
if(!mDB)
return NS_ERROR_FAILURE ;
// set mSessionID
DBT db_key, db_data ;
db_key.data = NS_CONST_CAST(char*, SessionKey) ;
db_key.size = PL_strlen(SessionKey) ;
int status = (*mDB->get)(mDB, &db_key, &db_data, 0) ;
if(status == -1) {
NS_ERROR("ERROR: failed get session id in database.") ;
return NS_ERROR_FAILURE ;
}
if(status == 0) {
// get the last session id
PRInt16 *old_ID = NS_STATIC_CAST(PRInt16*, db_data.data) ;
if(*old_ID < ini_sessionID) {
NS_ERROR("ERROR: Bad Session ID in database, corrupted db.") ;
return NS_ERROR_FAILURE ;
}
mSessionID = *old_ID + 1 ;
}
else if(status == 1) {
// must be a new db
mSessionID = ini_sessionID ;
}
db_data.data = NS_REINTERPRET_CAST(void*, &mSessionID) ;
db_data.size = sizeof(PRInt16) ;
// store the new session id
status = (*mDB->put)(mDB, &db_key, &db_data, 0) ;
if(status == 0) {
(*mDB->sync)(mDB, 0) ;
// initialize database filesize
return mDBFile->GetFileSize(&mDBFilesize) ;
}
else {
NS_ERROR("reset session ID failure.") ;
return NS_ERROR_FAILURE ;
}
}
NS_IMETHODIMP
nsDBAccessor::Shutdown(void)
{
if(mDB) {
(*mDB->sync)(mDB, 0) ;
(*mDB->close)(mDB) ;
mDB = nsnull ;
}
return NS_OK ;
}
NS_IMETHODIMP
nsDBAccessor::Get(PRInt32 aID, void** anEntry, PRUint32 *aLength)
{
if(!anEntry)
return NS_ERROR_NULL_POINTER ;
*anEntry = nsnull ;
*aLength = 0 ;
NS_ASSERTION(mDB, "no database") ;
DBT db_key, db_data ;
db_key.data = NS_REINTERPRET_CAST(void*, &aID) ;
db_key.size = sizeof(PRInt32) ;
int status = 0 ;
status = (*mDB->get)(mDB, &db_key, &db_data, 0) ;
if(status == 0) {
*anEntry = db_data.data ;
*aLength = db_data.size ;
return NS_OK ;
}
else if(status == 1)
return NS_OK ;
else
return NS_ERROR_FAILURE ;
}
NS_IMETHODIMP
nsDBAccessor::Put(PRInt32 aID, void* anEntry, PRUint32 aLength)
{
NS_ASSERTION(mDB, "no database") ;
DBT db_key, db_data ;
db_key.data = NS_REINTERPRET_CAST(void*, &aID) ;
db_key.size = sizeof(PRInt32) ;
db_data.data = anEntry ;
db_data.size = aLength ;
if(0 == (*mDB->put)(mDB, &db_key, &db_data, 0)) {
return Sync() ;
}
else {
return NS_ERROR_FAILURE ;
}
}
/*
* It's more important to remove the id->metadata entry first since
* key->id mapping is just a reference
*/
NS_IMETHODIMP
nsDBAccessor::Del(PRInt32 aID, void* anEntry, PRUint32 aLength)
{
NS_ASSERTION(mDB, "no database") ;
DBT db_key ;
// delete recordID->metadata
db_key.data = NS_REINTERPRET_CAST(void*, &aID) ;
db_key.size = sizeof(PRInt32) ;
PRInt32 status = -1 ;
status = (*mDB->del)(mDB, &db_key, 0) ;
if(-1 == status) {
return NS_ERROR_FAILURE ;
}
// delete key->recordID
db_key.data = anEntry ;
db_key.size = aLength ;
status = (*mDB->del)(mDB, &db_key, 0) ;
if(-1 == status) {
return NS_ERROR_FAILURE ;
}
return Sync() ;
}
NS_IMETHODIMP
nsDBAccessor::GetID(const char* key, PRUint32 length, PRInt32* aID)
{
NS_ASSERTION(mDB, "no database") ;
DBT db_key, db_data ;
db_key.data = NS_CONST_CAST(char*, key) ;
db_key.size = length ;
int status = (*mDB->get)(mDB, &db_key, &db_data, 0) ;
if(status == 0) {
// found recordID
*aID = *(NS_REINTERPRET_CAST(PRInt32*, db_data.data)) ;
return NS_OK ;
}
else if(status == 1) {
// create a new one
PRInt32 id = 0 ;
id = mSessionID << 16 | mSessionCntr++ ;
// add new id into mDB
db_data.data = NS_REINTERPRET_CAST(void*, &id) ;
db_data.size = sizeof(PRInt32) ;
status = (*mDB->put)(mDB, &db_key, &db_data, 0) ;
if(status != 0) {
NS_ERROR("updating db failure.") ;
return NS_ERROR_FAILURE ;
}
*aID = id ;
return Sync() ;
}
else {
NS_ERROR("ERROR: keydb failure.") ;
return NS_ERROR_FAILURE ;
}
}
NS_IMETHODIMP
nsDBAccessor::EnumEntry(void** anEntry, PRUint32* aLength, PRBool bReset)
{
if(!anEntry)
return NS_ERROR_NULL_POINTER ;
*anEntry = nsnull ;
*aLength = 0 ;
NS_ASSERTION(mDB, "no database") ;
PRUint32 flag ;
if(bReset)
flag = R_FIRST ;
else
flag = R_NEXT ;
DBT db_key, db_data ;
PRUint32 len = PL_strlen(SessionKey) ;
int status ;
do {
status = (*mDB->seq)(mDB, &db_key, &db_data, flag) ;
flag = R_NEXT ;
if(status == -1)
return NS_ERROR_FAILURE ;
// get next if it's a key->recordID
if(db_key.size > sizeof(PRInt32) && db_data.size == sizeof(PRInt32))
continue ;
// get next if it's a sessionID entry
if(db_key.size == len && db_data.size == sizeof(PRInt16))
continue ;
// recordID is always 32 bits long
if(db_key.size == sizeof(PRInt32))
break ;
} while(!status) ;
if (0 == status) {
*anEntry = db_data.data ;
*aLength = db_data.size ;
}
return NS_OK ;
}
/*
* returns the cached database file size.
* mDBFilesize will be updated during Sync().
*/
NS_IMETHODIMP
nsDBAccessor::GetDBFilesize(PRUint32* aSize)
{
*aSize = mDBFilesize ;
return NS_OK ;
}
NS_IMETHODIMP
nsDBAccessor::GetSpecialEntry(void** anEntry, PRUint32* aLength)
{
if(!anEntry)
return NS_ERROR_NULL_POINTER ;
*anEntry = nsnull ;
*aLength = 0 ;
DBT db_key, db_data ;
db_key.data = NS_CONST_CAST(char*, SpecialEntry) ;
db_key.size = PL_strlen(SpecialEntry) ;
int status = (*mDB->get)(mDB, &db_key, &db_data, 0) ;
if(status == -1) {
NS_ERROR("ERROR: failed get special entry in database.") ;
return NS_ERROR_FAILURE ;
}
if(status == 0) {
*anEntry = db_data.data ;
*aLength = db_data.size ;
}
return NS_OK ;
}
NS_IMETHODIMP
nsDBAccessor::SetSpecialEntry(void* anEntry, PRUint32 aLength)
{
DBT db_key, db_data ;
db_key.data = NS_CONST_CAST(char*, SpecialEntry) ;
db_key.size = PL_strlen(SpecialEntry) ;
db_data.data = anEntry ;
db_data.size = aLength ;
if(0 == (*mDB->put)(mDB, &db_key, &db_data, 0)) {
(*mDB->sync)(mDB, 0) ;
return NS_OK ;
}
else {
return NS_ERROR_FAILURE ;
}
}
/*
* sync routine is only called when the SyncInterval is reached. Otherwise
* it just returns. If db synced, the filesize will be updated at the
* same time.
*/
nsresult
nsDBAccessor::Sync(void)
{
PRIntervalTime time = PR_IntervalNow() ;
PRIntervalTime duration = time - mLastSyncTime ;
if (PR_IntervalToMilliseconds(duration) > SyncInterval) {
int status = (*mDB->sync)(mDB, 0) ;
if(status == 0) {
// printf("\tsynced\n") ;
mLastSyncTime = time ;
// update db filesize here
return mDBFile->GetFileSize(&mDBFilesize) ;
} else
return NS_ERROR_FAILURE ;
} else {
// printf("\tnot synced\n") ;
return NS_OK ;
}
}

View File

@@ -0,0 +1,93 @@
/*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*-
*
* The contents of this file are subject to the Mozilla Public
* License Version 1.1 (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.mozilla.org/MPL/
*
* Software distributed under the License is distributed on an "AS
* IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or
* implied. See the License for the specific language governing
* rights and limitations under the License.
*
* The Original Code is Mozilla Communicator.
*
* The Initial Developer of the Original Code is Intel Corp.
* Portions created by Intel Corp. are
* Copyright (C) 1999, 1999 Intel Corp. All
* Rights Reserved.
*
* Contributor(s): Yixiong Zou <yixiong.zou@intel.com>
* Carl Wong <carl.wong@intel.com>
*/
/*
* This file is part of filecache implementation.
*
* nsIDBAccessor is a interface that shields all the direct database access
* method from nsNetDiskCache.
*
* nsDBAccessor is a implementation of the nsIDBAccessor interface. It
* uses dbm(Berkely) as the database.
*
*/
#ifndef _NSIDBACCESSOR_H_
#define _NSIDBACCESSOR_H_
#include "nsIDBAccessor.h"
#include "mcom_db.h"
#include "prinrval.h"
#include "nsCOMPtr.h"
// bogus string for the key of session id
static const char * const SessionKey = "SK" ;
// bogus string for the size
static const char * const SpecialEntry = "SE" ;
// initial session id number
static const PRInt16 ini_sessionID = 0xff ;
static const PRUint16 SyncInterval = 1000 ;
class nsDBAccessor : public nsIDBAccessor
{
public:
NS_DECL_ISUPPORTS
nsDBAccessor() ;
virtual ~nsDBAccessor() ;
NS_IMETHOD Init(nsIFileSpec* dbfile) ;
NS_IMETHOD Shutdown(void) ;
NS_IMETHOD Put(PRInt32 aID, void* anEntry, PRUint32 aLength) ;
NS_IMETHOD Get(PRInt32 aID, void** anEntry, PRUint32 *aLength) ;
NS_IMETHOD Del(PRInt32 aID, void* anEntry, PRUint32 aLength) ;
NS_IMETHOD GetID(const char* key, PRUint32 length, PRInt32* aID) ;
NS_IMETHOD EnumEntry(void* *anEntry, PRUint32* aLength, PRBool bReset) ;
NS_IMETHOD GetDBFilesize(PRUint32* aSize) ;
NS_IMETHOD GetSpecialEntry(void** anEntry, PRUint32 *aLength) ;
NS_IMETHOD SetSpecialEntry(void* anEntry, PRUint32 aLength) ;
protected:
nsresult Sync(void) ;
private:
DB * mDB ;
nsCOMPtr<nsIFileSpec> mDBFile ;
PRInt16 mSessionID ;
PRInt16 mSessionCntr ;
PRIntervalTime mLastSyncTime ;
PRUint32 mDBFilesize ; // cached DB filesize,
// updated on every sync for now
} ;
#endif // _NSIDBACCESSOR_H_

View File

@@ -0,0 +1,108 @@
/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*-
*
* The contents of this file are subject to the Mozilla Public
* License Version 1.1 (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.mozilla.org/MPL/
*
* Software distributed under the License is distributed on an "AS
* IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or
* implied. See the License for the specific language governing
* rights and limitations under the License.
*
* The Original Code is Mozilla Communicator.
*
* The Initial Developer of the Original Code is Intel Corp.
* Portions created by Intel Corp. are
* Copyright (C) 1999, 1999 Intel Corp. All
* Rights Reserved.
*
* Contributor(s): Yixiong Zou <yixiong.zou@intel.com>
* Carl Wong <carl.wong@intel.com>
*/
/*
* This file is part of filecache implementation.
*
* It implements a simple iterator for the database, see nsDBAccessor.
*/
#include "nsDBEnumerator.h"
#include "nsDiskCacheRecord.h"
nsDBEnumerator::nsDBEnumerator(nsIDBAccessor* aDB, nsNetDiskCache* aCache) :
m_DB(aDB) ,
m_DiskCache(aCache) ,
m_tempEntry(0) ,
m_tempEntry_length(0) ,
m_CacheEntry(0) ,
m_bReset(PR_TRUE)
{
NS_INIT_REFCNT();
}
nsDBEnumerator::~nsDBEnumerator()
{
NS_IF_RELEASE(m_CacheEntry) ;
}
//
// Implement nsISupports methods
//
NS_IMPL_ISUPPORTS(nsDBEnumerator, NS_GET_IID(nsIEnumerator))
/////////////////////////////////////////////////////////////////
// nsISimpleEnumerator methods
NS_IMETHODIMP
nsDBEnumerator::HasMoreElements(PRBool *_retval)
{
*_retval = PR_FALSE ;
nsresult rv = m_DB->EnumEntry(&m_tempEntry, &m_tempEntry_length, m_bReset) ;
if(NS_FAILED(rv)) {
// do some error recovery
m_DiskCache->DBRecovery() ;
return rv ;
}
m_bReset = PR_FALSE ;
if(m_tempEntry && m_tempEntry_length != 0)
*_retval = PR_TRUE ;
return NS_OK ;
}
// this routine does not create a new item by itself
// Rather it reuses the item inside the object. So if you need to use the
// item later, you have to
// create a new item specifically, using copy constructor or some other dup
// function. And don't forget to release it after you're done
//
NS_IMETHODIMP
nsDBEnumerator::GetNext(nsISupports **_retval)
{
if(!m_CacheEntry) {
m_CacheEntry = new nsDiskCacheRecord(m_DB, m_DiskCache) ;
if(m_CacheEntry)
NS_ADDREF(m_CacheEntry) ;
else
return NS_ERROR_OUT_OF_MEMORY ;
}
if(!_retval)
return NS_ERROR_NULL_POINTER ;
*_retval = nsnull ;
nsresult rv = m_CacheEntry->RetrieveInfo(m_tempEntry, m_tempEntry_length) ;
if(NS_FAILED(rv))
return rv ;
*_retval = NS_STATIC_CAST(nsISupports*, m_CacheEntry) ;
NS_ADDREF(*_retval) ; // all good getter addref
return NS_OK ;
}

View File

@@ -0,0 +1,60 @@
/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*-
*
* The contents of this file are subject to the Mozilla Public
* License Version 1.1 (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.mozilla.org/MPL/
*
* Software distributed under the License is distributed on an "AS
* IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or
* implied. See the License for the specific language governing
* rights and limitations under the License.
*
* The Original Code is Mozilla Communicator.
*
* The Initial Developer of the Original Code is Intel Corp.
* Portions created by Intel Corp. are
* Copyright (C) 1999, 1999 Intel Corp. All
* Rights Reserved.
*
* Contributor(s): Yixiong Zou <yixiong.zou@intel.com>
* Carl Wong <carl.wong@intel.com>
*/
/*
* This file is part of filecache implementation.
*
* It implements a simple iterator for the database, see nsDBAccessor.
*/
#ifndef _NS_DBENUMERATOR_H_
#define _NS_DBENUMERATOR_H_
#include "nsISimpleEnumerator.h"
#include "nsINetDataCacheRecord.h"
#include "nsIDBAccessor.h"
#include "nsCOMPtr.h"
#include "nsNetDiskCache.h"
#include "nsDiskCacheRecord.h"
class nsCachedDiskData ; /* forward decl */
class nsDBEnumerator : public nsISimpleEnumerator {
public:
NS_DECL_ISUPPORTS
NS_DECL_NSISIMPLEENUMERATOR
nsDBEnumerator(nsIDBAccessor* aDB, nsNetDiskCache* aCache) ;
virtual ~nsDBEnumerator() ;
private:
nsCOMPtr<nsIDBAccessor> m_DB ;
nsCOMPtr<nsNetDiskCache> m_DiskCache ;
void * m_tempEntry ;
PRUint32 m_tempEntry_length ;
nsDiskCacheRecord* m_CacheEntry ;
PRBool m_bReset ;
};
#endif // _NS_DBENUMERATOR_H_

View File

@@ -0,0 +1,456 @@
/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*-
*
* The contents of this file are subject to the Mozilla Public
* License Version 1.1 (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.mozilla.org/MPL/
*
* Software distributed under the License is distributed on an "AS
* IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or
* implied. See the License for the specific language governing
* rights and limitations under the License.
*
* The Original Code is Mozilla Communicator.
*
* The Initial Developer of the Original Code is Intel Corp.
* Portions created by Intel Corp. are
* Copyright (C) 1999, 1999 Intel Corp. All
* Rights Reserved.
*
* Contributor(s): Yixiong Zou <yixiong.zou@intel.com>
* Carl Wong <carl.wong@intel.com>
*/
#include "nsDiskCacheRecord.h"
#include "nsINetDataDiskCache.h"
#include "nsNetDiskCacheCID.h"
#include "nsDiskCacheRecordChannel.h"
#include "nsFileStream.h"
#include "nsIComponentManager.h"
#include "nsIServiceManager.h"
#include "nsIProtocolHandler.h"
#include "nsIIOService.h"
#include "nsIAllocator.h"
#include "plstr.h"
#include "prprf.h"
#include "prmem.h"
#include "prlog.h"
#include "prtypes.h"
#include "netCore.h"
#include "nsDBAccessor.h"
#if !defined(IS_LITTLE_ENDIAN) && !defined(IS_BIG_ENDIAN)
ERROR! Must have a byte order
#endif
#ifdef IS_LITTLE_ENDIAN
#define COPY_INT32(_a,_b) memcpy(_a, _b, sizeof(int32))
#else
#define COPY_INT32(_a,_b) /* swap */ \
do { \
((char *)(_a))[0] = ((char *)(_b))[3]; \
((char *)(_a))[1] = ((char *)(_b))[2]; \
((char *)(_a))[2] = ((char *)(_b))[1]; \
((char *)(_a))[3] = ((char *)(_b))[0]; \
} while(0)
#endif
nsDiskCacheRecord::nsDiskCacheRecord(nsIDBAccessor* db, nsNetDiskCache* aCache) :
mKey(0) ,
mKeyLength(0) ,
mRecordID(0) ,
mMetaData(0) ,
mMetaDataLength(0) ,
mDB(db) ,
mInfo(0) ,
mInfoSize(0) ,
mNumChannels(0) ,
mDiskCache(aCache)
{
NS_INIT_REFCNT();
NS_ASSERTION(mDiskCache, "Must have an nsNetDiskCache");
NS_ADDREF(mDiskCache);
}
// mem alloced. so caller should do free() on key.
NS_IMETHODIMP
nsDiskCacheRecord::Init(const char* key, PRUint32 length, PRInt32 ID)
{
NS_NewFileSpec(getter_AddRefs(mFile));
if(!mFile)
return NS_ERROR_OUT_OF_MEMORY ;
// copy key
mKeyLength = length ;
mKey = NS_STATIC_CAST(char*, nsAllocator::Alloc(mKeyLength*sizeof(char))) ;
if(!mKey)
return NS_ERROR_OUT_OF_MEMORY ;
memcpy(mKey, key, length) ;
// get RecordID
mRecordID = ID ;
// setup the file name
nsCOMPtr<nsIFileSpec> dbFolder ;
mDiskCache->GetDiskCacheFolder(getter_AddRefs(dbFolder)) ;
nsresult rv = mFile->FromFileSpec(dbFolder) ;
if(NS_FAILED(rv))
return NS_ERROR_FAILURE ;
// dir is a hash result of mRecordID%32, hope it's enough
char filename[9], dirName[3] ;
PR_snprintf(dirName, 3, "%02x", (((PRUint32)mRecordID) % 32)) ;
mFile->AppendRelativeUnixPath(dirName) ;
PR_snprintf(filename, 9, "%08x", mRecordID) ;
mFile->AppendRelativeUnixPath(filename) ;
return NS_OK ;
}
nsDiskCacheRecord::~nsDiskCacheRecord()
{
if(mKey)
nsAllocator::Free(mKey) ;
if(mMetaData)
nsAllocator::Free(mMetaData) ;
if(mInfo)
nsAllocator::Free(mInfo) ;
NS_IF_RELEASE(mDiskCache);
}
//
// Implement nsISupports methods
//
NS_IMPL_ISUPPORTS(nsDiskCacheRecord, NS_GET_IID(nsINetDataCacheRecord))
///////////////////////////////////////////////////////////////////////
// nsINetDataCacheRecord methods
// yes, mem alloced on *_retval.
NS_IMETHODIMP
nsDiskCacheRecord::GetKey(PRUint32 *length, char** _retval)
{
if(!_retval)
return NS_ERROR_NULL_POINTER ;
*length = mKeyLength ;
*_retval = NS_STATIC_CAST(char*, nsAllocator::Alloc(mKeyLength*sizeof(char))) ;
if(!*_retval)
return NS_ERROR_OUT_OF_MEMORY ;
memcpy(*_retval, mKey, mKeyLength) ;
return NS_OK ;
}
NS_IMETHODIMP
nsDiskCacheRecord::GetRecordID(PRInt32* aRecordID)
{
*aRecordID = mRecordID ;
return NS_OK ;
}
// yes, mem alloced on *_retval.
NS_IMETHODIMP
nsDiskCacheRecord::GetMetaData(PRUint32 *length, char **_retval)
{
if(!_retval)
return NS_ERROR_NULL_POINTER ;
// always null the return value first.
*_retval = nsnull ;
*length = mMetaDataLength ;
if(mMetaDataLength) {
*_retval = NS_STATIC_CAST(char*, nsAllocator::Alloc(mMetaDataLength*sizeof(char))) ;
if(!*_retval)
return NS_ERROR_OUT_OF_MEMORY ;
memcpy(*_retval, mMetaData, mMetaDataLength) ;
}
return NS_OK ;
}
NS_IMETHODIMP
nsDiskCacheRecord::SetMetaData(PRUint32 length, const char* data)
{
// set the mMetaData
mMetaDataLength = length ;
if(mMetaData)
nsAllocator::Free(mMetaData) ;
mMetaData = NS_STATIC_CAST(char*, nsAllocator::Alloc(mMetaDataLength*sizeof(char))) ;
if(!mMetaData) {
return NS_ERROR_OUT_OF_MEMORY ;
}
memcpy(mMetaData, data, length) ;
// Generate mInfo
nsresult rv = GenInfo() ;
if(NS_FAILED(rv))
return rv ;
// write through into mDB
rv = mDB->Put(mRecordID, mInfo, mInfoSize) ;
return rv ;
}
NS_IMETHODIMP
nsDiskCacheRecord::GetStoredContentLength(PRUint32 *aStoredContentLength)
{
return mFile->GetFileSize(aStoredContentLength) ;
}
// untill nsIFileSpec::Truncate() is in, we have to do all this ugly stuff
NS_IMETHODIMP
nsDiskCacheRecord::SetStoredContentLength(PRUint32 aStoredContentLength)
{
PRUint32 len = 0 ;
nsresult rv = mFile->GetFileSize(&len) ;
if(NS_FAILED(rv))
return rv ;
if(len < aStoredContentLength)
{
NS_ERROR("Error: can not set filesize to something bigger than itself.\n") ;
return NS_ERROR_FAILURE ;
}
else {
rv = mFile->Truncate(aStoredContentLength) ;
if(NS_FAILED(rv))
return rv ;
mDiskCache->m_StorageInUse -= (len - aStoredContentLength) ;
return NS_OK ;
}
}
NS_IMETHODIMP
nsDiskCacheRecord::Delete(void)
{
if(mNumChannels)
return NS_ERROR_NOT_AVAILABLE ;
PRUint32 len ;
mFile->GetFileSize(&len) ;
nsFileSpec cache_file ;
nsresult rv = mFile->GetFileSpec(&cache_file) ;
if(NS_FAILED(rv))
return NS_ERROR_FAILURE ;
cache_file.Delete(PR_TRUE) ;
// updata the storage size
mDiskCache->m_StorageInUse -= len ;
rv = mDB->Del(mRecordID, mKey, mKeyLength) ;
if(NS_FAILED(rv))
return NS_ERROR_FAILURE ;
else
return NS_OK ;
}
NS_IMETHODIMP
nsDiskCacheRecord::GetFilename(nsIFileSpec * *aFilename)
{
if(!aFilename)
return NS_ERROR_NULL_POINTER ;
*aFilename = mFile ;
NS_ADDREF(*aFilename) ;
return NS_OK ;
}
NS_IMETHODIMP
nsDiskCacheRecord::NewChannel(nsILoadGroup *loadGroup, nsIChannel **_retval)
{
nsDiskCacheRecordChannel* channel = new nsDiskCacheRecordChannel(this, loadGroup) ;
if(!channel)
return NS_ERROR_OUT_OF_MEMORY ;
nsresult rv = channel->Init() ;
if(NS_FAILED(rv))
return rv ;
NS_ADDREF(channel) ;
*_retval = NS_STATIC_CAST(nsIChannel*, channel) ;
return NS_OK ;
}
//////////////////////////////////////////////////////////////////////////
// nsDiskCacheRecord methods
// file name is represented by a url string. I hope this would be more
// generic
nsresult
nsDiskCacheRecord::GenInfo()
{
if(mInfo)
nsAllocator::Free(mInfo) ;
char* file_url=nsnull ;
PRUint32 name_len ;
mFile->GetURLString(&file_url) ;
name_len = PL_strlen(file_url)+1 ;
mInfoSize = sizeof(PRUint32) ; // checksum for mInfoSize
mInfoSize += sizeof(PRInt32) ; // RecordID
mInfoSize += sizeof(PRUint32) ; // key length
mInfoSize += mKeyLength ; // key
mInfoSize += sizeof(PRUint32) ; // metadata length
mInfoSize += mMetaDataLength ; // metadata
mInfoSize += sizeof(PRUint32) ; // filename length
mInfoSize += name_len ; // filename
void* newInfo = nsAllocator::Alloc(mInfoSize*sizeof(char)) ;
if(!newInfo) {
return NS_ERROR_OUT_OF_MEMORY ;
}
// copy the checksum mInfoSize
char* cur_ptr = NS_STATIC_CAST(char*, newInfo) ;
COPY_INT32(cur_ptr, &mInfoSize) ;
cur_ptr += sizeof(PRUint32) ;
// copy RecordID
COPY_INT32(cur_ptr, &mRecordID) ;
cur_ptr += sizeof(PRInt32) ;
// copy key length
COPY_INT32(cur_ptr, &mKeyLength) ;
cur_ptr += sizeof(PRUint32) ;
// copy key
memcpy(cur_ptr, mKey, mKeyLength) ;
cur_ptr += mKeyLength ;
// copy metadata length
COPY_INT32(cur_ptr, &mMetaDataLength) ;
cur_ptr += sizeof(PRUint32) ;
// copy metadata
memcpy(cur_ptr, mMetaData, mMetaDataLength) ;
cur_ptr += mMetaDataLength ;
// copy file name length
COPY_INT32(cur_ptr, &name_len) ;
cur_ptr += sizeof(PRUint32) ;
// copy file name
memcpy(cur_ptr, file_url, name_len) ;
cur_ptr += name_len ;
PR_ASSERT(cur_ptr == NS_STATIC_CAST(char*, newInfo) + mInfoSize);
mInfo = newInfo ;
return NS_OK ;
}
/*
* This Method suppose to get all the info from the db record
* and set them to accroding members. the original values
* will all be overwritten. only minimal error checking is performed.
*/
NS_IMETHODIMP
nsDiskCacheRecord::RetrieveInfo(void* aInfo, PRUint32 aInfoLength)
{
// reset everything
if(mInfo) {
nsAllocator::Free(mInfo) ;
mInfo = nsnull ;
}
if(mKey) {
nsAllocator::Free(mKey) ;
mKey = nsnull ;
}
if(mMetaData) {
nsAllocator::Free(mMetaData) ;
mMetaData = nsnull ;
}
char * cur_ptr = NS_STATIC_CAST(char*, aInfo) ;
char* file_url ;
PRUint32 name_len ;
// set mInfoSize
COPY_INT32(&mInfoSize, cur_ptr) ;
cur_ptr += sizeof(PRUint32) ;
// check this at least
if(mInfoSize != aInfoLength)
return NS_ERROR_FAILURE ;
// set mRecordID
COPY_INT32(&mRecordID, cur_ptr) ;
cur_ptr += sizeof(PRInt32) ;
// set mKeyLength
COPY_INT32(&mKeyLength, cur_ptr) ;
cur_ptr += sizeof(PRUint32) ;
// set mKey
mKey = NS_STATIC_CAST(char*, nsAllocator::Alloc(mKeyLength*sizeof(char))) ;
if(!mKey)
return NS_ERROR_OUT_OF_MEMORY ;
memcpy(mKey, cur_ptr, mKeyLength) ;
cur_ptr += mKeyLength ;
PRInt32 id ;
mDB->GetID(mKey, mKeyLength, &id) ;
NS_ASSERTION(id==mRecordID, "\t ++++++ bad record, somethings wrong\n") ;
// set mMetaDataLength
COPY_INT32(&mMetaDataLength, cur_ptr) ;
cur_ptr += sizeof(PRUint32) ;
// set mMetaData
mMetaData = NS_STATIC_CAST(char*, nsAllocator::Alloc(mMetaDataLength*sizeof(char))) ;
if(!mMetaData)
return NS_ERROR_OUT_OF_MEMORY ;
memcpy(mMetaData, cur_ptr, mMetaDataLength) ;
cur_ptr += mMetaDataLength ;
// get mFile name length
COPY_INT32(&name_len, cur_ptr) ;
cur_ptr += sizeof(PRUint32) ;
// get mFile native name
file_url = NS_STATIC_CAST(char*, nsAllocator::Alloc(name_len*sizeof(char))) ;
if(!file_url)
return NS_ERROR_OUT_OF_MEMORY ;
memcpy(file_url, cur_ptr, name_len) ;
cur_ptr += name_len ;
PR_ASSERT(cur_ptr == NS_STATIC_CAST(char*, aInfo) + mInfoSize);
// create mFile if Init() isn't called
if(!mFile) {
NS_NewFileSpec(getter_AddRefs(mFile));
if(!mFile)
return NS_ERROR_OUT_OF_MEMORY ;
}
// setup mFile
mFile->SetURLString(file_url) ;
return NS_OK ;
}

View File

@@ -0,0 +1,71 @@
/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*-
*
* The contents of this file are subject to the Mozilla Public
* License Version 1.1 (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.mozilla.org/MPL/
*
* Software distributed under the License is distributed on an "AS
* IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or
* implied. See the License for the specific language governing
* rights and limitations under the License.
*
* The Original Code is Mozilla Communicator.
*
* The Initial Developer of the Original Code is Intel Corp.
* Portions created by Intel Corp. are
* Copyright (C) 1999, 1999 Intel Corp. All
* Rights Reserved.
*
* Contributor(s): Yixiong Zou <yixiong.zou@intel.com>
* Carl Wong <carl.wong@intel.com>
*/
#ifndef _NET_CACHEDDISKDATA_H_
#define _NET_CACHEDDISKDATA_H_
#include "nsINetDataCacheRecord.h"
#include "nsCOMPtr.h"
#include "nsIDBAccessor.h"
#include "prtypes.h"
#include "nsILoadGroup.h"
#include "nsIFileChannel.h"
#include "nsNetDiskCache.h"
class nsDiskCacheRecord : public nsINetDataCacheRecord
{
public:
NS_DECL_ISUPPORTS
NS_DECL_NSINETDATACACHERECORD
protected:
nsDiskCacheRecord(nsIDBAccessor* db, nsNetDiskCache* aCache) ;
virtual ~nsDiskCacheRecord() ;
NS_IMETHOD RetrieveInfo(void* aInfo, PRUint32 aInfoLength) ;
NS_IMETHOD Init(const char* key, PRUint32 length, PRInt32 ID) ;
nsresult GenInfo(void) ;
private:
char* mKey ;
PRUint32 mKeyLength ;
PRInt32 mRecordID ;
char* mMetaData ;
PRUint32 mMetaDataLength ;
nsCOMPtr<nsIFileSpec> mFile ;
nsCOMPtr<nsIDBAccessor> mDB ;
void* mInfo ;
PRUint32 mInfoSize ;
PRUint32 mNumChannels ;
nsNetDiskCache* mDiskCache ;
friend class nsDiskCacheRecordChannel ;
friend class nsDBEnumerator ;
friend class nsNetDiskCache ;
} ;
#endif // _NET_CACHEDDISKDATA_H_

View File

@@ -0,0 +1,552 @@
/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*-
*
* The contents of this file are subject to the Mozilla Public
* License Version 1.1 (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.mozilla.org/MPL/
*
* Software distributed under the License is distributed on an "AS
* IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or
* implied. See the License for the specific language governing
* rights and limitations under the License.
*
* The Original Code is Mozilla Communicator.
*
* The Initial Developer of the Original Code is Intel Corp.
* Portions created by Intel Corp. are
* Copyright (C) 1999, 1999 Intel Corp. All
* Rights Reserved.
*
* Contributor(s): Yixiong Zou <yixiong.zou@intel.com>
* Carl Wong <carl.wong@intel.com>
*/
/*
* Most of the code are taken from nsFileChannel.
*/
#include "nsDiskCacheRecordChannel.h"
#include "nsIFileTransportService.h"
//#include "nsIIOService.h"
#include "nsIServiceManager.h"
#include "nsIURL.h"
#include "nsIOutputStream.h"
#include "netCore.h"
#include "nsIMIMEService.h"
#include "nsISupportsUtils.h"
//static NS_DEFINE_CID(kIOServiceCID, NS_IOSERVICE_CID);
static NS_DEFINE_CID(kFileTransportServiceCID, NS_FILETRANSPORTSERVICE_CID);
static NS_DEFINE_CID(kStandardURLCID, NS_STANDARDURL_CID);
static NS_DEFINE_CID(kMIMEServiceCID, NS_MIMESERVICE_CID);
// This is copied from nsMemCacheChannel, We should consolidate these two.
class WriteStreamWrapper : public nsIOutputStream
{
public:
WriteStreamWrapper(nsDiskCacheRecordChannel* aChannel,
nsIOutputStream *aBaseStream) ;
virtual ~WriteStreamWrapper() ;
static nsresult
Create(nsDiskCacheRecordChannel* aChannel, nsIOutputStream *aBaseStream, nsIOutputStream* *aWrapper) ;
NS_DECL_ISUPPORTS
NS_DECL_NSIBASESTREAM
NS_DECL_NSIOUTPUTSTREAM
private:
nsDiskCacheRecordChannel* mChannel;
nsCOMPtr<nsIOutputStream> mBaseStream;
} ;
// implement nsISupports
NS_IMPL_ISUPPORTS(WriteStreamWrapper, NS_GET_IID(nsIOutputStream))
WriteStreamWrapper::WriteStreamWrapper(nsDiskCacheRecordChannel* aChannel,
nsIOutputStream *aBaseStream)
: mChannel(aChannel), mBaseStream(aBaseStream)
{
NS_INIT_REFCNT();
NS_ADDREF(mChannel);
}
WriteStreamWrapper::~WriteStreamWrapper()
{
NS_RELEASE(mChannel);
}
nsresult
WriteStreamWrapper::Create(nsDiskCacheRecordChannel*aChannel, nsIOutputStream *aBaseStream, nsIOutputStream* * aWrapper)
{
WriteStreamWrapper *wrapper = new WriteStreamWrapper(aChannel, aBaseStream);
if (!wrapper) return NS_ERROR_OUT_OF_MEMORY;
NS_ADDREF(wrapper);
*aWrapper = wrapper;
return NS_OK;
}
NS_IMETHODIMP
WriteStreamWrapper::Write(const char *aBuffer, PRUint32 aCount, PRUint32 *aNumWritten)
{
*aNumWritten = 0;
nsresult rv = mBaseStream->Write(aBuffer, aCount, aNumWritten);
mChannel->NotifyStorageInUse(*aNumWritten);
return rv;
}
NS_IMETHODIMP
WriteStreamWrapper::Flush()
{
return mBaseStream->Flush();
}
NS_IMETHODIMP
WriteStreamWrapper::Close()
{
return mBaseStream->Close();
}
nsDiskCacheRecordChannel::nsDiskCacheRecordChannel(nsDiskCacheRecord *aRecord,
nsILoadGroup *aLoadGroup)
: mRecord(aRecord) ,
mLoadGroup(aLoadGroup)
{
NS_INIT_REFCNT() ;
NS_ADDREF(mRecord);
mRecord->mNumChannels++ ;
}
nsDiskCacheRecordChannel::~nsDiskCacheRecordChannel()
{
mRecord->mNumChannels-- ;
NS_RELEASE(mRecord);
}
// I know that I gave conflicting advice on the issue of file
// transport versus file protocol handler, but I thought that the
// last word was that we would use the raw transport, when I wrote:
//
// > I just thought of an argument for the other side of the coin, i.e. the
// > benefit of *not* reusing the file protocol handler: On the Mac, it's
// > expensive to convert from a string URL to an nsFileSpec, because the Mac
// > is brain-dead and scans every directory on the path to the file. It's
// > cheaper to create a nsFileSpec for a cache file by combining a single,
// > static nsFileSpec that corresponds to the cache directory with the
// > relative path to the cache file (using nsFileSpec's operator +). This
// > operation is optimized on the Mac to avoid the scanning operation.
//
// The Mac guys will eat us alive if we do path string to nsFileSpec
// conversions for every cache file we open.
nsresult
nsDiskCacheRecordChannel::Init(void)
{
nsresult rv = mRecord->mFile->GetFileSpec(&mSpec) ;
#ifdef XP_MAC
// Don't assume we actually created a good file spec
FSSpec theSpec = mSpec.GetFSSpec();
if (!theSpec.name[0]) {
NS_ERROR("failed to create a file spec");
// Since we didn't actually create the file spec
// we return an error
return NS_ERROR_MALFORMED_URI;
}
#endif
return rv ;
}
nsresult
nsDiskCacheRecordChannel::NotifyStorageInUse(PRInt32 aBytesUsed)
{
return mRecord->mDiskCache->m_StorageInUse += aBytesUsed ;
}
// implement nsISupports
NS_IMPL_ISUPPORTS4(nsDiskCacheRecordChannel,
nsIChannel,
nsIRequest,
nsIStreamListener,
nsIStreamObserver)
// implement nsIRequest
NS_IMETHODIMP
nsDiskCacheRecordChannel::IsPending(PRBool *aIsPending)
{
*aIsPending = PR_FALSE ;
if(!mFileTransport)
return NS_OK ;
return mFileTransport->IsPending(aIsPending) ;
}
NS_IMETHODIMP
nsDiskCacheRecordChannel::Cancel(void)
{
if(!mFileTransport)
return NS_ERROR_FAILURE ;
return mFileTransport->Cancel() ;
}
NS_IMETHODIMP
nsDiskCacheRecordChannel::Suspend(void)
{
if(!mFileTransport)
return NS_ERROR_FAILURE ;
return mFileTransport->Suspend() ;
}
NS_IMETHODIMP
nsDiskCacheRecordChannel::Resume(void)
{
if(!mFileTransport)
return NS_ERROR_FAILURE ;
return mFileTransport->Resume() ;
}
// implement nsIChannel
NS_IMETHODIMP
nsDiskCacheRecordChannel::GetOriginalURI(nsIURI* *aURI)
{
// FUR - might need to implement this - not sure
return NS_ERROR_NOT_IMPLEMENTED ;
}
NS_IMETHODIMP
nsDiskCacheRecordChannel::GetURI(nsIURI * *aURI)
{
if(!mFileTransport)
return NS_ERROR_FAILURE ;
return mFileTransport->GetURI(aURI) ;
}
NS_IMETHODIMP
nsDiskCacheRecordChannel::OpenInputStream(PRUint32 aStartPosition,
PRInt32 aReadCount,
nsIInputStream* *aResult)
{
nsresult rv ;
if(mFileTransport)
return NS_ERROR_IN_PROGRESS ;
NS_WITH_SERVICE(nsIFileTransportService, fts, kFileTransportServiceCID, &rv) ;
if(NS_FAILED(rv)) return rv ;
rv = fts->CreateTransport(mSpec, "load", 0, 0, getter_AddRefs(mFileTransport)) ;
if(NS_FAILED(rv))
return rv ;
// we don't need to worry about notification callbacks
rv = mFileTransport->OpenInputStream(aStartPosition, aReadCount, aResult) ;
if(NS_FAILED(rv))
mFileTransport = nsnull ;
return rv ;
}
NS_IMETHODIMP
nsDiskCacheRecordChannel::OpenOutputStream(PRUint32 startPosition,
nsIOutputStream* *aResult)
{
nsresult rv ;
NS_ENSURE_ARG(aResult) ;
if(mFileTransport)
return NS_ERROR_IN_PROGRESS ;
nsCOMPtr<nsIOutputStream> outputStream ;
NS_WITH_SERVICE(nsIFileTransportService, fts, kFileTransportServiceCID, &rv) ;
if(NS_FAILED(rv)) return rv ;
rv = fts->CreateTransport(mSpec, "load", 0, 0, getter_AddRefs(mFileTransport)) ;
if(NS_FAILED(rv))
return rv ;
// we don't need to worry about notification callbacks
rv = mFileTransport->OpenOutputStream(startPosition, getter_AddRefs(outputStream)) ;
if(NS_FAILED(rv)) {
mFileTransport = nsnull ;
return rv ;
}
return WriteStreamWrapper::Create(this, outputStream, aResult) ;
}
NS_IMETHODIMP
nsDiskCacheRecordChannel::AsyncOpen(nsIStreamObserver *observer,
nsISupports *ctxt)
{
return NS_ERROR_NOT_IMPLEMENTED ;
}
NS_IMETHODIMP
nsDiskCacheRecordChannel::AsyncRead(PRUint32 aStartPosition,
PRInt32 aReadCount,
nsISupports *aContext,
nsIStreamListener *aListener)
{
nsresult rv ;
if(mFileTransport)
return NS_ERROR_IN_PROGRESS ;
mRealListener = aListener;
nsCOMPtr<nsIStreamListener> tempListener = this;
if (mLoadGroup) {
nsCOMPtr<nsILoadGroupListenerFactory> factory;
//
// Create a load group "proxy" listener...
//
rv = mLoadGroup->GetGroupListenerFactory(getter_AddRefs(factory));
if (factory) {
nsIStreamListener *newListener;
rv = factory->CreateLoadGroupListener(mRealListener, &newListener);
if (NS_SUCCEEDED(rv)) {
mRealListener = newListener;
NS_RELEASE(newListener);
}
}
rv = mLoadGroup->AddChannel(this, nsnull);
if (NS_FAILED(rv)) return rv;
}
NS_WITH_SERVICE(nsIFileTransportService, fts, kFileTransportServiceCID, &rv);
if (NS_FAILED(rv)) return rv;
rv = fts->CreateTransport(mSpec, "load", 0, 0, getter_AddRefs(mFileTransport));
if (NS_FAILED(rv)) return rv;
// no callbacks
rv = mFileTransport->AsyncRead(aStartPosition,
aReadCount,
aContext,
tempListener);
if (NS_FAILED(rv)) {
// release the transport so that we don't think we're in progress
mFileTransport = nsnull;
}
return rv;
}
NS_IMETHODIMP
nsDiskCacheRecordChannel::AsyncWrite(nsIInputStream *fromStream,
PRUint32 startPosition,
PRInt32 writeCount,
nsISupports *ctxt,
nsIStreamObserver *observer)
{
/*
if(!mFileTransport)
return NS_ERROR_FAILURE ;
return mFileTransport->AsyncWrite(fromStream,
startPosition,
writeCount,
ctxt,
observer) ;
*/
// I can't do this since the write is not monitored, and I won't be
// able to updata the storage.
return NS_ERROR_NOT_IMPLEMENTED;
}
NS_IMETHODIMP
nsDiskCacheRecordChannel::GetLoadAttributes(nsLoadFlags *aLoadAttributes)
{
// Not required to be implemented, since it is implemented by cache manager
NS_ASSERTION(0, "nsDiskCacheRecordChannel method unexpectedly called");
return NS_ERROR_NOT_IMPLEMENTED;
}
NS_IMETHODIMP
nsDiskCacheRecordChannel::SetLoadAttributes(nsLoadFlags aLoadAttributes)
{
// Not required to be implemented, since it is implemented by cache manager
NS_ASSERTION(0, "nsDiskCacheRecordChannel method unexpectedly called");
return NS_ERROR_NOT_IMPLEMENTED;
}
#define DUMMY_TYPE "text/html"
NS_IMETHODIMP
nsDiskCacheRecordChannel::GetContentType(char * *aContentType)
{
nsresult rv ;
if (mSpec.IsDirectory()) {
*aContentType = nsCRT::strdup("application/http-index-format");
return *aContentType ? NS_OK : NS_ERROR_OUT_OF_MEMORY;
}
else {
// I wish I can make this simplier
char* urlStr ;
mRecord->mFile->GetURLString(&urlStr) ;
// file: URLs (currently) have no additional structure beyond that provided by standard
// URLs, so there is no "outer" given to CreateInstance
nsCOMPtr<nsIURI> url;
rv = nsComponentManager::CreateInstance(kStandardURLCID, nsnull,
NS_GET_IID(nsIURI),
//(void**)&url);
getter_AddRefs(url)) ;
if (NS_FAILED(rv)) return rv;
rv = url->SetSpec((char*)urlStr);
if (NS_FAILED(rv))
return rv;
NS_WITH_SERVICE(nsIMIMEService, MIMEService, kMIMEServiceCID, &rv);
if (NS_FAILED(rv)) return rv;
rv = MIMEService->GetTypeFromURI(url, aContentType);
if (NS_SUCCEEDED(rv)) return rv;
}
// if all else fails treat it as text/html?
*aContentType = nsCRT::strdup(DUMMY_TYPE);
if (!*aContentType) {
return NS_ERROR_OUT_OF_MEMORY;
} else {
return NS_OK;
}
}
NS_IMETHODIMP
nsDiskCacheRecordChannel::GetContentLength(PRInt32 *aContentLength)
{
nsresult rv;
PRUint32 length;
rv = mRecord->mFile->GetFileSize(&length);
if (NS_SUCCEEDED(rv)) {
*aContentLength = (PRInt32)length;
} else {
*aContentLength = -1;
}
return rv;
}
NS_IMETHODIMP
nsDiskCacheRecordChannel::GetOwner(nsISupports* *aOwner)
{
*aOwner = mOwner.get() ;
NS_IF_ADDREF(*aOwner) ;
return NS_OK ;
}
NS_IMETHODIMP
nsDiskCacheRecordChannel::SetOwner(nsISupports* aOwner)
{
mOwner = aOwner ;
return NS_OK ;
}
NS_IMETHODIMP
nsDiskCacheRecordChannel::GetLoadGroup(nsILoadGroup* *aLoadGroup)
{
// Not required to be implemented, since it is implemented by cache manager
NS_ASSERTION(0, "nsDiskCacheRecordChannel method unexpectedly called");
return NS_OK ;
}
NS_IMETHODIMP
nsDiskCacheRecordChannel::SetLoadGroup(nsILoadGroup* aLoadGroup)
{
// Not required to be implemented, since it is implemented by cache manager
NS_ASSERTION(0, "nsDiskCacheRecordChannel method unexpectedly called");
return NS_OK;
}
NS_IMETHODIMP
nsDiskCacheRecordChannel::GetNotificationCallbacks(nsIInterfaceRequestor* *aNotificationCallbacks)
{
// Not required to be implemented, since it is implemented by cache manager
NS_ASSERTION(0, "nsDiskCacheRecordChannel method unexpectedly called");
return NS_ERROR_NOT_IMPLEMENTED;
}
NS_IMETHODIMP
nsDiskCacheRecordChannel::SetNotificationCallbacks(nsIInterfaceRequestor* aNotificationCallbacks)
{
// Not required to be implemented, since it is implemented by cache manager
NS_ASSERTION(0, "nsDiskCacheRecordChannel method unexpectedly called");
return NS_ERROR_NOT_IMPLEMENTED;
}
////////////////////////////////////////////////////////////////////////////////
// nsIStreamListener methods:
////////////////////////////////////////////////////////////////////////////////
NS_IMETHODIMP
nsDiskCacheRecordChannel::OnStartRequest(nsIChannel* transportChannel, nsISupports* context)
{
NS_ASSERTION(mRealListener, "No listener...");
return mRealListener->OnStartRequest(this, context);
}
NS_IMETHODIMP
nsDiskCacheRecordChannel::OnStopRequest(nsIChannel* transportChannel, nsISupports* context,
nsresult aStatus, const PRUnichar* aMsg)
{
nsresult rv;
rv = mRealListener->OnStopRequest(this, context, aStatus, aMsg);
if (mLoadGroup) {
if (NS_SUCCEEDED(rv)) {
mLoadGroup->RemoveChannel(this, context, aStatus, aMsg);
}
}
// Release the reference to the consumer stream listener...
mRealListener = null_nsCOMPtr();
mFileTransport = null_nsCOMPtr();
return rv;
}
NS_IMETHODIMP
nsDiskCacheRecordChannel::OnDataAvailable(nsIChannel* transportChannel, nsISupports* context,
nsIInputStream *aIStream, PRUint32 aSourceOffset,
PRUint32 aLength)
{
nsresult rv;
rv = mRealListener->OnDataAvailable(this, context, aIStream,
aSourceOffset, aLength);
//
// If the connection is being aborted cancel the transport. This will
// insure that the transport will go away even if it is blocked waiting
// for the consumer to empty the pipe...
//
if (NS_FAILED(rv)) {
mFileTransport->Cancel();
}
return rv;
}

View File

@@ -0,0 +1,76 @@
/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*-
*
* The contents of this file are subject to the Mozilla Public
* License Version 1.1 (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.mozilla.org/MPL/
*
* Software distributed under the License is distributed on an "AS
* IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or
* implied. See the License for the specific language governing
* rights and limitations under the License.
*
* The Original Code is Mozilla Communicator.
*
* The Initial Developer of the Original Code is Intel Corp.
* Portions created by Intel Corp. are
* Copyright (C) 1999, 1999 Intel Corp. All
* Rights Reserved.
*
* Contributor(s): Yixiong Zou <yixiong.zou@intel.com>
* Carl Wong <carl.wong@intel.com>
*/
#ifndef _ns_DiskCacheRecordChannel_h_
#define _ns_DiskCacheRecordChannel_h_
#include "nsIChannel.h"
#include "nsCOMPtr.h"
#include "nsDiskCacheRecord.h"
#include "nsIStreamListener.h"
/*
* This class is plagiarized from nsMemCacheChannel
*/
class nsDiskCacheRecordChannel : public nsIChannel,
public nsIStreamListener
{
public:
nsDiskCacheRecordChannel(nsDiskCacheRecord *aRecord, nsILoadGroup *aLoadGroup);
virtual ~nsDiskCacheRecordChannel() ;
// Declare nsISupports methods
NS_DECL_ISUPPORTS
// Declare nsIRequest methods
NS_DECL_NSIREQUEST
// Declare nsIChannel methods
NS_DECL_NSICHANNEL
// Declare nsIStreamObserver methods
NS_DECL_NSISTREAMOBSERVER
// Declare nsIStreamListener methods
NS_DECL_NSISTREAMLISTENER
nsresult Init(void) ;
private:
nsresult NotifyStorageInUse(PRInt32 aBytesUsed) ;
nsDiskCacheRecord* mRecord ;
nsCOMPtr<nsILoadGroup> mLoadGroup ;
nsCOMPtr<nsISupports> mOwner ;
nsCOMPtr<nsIChannel> mFileTransport ;
nsFileSpec mSpec ;
nsCOMPtr<nsIStreamListener> mRealListener;
friend class WriteStreamWrapper ;
} ;
#endif // _ns_DiskCacheRecordChannel_h_

View File

@@ -0,0 +1,66 @@
/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*-
*
* The contents of this file are subject to the Mozilla Public
* License Version 1.1 (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.mozilla.org/MPL/
*
* Software distributed under the License is distributed on an "AS
* IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or
* implied. See the License for the specific language governing
* rights and limitations under the License.
*
* The Original Code is Mozilla Communicator.
*
* The Initial Developer of the Original Code is Intel Corp.
* Portions created by Intel Corp. are
* Copyright (C) 1999, 1999 Intel Corp. All
* Rights Reserved.
*
* Contributor(s): Yixiong Zou <yixiong.zou@intel.com>
* Carl Wong <carl.wong@intel.com>
*/
#ifndef _NS_IDBACCESSOR_H_
#define _NS_IDBACCESSOR_H_
#include "nsISupports.h"
#include "nsIFileSpec.h"
// nsIDBAccessorIID {6AADD4D0-7785-11d3-87FE-000629D01344}
#define NS_IDBACCESSOR_IID \
{ 0x6aadd4d0, 0x7785, 0x11d3, \
{0x87, 0xfe, 0x0, 0x6, 0x29, 0xd0, 0x13, 0x44}}
// nsDBAccessorCID {6AADD4D1-7785-11d3-87FE-000629D01344}
#define NS_DBACCESSOR_CID \
{ 0x6aadd4d1, 0x7785, 0x11d3, \
{ 0x87, 0xfe, 0x0, 0x6, 0x29, 0xd0, 0x13, 0x44 }}
class nsIDBAccessor : public nsISupports
{
public:
NS_DEFINE_STATIC_IID_ACCESSOR(NS_IDBACCESSOR_IID)
NS_IMETHOD Init(nsIFileSpec* DBFile) = 0 ;
NS_IMETHOD Shutdown(void) = 0 ;
NS_IMETHOD Put(PRInt32 aID, void* anEntry, PRUint32 aLength) = 0 ;
NS_IMETHOD Get(PRInt32 aID, void** anEntry, PRUint32 *aLength) = 0 ;
NS_IMETHOD Del(PRInt32 aID, void* anEntry, PRUint32 aLength) = 0 ;
NS_IMETHOD GetID(const char* key, PRUint32 length, PRInt32* aID) = 0 ;
NS_IMETHOD EnumEntry(void* *anEntry, PRUint32* aLength, PRBool bReset) = 0 ;
NS_IMETHOD GetDBFilesize(PRUint32* aSize) = 0 ;
NS_IMETHOD GetSpecialEntry(void** anEntry, PRUint32 *aLength) = 0 ;
NS_IMETHOD SetSpecialEntry(void* anEntry, PRUint32 aLength) = 0 ;
} ;
#endif // _NS_IDBACCESSOR_H_

View File

@@ -0,0 +1,704 @@
/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*-
*
* The contents of this file are subject to the Mozilla Public
* License Version 1.1 (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.mozilla.org/MPL/
*
* Software distributed under the License is distributed on an "AS
* IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or
* implied. See the License for the specific language governing
* rights and limitations under the License.
*
* The Original Code is Mozilla Communicator.
*
* The Initial Developer of the Original Code is Intel Corp.
* Portions created by Intel Corp. are
* Copyright (C) 1999, 1999 Intel Corp. All
* Rights Reserved.
*
* Contributor(s): Yixiong Zou <yixiong.zou@intel.com>
* Carl Wong <carl.wong@intel.com>
*/
#include "nsNetDiskCache.h"
#include "nscore.h"
#include "plstr.h"
#include "prprf.h"
#include "prtypes.h"
#include "prio.h"
#include "prsystem.h" // Directory Seperator
#include "plhash.h"
#include "prclist.h"
#include "prmem.h"
#include "prlog.h"
#include "nsIComponentManager.h"
#include "nsIServiceManager.h"
#include "nsIPref.h"
#include "mcom_db.h"
#include "nsDBEnumerator.h"
#include "nsDiskCacheRecord.h"
#include "netCore.h"
#if !defined(IS_LITTLE_ENDIAN) && !defined(IS_BIG_ENDIAN)
ERROR! Must have a byte order
#endif
#ifdef IS_LITTLE_ENDIAN
#define COPY_INT32(_a,_b) memcpy(_a, _b, sizeof(int32))
#else
#define COPY_INT32(_a,_b) /* swap */ \
do { \
((char *)(_a))[0] = ((char *)(_b))[3]; \
((char *)(_a))[1] = ((char *)(_b))[2]; \
((char *)(_a))[2] = ((char *)(_b))[1]; \
((char *)(_a))[3] = ((char *)(_b))[0]; \
} while(0)
#endif
static NS_DEFINE_CID(kPrefCID, NS_PREF_CID) ;
static NS_DEFINE_CID(kDBAccessorCID, NS_DBACCESSOR_CID) ;
static const PRUint32 DISK_CACHE_SIZE_DEFAULT = 5*1024*1024 ; // 5MB
static const char * const DISK_CACHE_PREF = "browser.cache.disk_cache_size";
static const char * const CACHE_DIR_PREF = "browser.cache.directory";
class nsDiskCacheRecord ;
nsNetDiskCache::nsNetDiskCache() :
m_Enabled(PR_TRUE) ,
m_NumEntries(0) ,
m_pNextCache(0) ,
m_pDiskCacheFolder(0) ,
m_StorageInUse(0) ,
m_DB(0) ,
m_DBCorrupted(PR_FALSE)
{
// set it to INF for now
m_MaxEntries = (PRUint32)-1 ;
NS_INIT_REFCNT();
}
nsNetDiskCache::~nsNetDiskCache()
{
SetSpecialEntry() ;
NS_IF_RELEASE(m_DB) ;
// FUR
// I think that, eventually, we also want a distinguished key in the DB which
// means "clean cache shutdown". You clear this flag when the db is first
// opened and set it just before the db is closed. If the db wasn't shutdown
// cleanly in a prior session, i.e. because the app crashed, on startup you
// scan all the individual files in directories and look for "orphans",
// i.e. cache files which don't have corresponding entries in the db. That's
// also when storage-in-use and number of entries would be recomputed.
//
// We don't necessarily need all this functionality immediately, though.
if(m_DBCorrupted) {
nsFileSpec cacheFolder ;
m_pDiskCacheFolder->GetFileSpec(&cacheFolder) ;
char nameInt[6] ;
for(nsDirectoryIterator di(cacheFolder, PR_FALSE); di.Exists(); di++) {
char* filename = di.Spec().GetLeafName() ;
char* pname = nameInt ;
pname = PL_strncpyz(pname, filename, 6) ;
if(PL_strcmp(pname, "trash") == 0)
RemoveFolder(di.Spec()) ;
nsCRT::free(filename) ;
}
}
}
NS_IMETHODIMP
nsNetDiskCache::Init(void)
{
nsresult rv ;
// don't initialize if no cache folder is set.
if(!m_pDiskCacheFolder) return NS_OK ;
if(!m_DB) {
m_DB = new nsDBAccessor() ;
if(!m_DB)
return NS_ERROR_OUT_OF_MEMORY ;
else
NS_ADDREF(m_DB) ;
}
// create cache sub directories
nsCOMPtr<nsIFileSpec> cacheSubDir;
rv = NS_NewFileSpec(getter_AddRefs(cacheSubDir));
for (int i=0; i < 32; i++) {
rv = cacheSubDir->FromFileSpec(m_pDiskCacheFolder) ;
if(NS_FAILED(rv))
return rv ;
char dirName[3];
PR_snprintf (dirName, 3, "%0.2x", i);
cacheSubDir->AppendRelativeUnixPath (dirName) ;
CreateDir(cacheSubDir);
}
return InitDB() ;
}
NS_IMETHODIMP
nsNetDiskCache::InitDB(void)
{
nsresult rv ;
if(!m_DBFile) {
NS_NewFileSpec(getter_AddRefs(m_DBFile)) ;
if(!m_DBFile)
return NS_ERROR_OUT_OF_MEMORY ;
}
rv = m_DBFile->FromFileSpec(m_pDiskCacheFolder) ;
if(NS_FAILED(rv))
return rv ;
m_DBFile->AppendRelativeUnixPath("cache.db") ;
rv = m_DB->Init(m_DBFile) ;
if(rv == NS_ERROR_FAILURE) {
// try recovery if error
DBRecovery() ;
}
rv = GetSpecialEntry() ;
if(rv == NS_ERROR_FAILURE) {
// try recovery if error
DBRecovery() ;
}
return rv ;
}
//////////////////////////////////////////////////////////////////////////
// nsISupports methods
NS_IMPL_ISUPPORTS3(nsNetDiskCache,
nsINetDataDiskCache,
nsINetDataCache,
nsISupports)
///////////////////////////////////////////////////////////////////////////
// nsINetDataCache Method
NS_IMETHODIMP
nsNetDiskCache::GetDescription(PRUnichar* *aDescription)
{
nsAutoString description("Disk Cache") ;
*aDescription = description.ToNewUnicode() ;
if(!*aDescription)
return NS_ERROR_OUT_OF_MEMORY ;
return NS_OK ;
}
/* don't alloc mem for nsICachedNetData.
* RecordID is generated using the same scheme in nsCacheDiskData,
* see GetCachedNetData() for detail.
*/
NS_IMETHODIMP
nsNetDiskCache::Contains(const char* key, PRUint32 length, PRBool *_retval)
{
*_retval = PR_FALSE ;
NS_ASSERTION(m_DB, "no db.") ;
PRInt32 id = 0 ;
nsresult rv = m_DB->GetID(key, length, &id) ;
if(NS_FAILED(rv)) {
// try recovery if error
DBRecovery() ;
return rv ;
}
void* info = 0 ;
PRUint32 info_size = 0 ;
rv = m_DB->Get(id, &info, &info_size) ;
if(NS_SUCCEEDED(rv) && info)
*_retval = PR_TRUE ;
if(NS_FAILED(rv)) {
// try recovery if error
DBRecovery() ;
}
return rv ;
}
/* regardless if it's cached or not, a copy of nsNetDiskCache would
* always be returned. so release it appropriately.
* if mem alloced, updata m_NumEntries also.
* for now, the new nsCachedNetData is not written into db yet since
* we have nothing to write.
*/
NS_IMETHODIMP
nsNetDiskCache::GetCachedNetData(const char* key, PRUint32 length, nsINetDataCacheRecord **_retval)
{
NS_ASSERTION(m_DB, "no db.") ;
nsresult rv = 0 ;
if (!_retval)
return NS_ERROR_NULL_POINTER ;
*_retval = nsnull ;
PRInt32 id = 0 ;
rv = m_DB->GetID(key, length, &id) ;
if(NS_FAILED(rv)) {
// try recovery if error
DBRecovery() ;
return rv ;
}
// construct an empty record
nsDiskCacheRecord* newRecord = new nsDiskCacheRecord(m_DB, this) ;
if(!newRecord)
return NS_ERROR_OUT_OF_MEMORY ;
rv = newRecord->Init(key, length, id) ;
if(NS_FAILED(rv)) {
delete newRecord ;
return rv ;
}
NS_ADDREF(newRecord) ; // addref for _retval
*_retval = (nsINetDataCacheRecord*) newRecord ;
void* info = 0 ;
PRUint32 info_size = 0 ;
rv = m_DB->Get(id, &info, &info_size) ;
if(NS_SUCCEEDED(rv) && info) {
// this is a previously cached record
nsresult r1 ;
r1 = newRecord->RetrieveInfo(info, info_size) ;
if(NS_SUCCEEDED(rv))
return NS_OK ;
else {
// probably a bad one
NS_RELEASE(newRecord) ;
*_retval = nsnull ;
return r1;
}
} else if (NS_SUCCEEDED(rv) && !info) {
// this is a new record.
m_NumEntries ++ ;
return NS_OK ;
} else {
// database error.
DBRecovery() ;
return rv ;
}
}
/* get an nsICachedNetData, mem needs to be de-alloced if not found. */
NS_IMETHODIMP
nsNetDiskCache::GetCachedNetDataByID(PRInt32 RecordID, nsINetDataCacheRecord **_retval)
{
NS_ASSERTION(m_DB, "no db.") ;
if (!_retval)
return NS_ERROR_NULL_POINTER ;
*_retval = nsnull ;
nsresult rv ;
void* info = 0 ;
PRUint32 info_size = 0 ;
rv = m_DB->Get(RecordID, &info, &info_size) ;
if(NS_SUCCEEDED(rv) && info) {
// construct an empty record if only found in db
nsDiskCacheRecord* newRecord = new nsDiskCacheRecord(m_DB, this) ;
if(!newRecord)
return NS_ERROR_OUT_OF_MEMORY ;
NS_ADDREF(newRecord) ; // addref for _retval
rv = newRecord->RetrieveInfo(info, info_size) ;
if(NS_SUCCEEDED(rv)) {
*_retval = (nsINetDataCacheRecord*) newRecord ;
return NS_OK ;
}
else {
// bad record, I guess
NS_RELEASE(newRecord) ; // release if bad things happen
return rv ;
}
} else {
NS_ERROR("Error: RecordID not in DB\n") ;
DBRecovery() ;
return rv ;
}
}
NS_IMETHODIMP
nsNetDiskCache::GetEnabled(PRBool *aEnabled)
{
*aEnabled = m_Enabled ;
return NS_OK ;
}
NS_IMETHODIMP
nsNetDiskCache::SetEnabled(PRBool aEnabled)
{
m_Enabled = aEnabled ;
return NS_OK ;
}
NS_IMETHODIMP
nsNetDiskCache::GetFlags(PRUint32 *aFlags)
{
*aFlags = FILE_PER_URL_CACHE;
return NS_OK ;
}
NS_IMETHODIMP
nsNetDiskCache::GetNumEntries(PRUint32 *aNumEntries)
{
*aNumEntries = m_NumEntries ;
return NS_OK ;
}
NS_IMETHODIMP
nsNetDiskCache::GetMaxEntries(PRUint32 *aMaxEntries)
{
*aMaxEntries = m_MaxEntries ;
return NS_OK ;
}
NS_IMETHODIMP
nsNetDiskCache::NewCacheEntryIterator(nsISimpleEnumerator **_retval)
{
NS_ASSERTION(m_DB, "no db.") ;
if(!_retval)
return NS_ERROR_NULL_POINTER ;
*_retval = nsnull ;
nsISimpleEnumerator* enumerator = new nsDBEnumerator(m_DB, this) ;
if(enumerator) {
NS_ADDREF(enumerator) ;
*_retval = enumerator ;
return NS_OK ;
}
else
return NS_ERROR_OUT_OF_MEMORY ;
}
NS_IMETHODIMP
nsNetDiskCache::GetNextCache(nsINetDataCache * *aNextCache)
{
if(!aNextCache)
return NS_ERROR_NULL_POINTER ;
*aNextCache = m_pNextCache ;
return NS_OK ;
}
NS_IMETHODIMP
nsNetDiskCache::SetNextCache(nsINetDataCache *aNextCache)
{
m_pNextCache = aNextCache ;
return NS_OK ;
}
// db size can always be measured at the last minute. Since it's hard
// to know before hand.
NS_IMETHODIMP
nsNetDiskCache::GetStorageInUse(PRUint32 *aStorageInUse)
{
NS_ASSERTION(m_DB, "no db.") ;
PRUint32 total_size = m_StorageInUse ;
/*
PRUint32 len = 0 ;
// add the size of the db.
m_DB->GetDBFilesize(&len) ;
total_size += len ;
*/
// we need size in kB
total_size = total_size >> 10 ;
*aStorageInUse = total_size ;
return NS_OK ;
}
/*
* The whole cache dirs can be whiped clean since all the cache
* files are resides in seperate hashed dirs. It's safe to do so.
*/
NS_IMETHODIMP
nsNetDiskCache::RemoveAll(void)
{
NS_ASSERTION(m_DB, "no db.") ;
NS_ASSERTION(m_pDiskCacheFolder, "no cache folder.") ;
// remove all the sub folders
nsFileSpec cacheSubDir;
for (int i=0; i < 32; i++) {
m_pDiskCacheFolder->GetFileSpec(&cacheSubDir) ;
char dirName[3];
PR_snprintf (dirName, 3, "%0.2x", i);
cacheSubDir += dirName ;
RemoveFolder(cacheSubDir) ;
}
// don't forget the db file itself
m_DB->Shutdown() ;
nsFileSpec dbfile ;
m_DBFile->GetFileSpec(&dbfile) ;
dbfile.Delete(PR_TRUE) ;
// reinitilize
return Init() ;
}
//////////////////////////////////////////////////////////////////
// nsINetDataDiskCache methods
NS_IMETHODIMP
nsNetDiskCache::GetDiskCacheFolder(nsIFileSpec * *aDiskCacheFolder)
{
*aDiskCacheFolder = nsnull ;
NS_ASSERTION(m_pDiskCacheFolder, "no cache folder.") ;
*aDiskCacheFolder = m_pDiskCacheFolder ;
NS_ADDREF(*aDiskCacheFolder) ;
return NS_OK ;
}
NS_IMETHODIMP
nsNetDiskCache::SetDiskCacheFolder(nsIFileSpec * aDiskCacheFolder)
{
if(!m_pDiskCacheFolder) {
NS_NewFileSpec(getter_AddRefs(m_pDiskCacheFolder));
if(!m_pDiskCacheFolder)
return NS_ERROR_OUT_OF_MEMORY ;
m_pDiskCacheFolder = aDiskCacheFolder ;
return Init() ;
}
else {
char *newfolder, *oldfolder ;
m_pDiskCacheFolder->GetNativePath(&oldfolder) ;
aDiskCacheFolder->GetNativePath(&newfolder) ;
if(PL_strcmp(newfolder, oldfolder) != 0) {
m_pDiskCacheFolder = aDiskCacheFolder ;
// do we need to blow away old cache before building a new one?
// return RemoveAll() ;
m_DB->Shutdown() ;
return Init() ;
} else
return NS_OK ;
}
}
//////////////////////////////////////////////////////////////////
// nsNetDiskCache methods
// create a directory (recursively)
NS_IMETHODIMP
nsNetDiskCache::CreateDir(nsIFileSpec* dir_spec)
{
PRBool does_exist ;
nsCOMPtr<nsIFileSpec> p_spec ;
dir_spec->Exists(&does_exist) ;
if(does_exist)
return NS_OK ;
nsresult rv = dir_spec->GetParent(getter_AddRefs(p_spec)) ;
if(NS_FAILED(rv))
return rv ;
p_spec->Exists(&does_exist) ;
if(!does_exist) {
CreateDir(p_spec) ;
rv = dir_spec->CreateDir() ;
if(NS_FAILED(rv))
return rv ;
}
else {
rv = dir_spec->CreateDir() ;
if(NS_FAILED(rv))
return rv ;
}
return NS_OK ;
}
// We can't afford to make a *separate* pass over the whole db on every
// startup, just to figure out m_NumEntries and m_StorageInUse. (This is a
// several second operation on a large db). We'll likely need to store
// distinguished keys in the db that contain these values and update them
// incrementally, except when failure to shut down the db cleanly is detected.
NS_IMETHODIMP
nsNetDiskCache::GetSpecialEntry(void)
{
void* pInfo ;
PRUint32 InfoSize ;
nsresult rv = m_DB->GetSpecialEntry(&pInfo, &InfoSize) ;
if(NS_FAILED(rv))
return rv ;
if(!pInfo && InfoSize == 0) {
// must be a new DB
m_NumEntries = 0 ;
m_StorageInUse = 0 ;
}
else {
char * cur_ptr = NS_STATIC_CAST(char*, pInfo) ;
// get m_NumEntries
COPY_INT32(&m_NumEntries, cur_ptr) ;
cur_ptr += sizeof(PRUint32) ;
// get m_StorageInUse
COPY_INT32(&m_StorageInUse, cur_ptr) ;
cur_ptr += sizeof(PRUint32) ;
PR_ASSERT(cur_ptr == NS_STATIC_CAST(char*, pInfo) + InfoSize);
}
return NS_OK ;
}
NS_IMETHODIMP
nsNetDiskCache::SetSpecialEntry(void)
{
PRUint32 InfoSize ;
InfoSize = sizeof m_NumEntries ;
InfoSize += sizeof m_StorageInUse ;
void* pInfo = nsAllocator::Alloc(InfoSize*sizeof(char)) ;
if(!pInfo)
return NS_ERROR_OUT_OF_MEMORY ;
char* cur_ptr = NS_STATIC_CAST(char*, pInfo) ;
COPY_INT32(cur_ptr, &m_NumEntries) ;
cur_ptr += sizeof(PRUint32) ;
COPY_INT32(cur_ptr, &m_StorageInUse) ;
cur_ptr += sizeof(PRUint32) ;
PR_ASSERT(cur_ptr == NS_STATIC_CAST(char*, pInfo) + InfoSize);
return m_DB->SetSpecialEntry(pInfo, InfoSize) ;
}
// this routine will be called everytime we have a db corruption.
// m_DB will be re-initialized, m_StorageInUse and m_NumEntries will
// be reset.
NS_IMETHODIMP
nsNetDiskCache::DBRecovery(void)
{
// rename all the sub cache dirs and remove them later during dtor.
nsresult rv = RenameCacheSubDirs() ;
if(NS_FAILED(rv))
return rv ;
// remove corrupted db file, don't care if db->shutdown fails or not.
m_DB->Shutdown() ;
nsFileSpec dbfile ;
m_DBFile->GetFileSpec(&dbfile) ;
dbfile.Delete(PR_TRUE) ;
// make sure it's not there any more
PRBool exists = dbfile.Exists() ;
if(exists) {
NS_ERROR("can't remove old db.") ;
return NS_ERROR_FAILURE ;
}
// reinitilize DB
return InitDB() ;
}
// this routine will add string "trash" to current CacheSubDir names.
// e.g. 00->trash00, 1f->trash1f. and update the m_DBCorrupted.
NS_IMETHODIMP
nsNetDiskCache::RenameCacheSubDirs(void)
{
nsCOMPtr<nsIFileSpec> cacheSubDir;
nsresult rv = NS_NewFileSpec(getter_AddRefs(cacheSubDir)) ;
for (int i=0; i < 32; i++) {
rv = cacheSubDir->FromFileSpec(m_pDiskCacheFolder) ;
if(NS_FAILED(rv))
return rv ;
char oldName[3], newName[8];
PR_snprintf(oldName, 3, "%0.2x", i) ;
cacheSubDir->AppendRelativeUnixPath(oldName) ;
// re-name the directory
PR_snprintf(newName, 8, "trash%0.2x", i) ;
rv = cacheSubDir->Rename(newName) ;
if(NS_FAILED(rv))
// TODO, error checking
return NS_ERROR_FAILURE ;
}
// update m_DBCorrupted
m_DBCorrupted = PR_TRUE ;
return NS_OK ;
}
// this routine is used by dtor and RemoveAll() to clean up dirs.
NS_IMETHODIMP
nsNetDiskCache::RemoveFolder(nsFileSpec aFolder)
{
for(nsDirectoryIterator di(aFolder, PR_FALSE); di.Exists(); di++) {
di.Spec().Delete(PR_TRUE) ;
}
aFolder.Delete(PR_FALSE) ; // recursive delete
return NS_OK ;
}

View File

@@ -0,0 +1,91 @@
/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*-
*
* The contents of this file are subject to the Mozilla Public
* License Version 1.1 (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.mozilla.org/MPL/
*
* Software distributed under the License is distributed on an "AS
* IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or
* implied. See the License for the specific language governing
* rights and limitations under the License.
*
* The Original Code is Mozilla Communicator.
*
* The Initial Developer of the Original Code is Intel Corp.
* Portions created by Intel Corp. are
* Copyright (C) 1999, 1999 Intel Corp. All
* Rights Reserved.
*
* Contributor(s): Yixiong Zou <yixiong.zou@intel.com>
* Carl Wong <carl.wong@intel.com>
*/
/*
* This file is part of filecache implementation.
*
* nsNetDiskCache is the main disk cache module that will create
* the cache database, and then store and retrieve nsDiskCacheRecord
* objects from it. It also contains some basic error recovery procedure.
*/
#ifndef __gen_nsNetDiskCache_h__
#define __gen_nsNetDiskCache_h__
#include "nsINetDataDiskCache.h"
#include "nsNetDiskCacheCID.h"
#include "nsCOMPtr.h"
#include "nsIPref.h"
#include "nsDBAccessor.h"
class nsIURI; /* forward decl */
class nsICachedNetData; /* forward decl */
class nsISimpleEnumerator; /* forward decl */
class nsIFileSpec; /* forward decl */
/* starting interface: nsNetDiskCache */
class nsNetDiskCache : public nsINetDataDiskCache {
public:
NS_DECL_ISUPPORTS
NS_DECL_NSINETDATACACHE
NS_DECL_NSINETDATADISKCACHE
NS_IMETHOD Init(void) ;
nsNetDiskCache() ;
virtual ~nsNetDiskCache() ;
protected:
NS_IMETHOD InitDB(void) ;
NS_IMETHOD CreateDir(nsIFileSpec* dir_spec) ;
NS_IMETHOD GetSpecialEntry(void) ;
NS_IMETHOD SetSpecialEntry(void) ;
NS_IMETHOD RenameCacheSubDirs(void) ;
NS_IMETHOD DBRecovery(void) ;
NS_IMETHOD RemoveFolder(nsFileSpec aFolder) ;
private:
PRBool m_Enabled ;
PRUint32 m_NumEntries ;
nsCOMPtr<nsINetDataCache> m_pNextCache ;
nsCOMPtr<nsIFileSpec> m_pDiskCacheFolder ;
nsCOMPtr<nsIFileSpec> m_DBFile ;
PRUint32 m_MaxEntries ;
PRUint32 m_StorageInUse ;
nsIDBAccessor* m_DB ;
// this is used to indicate a db corruption
PRBool m_DBCorrupted ;
friend class nsDiskCacheRecord ;
friend class nsDiskCacheRecordChannel ;
friend class nsDBEnumerator ;
} ;
#endif /* __gen_nsNetDiskCache_h__ */

View File

@@ -0,0 +1,32 @@
/*
* The contents of this file are subject to the Mozilla Public
* License Version 1.1 (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.mozilla.org/MPL/
*
* Software distributed under the License is distributed on an "AS
* IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or
* implied. See the License for the specific language governing
* rights and limitations under the License.
*
* The Original Code is Mozilla Communicator.
*
* The Initial Developer of the Original Code is Intel Corp.
* Portions created by Intel Corp. are
* Copyright (C) 1999, 1999 Intel Corp. All
* Rights Reserved.
*
* Contributor(s): Yixiong Zou <yixiong.zou@intel.com>
* Carl Wong <carl.wong@intel.com>
*/
#ifndef _nsNetDiskCacheCID_h_
#define _nsNetDiskCacheCID_h_
#define NS_NETDISKCACHE_CID_STR "ECFEEA00-7201-11d3-87FE-000629D01344"
#define NS_NETDISKCACHE_CID \
{ 0xecfeea00, 0x7201, 0x11d3, \
{ 0x87, 0xfe, 0x0, 0x6, 0x29, 0xd0, 0x13, 0x44 }}
#endif /* _nsNetDiskCacheCID_h_ */

View File

@@ -15,31 +15,36 @@
# Reserved.
#
DEPTH = ../../..
DEPTH = ../../../..
topsrcdir = @top_srcdir@
srcdir = @srcdir@
VPATH = @srcdir@
include $(DEPTH)/config/autoconf.mk
PROGRAM = widget
REQUIRES = libreg xpcom
CPPSRCS = \
main.cpp \
nsWidgetTest.cpp \
diskcache.cpp \
$(NULL)
SIMPLE_PROGRAMS = $(CPPSRCS:.cpp=)
ifdef NO_LD_ARCHIVE_FLAGS
LOST_SYM_LIBS = -lxpcomds_s -lxptinfo -lmozreg_s
endif
LIBS = \
$(MOZ_TIMER_LIBS) \
$(MOZ_WIDGET_SUPPORT_LIBS) \
-lxpcom \
-lmozjs \
-lraptorgfx \
-lxpcom \
-lmozdbm_s \
$(MOZ_NECKO_UTIL_LIBS) \
$(LOST_SYM_LIBS) \
$(NSPR_LIBS) \
$(TK_LIBS) \
$(NULL)
include $(topsrcdir)/config/rules.mk
CXXFLAGS += $(MOZ_TOOLKIT_REGISTRY_CFLAGS)
LOCAL_INCLUDES = -I$(srcdir)/..
DEFINES += -DUSE_NSREG -DCACHE

View File

@@ -0,0 +1,836 @@
/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 4 -*-
*
* 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.
*/
#include "nsIStreamListener.h"
#include "nsIStreamObserver.h"
#include "nsIServiceManager.h"
#include "nsIInputStream.h"
#include "nsIOutputStream.h"
#include "nsIEventQueue.h"
#include "nsIEventQueueService.h"
#include "nsIChannel.h"
#include "nsCOMPtr.h"
#include "nsString.h"
#include <stdio.h>
#include <unistd.h>
#include "nsINetDataCache.h"
#include "nsINetDataCacheRecord.h"
//#include "nsMemCacheCID.h"
#include "nsNetDiskCache.h"
#include "nsIPref.h"
#include "prenv.h"
#include "nsIFileStream.h"
// Number of test entries to be placed in the cache
#define NUM_CACHE_ENTRIES 250
// Cache content stream length will have random length between zero and
// MAX_CONTENT_LENGTH bytes
#define MAX_CONTENT_LENGTH 20000
// Length of random-data cache entry key
#define CACHE_KEY_LENGTH 15
// Length of random-data cache entry meta-data
#define CACHE_METADATA_LENGTH 100
//static NS_DEFINE_CID(kMemCacheCID, NS_MEM_CACHE_FACTORY_CID);
static NS_DEFINE_CID(kEventQueueServiceCID, NS_EVENTQUEUESERVICE_CID);
static NS_DEFINE_CID(kDiskCacheCID, NS_NETDISKCACHE_CID) ;
static NS_DEFINE_CID(kPrefCID, NS_PREF_CID);
static NS_DEFINE_IID(kIPrefIID, NS_IPREF_IID);
// Mapping from test case number to RecordID
static PRInt32 recordID[NUM_CACHE_ENTRIES];
static PRInt32
mapRecordIdToTestNum(PRInt32 aRecordID)
{
int i;
for (i = 0; i < NUM_CACHE_ENTRIES; i++) {
if (recordID[i] == aRecordID)
return i;
}
return -1;
}
// A supply of stream data to either store or compare with
class nsITestDataStream {
public:
virtual ~nsITestDataStream() {};
virtual PRUint32 Next() = 0;
virtual void Read(char* aBuf, PRUint32 aCount) = 0;
virtual PRBool Match(char* aBuf, PRUint32 aCount) = 0;
virtual void Skip(PRUint32 aCount) = 0;
};
// A reproducible stream of random data.
class RandomStream : public nsITestDataStream {
public:
RandomStream(PRUint32 aSeed) {
mStartSeed = mState = aSeed;
}
PRUint32 GetStartSeed() {
return mStartSeed;
}
PRUint32 Next() {
mState = 1103515245 * mState + 12345;
return mState;
}
void Read(char* aBuf, PRUint32 aCount) {
PRUint32 i;
for (i = 0; i < aCount; i++) {
*aBuf++ = Next();
}
}
PRBool
Match(char* aBuf, PRUint32 aCount) {
PRUint32 i;
for (i = 0; i < aCount; i++) {
if (*aBuf++ != (char)(Next() & 0xff))
return PR_FALSE;
}
return PR_TRUE;
}
void
Skip(PRUint32 aCount) {
while (aCount--)
Next();
}
protected:
PRUint32 mState;
PRUint32 mStartSeed;
};
// A stream of data that increments on each byte that is read, modulo 256
class CounterStream : public nsITestDataStream {
public:
CounterStream(PRUint32 aSeed) {
mStartSeed = mState = aSeed;
}
PRUint32 GetStartSeed() {
return mStartSeed;
}
PRUint32 Next() {
mState += 1;
mState &= 0xff;
return mState;
}
void Read(char* aBuf, PRUint32 aCount) {
PRUint32 i;
for (i = 0; i < aCount; i++) {
*aBuf++ = Next();
}
}
PRBool
Match(char* aBuf, PRUint32 aCount) {
PRUint32 i;
for (i = 0; i < aCount; i++) {
if (*aBuf++ != (char)Next())
return PR_FALSE;
}
return PR_TRUE;
}
void
Skip(PRUint32 aCount) {
mState += aCount;
mState &= 0xff;
}
protected:
PRUint32 mState;
PRUint32 mStartSeed;
};
static int gNumReaders = 0;
static PRUint32 gTotalBytesRead = 0;
static PRUint32 gTotalDuration = 0;
class nsReader : public nsIStreamListener {
public:
NS_DECL_ISUPPORTS
nsReader()
: mStartTime(0), mBytesRead(0)
{
NS_INIT_REFCNT();
gNumReaders++;
}
virtual ~nsReader() {
delete mTestDataStream;
gNumReaders--;
}
nsresult
Init(nsIChannel *aChannel, nsITestDataStream* aRandomStream, PRUint32 aExpectedStreamLength) {
mChannel = aChannel;
mTestDataStream = aRandomStream;
mExpectedStreamLength = aExpectedStreamLength;
mRefCnt = 1;
return NS_OK;
}
NS_IMETHOD OnStartRequest(nsIChannel* channel,
nsISupports* context) {
mStartTime = PR_IntervalNow();
return NS_OK;
}
NS_IMETHOD OnDataAvailable(nsIChannel* channel,
nsISupports* context,
nsIInputStream *aIStream,
PRUint32 aSourceOffset,
PRUint32 aLength) {
char buf[1025];
while (aLength > 0) {
PRUint32 amt;
PRBool match;
aIStream->Read(buf, sizeof buf, &amt);
if (amt == 0) break;
aLength -= amt;
mBytesRead += amt;
match = mTestDataStream->Match(buf, amt);
NS_ASSERTION(match, "Stored data was corrupted on read");
}
return NS_OK;
}
NS_IMETHOD OnStopRequest(nsIChannel* channel,
nsISupports* context,
nsresult aStatus,
const PRUnichar* aMsg) {
PRIntervalTime endTime;
PRIntervalTime duration;
endTime = PR_IntervalNow();
duration = (endTime - mStartTime);
if (NS_FAILED(aStatus)) printf("channel failed.\n");
// printf("read %d bytes\n", mBytesRead);
NS_ASSERTION(mBytesRead == mExpectedStreamLength,
"Stream in cache is wrong length");
gTotalBytesRead += mBytesRead;
gTotalDuration += duration;
// Release channel
mChannel = 0;
return NS_OK;
}
protected:
PRIntervalTime mStartTime;
PRUint32 mBytesRead;
nsITestDataStream* mTestDataStream;
PRUint32 mExpectedStreamLength;
nsCOMPtr<nsIChannel> mChannel;
};
NS_IMPL_ISUPPORTS2(nsReader, nsIStreamListener, nsIStreamObserver)
static nsIEventQueue* eventQueue;
nsresult
InitQueue() {
nsresult rv;
NS_WITH_SERVICE(nsIEventQueueService, eventQService, kEventQueueServiceCID, &rv);
NS_ASSERTION(NS_SUCCEEDED(rv), "Couldn't get event queue service");
rv = eventQService->CreateThreadEventQueue();
NS_ASSERTION(NS_SUCCEEDED(rv), "Couldn't create event queue");
rv = eventQService->GetThreadEventQueue(PR_CurrentThread(), &eventQueue);
NS_ASSERTION(NS_SUCCEEDED(rv), "Couldn't get event queue for main thread");
return NS_OK;
}
// Process events until all streams are OnStopRequest'ed
nsresult
WaitForEvents() {
while (gNumReaders) {
eventQueue->ProcessPendingEvents();
}
return NS_OK;
}
// Read data for a single cache record and compare against testDataStream
nsresult
TestReadStream(nsINetDataCacheRecord *record, nsITestDataStream *testDataStream,
PRUint32 expectedStreamLength)
{
nsCOMPtr<nsIChannel> channel;
nsresult rv;
PRUint32 actualContentLength;
rv = record->NewChannel(0, getter_AddRefs(channel));
NS_ASSERTION(NS_SUCCEEDED(rv), " ");
rv = record->GetStoredContentLength(&actualContentLength);
NS_ASSERTION(NS_SUCCEEDED(rv), " ");
NS_ASSERTION(actualContentLength == expectedStreamLength,
"nsINetDataCacheRecord::GetContentLength() busted ?");
nsReader *reader = new nsReader;
reader->AddRef();
rv = reader->Init(channel, testDataStream, expectedStreamLength);
NS_ASSERTION(NS_SUCCEEDED(rv), " ");
rv = channel->AsyncRead(0, -1, 0, reader);
NS_ASSERTION(NS_SUCCEEDED(rv), " ");
reader->Release();
return NS_OK;
}
// Check that records can be retrieved using their record-ID, in addition
// to using the opaque key.
nsresult
TestRecordID(nsINetDataCache *cache)
{
nsresult rv;
nsCOMPtr<nsINetDataCacheRecord> record;
RandomStream *randomStream;
PRUint32 metaDataLength;
char cacheKey[CACHE_KEY_LENGTH];
char *metaData;
PRUint32 testNum;
PRBool match;
for (testNum = 0; testNum < NUM_CACHE_ENTRIES; testNum++) {
randomStream = new RandomStream(testNum);
randomStream->Read(cacheKey, sizeof cacheKey);
rv = cache->GetCachedNetDataByID(recordID[testNum], getter_AddRefs(record));
NS_ASSERTION(NS_SUCCEEDED(rv), "Couldn't obtain record using record ID");
// Match against previously stored meta-data
rv = record->GetMetaData(&metaDataLength, &metaData);
NS_ASSERTION(NS_SUCCEEDED(rv), "Couldn't get record meta-data");
match = randomStream->Match(metaData, metaDataLength);
NS_ASSERTION(match, "Meta-data corrupted or incorrect");
nsAllocator::Free(metaData);
delete randomStream;
}
return NS_OK;
}
// Check that all cache entries in the database are enumerated and that
// no duplicates appear.
nsresult
TestEnumeration(nsINetDataCache *cache)
{
nsresult rv;
nsCOMPtr<nsINetDataCacheRecord> record;
nsCOMPtr<nsISupports> tempISupports;
nsCOMPtr<nsISimpleEnumerator> iterator;
RandomStream *randomStream;
PRUint32 metaDataLength;
char cacheKey[CACHE_KEY_LENGTH];
char *metaData;
PRUint32 testNum;
PRBool match;
PRInt32 recID;
int numRecords = 0;
// Iterate over all records in the cache
rv = cache->NewCacheEntryIterator(getter_AddRefs(iterator));
NS_ASSERTION(NS_SUCCEEDED(rv), "Couldn't create new cache entry iterator");
PRBool notDone;
while (1) {
// Done iterating ?
rv = iterator->HasMoreElements(&notDone);
if (NS_FAILED(rv)) return rv;
if (!notDone)
break;
// Get next record in iteration
rv = iterator->GetNext(getter_AddRefs(tempISupports));
NS_ASSERTION(NS_SUCCEEDED(rv), "iterator bustage");
record = do_QueryInterface(tempISupports);
numRecords++;
// Get record ID
rv = record->GetRecordID(&recID);
NS_ASSERTION(NS_SUCCEEDED(rv), "Couldn't get Record ID");
testNum = mapRecordIdToTestNum(recID);
NS_ASSERTION(testNum != -1, "Corrupted Record ID ?");
// Erase mapping from table, so that duplicate enumerations are detected
recordID[testNum] = -1;
// Make sure stream matches test data
randomStream = new RandomStream(testNum);
randomStream->Read(cacheKey, sizeof cacheKey);
// Match against previously stored meta-data
rv = record->GetMetaData(&metaDataLength, &metaData);
NS_ASSERTION(NS_SUCCEEDED(rv), "Couldn't get record meta-data");
match = randomStream->Match(metaData, metaDataLength);
NS_ASSERTION(match, "Meta-data corrupted or incorrect");
nsAllocator::Free(metaData);
delete randomStream;
}
NS_ASSERTION(numRecords == NUM_CACHE_ENTRIES, "Iteration bug");
return NS_OK;
}
// Read the test data that was written in FillCache(), checking for
// corruption, truncation.
nsresult
TestRead(nsINetDataCache *cache)
{
nsresult rv;
PRBool inCache;
nsCOMPtr<nsINetDataCacheRecord> record;
RandomStream *randomStream;
PRUint32 metaDataLength;
char cacheKey[CACHE_KEY_LENGTH];
char *metaData, *storedCacheKey;
PRUint32 testNum, storedCacheKeyLength;
PRBool match;
for (testNum = 0; testNum < NUM_CACHE_ENTRIES; testNum++) {
randomStream = new RandomStream(testNum);
randomStream->Read(cacheKey, sizeof cacheKey);
// Ensure that entry is in the cache
rv = cache->Contains(cacheKey, sizeof cacheKey, &inCache);
NS_ASSERTION(NS_SUCCEEDED(rv), " ");
NS_ASSERTION(inCache, "nsINetDataCache::Contains error");
rv = cache->GetCachedNetData(cacheKey, sizeof cacheKey, getter_AddRefs(record));
NS_ASSERTION(NS_SUCCEEDED(rv), " ");
// Match against previously stored meta-data
match = record->GetMetaData(&metaDataLength, &metaData);
NS_ASSERTION(NS_SUCCEEDED(rv), " ");
match = randomStream->Match(metaData, metaDataLength);
NS_ASSERTION(match, "Meta-data corrupted or incorrect");
nsAllocator::Free(metaData);
// Test GetKey() method
rv = record->GetKey(&storedCacheKeyLength, &storedCacheKey);
NS_ASSERTION(NS_SUCCEEDED(rv) &&
(storedCacheKeyLength == sizeof cacheKey) &&
!memcmp(storedCacheKey, &cacheKey[0], sizeof cacheKey),
"nsINetDataCacheRecord::GetKey failed");
nsAllocator::Free(storedCacheKey);
PRUint32 expectedStreamLength = randomStream->Next() & 0xffff;
TestReadStream(record, randomStream, expectedStreamLength);
}
WaitForEvents();
// Compute rate in MB/s
double rate = gTotalBytesRead / PR_IntervalToMilliseconds(gTotalDuration);
rate *= NUM_CACHE_ENTRIES;
rate *= 1000;
rate /= (1024 * 1024);
printf("Read %d bytes at a rate of %5.1f MB per second \n",
gTotalBytesRead, rate);
return NS_OK;
}
// Repeatedly call SetStoredContentLength() on a cache entry and make
// read the stream's data to ensure that it's not corrupted by the effect
nsresult
TestTruncation(nsINetDataCache *cache)
{
nsresult rv;
nsCOMPtr<nsINetDataCacheRecord> record;
RandomStream *randomStream;
char cacheKey[CACHE_KEY_LENGTH];
randomStream = new RandomStream(0);
randomStream->Read(cacheKey, sizeof cacheKey);
rv = cache->GetCachedNetData(cacheKey, sizeof cacheKey, getter_AddRefs(record));
NS_ASSERTION(NS_SUCCEEDED(rv), " ");
randomStream->Skip(CACHE_METADATA_LENGTH);
PRUint32 initialStreamLength = randomStream->Next() & 0xffff;
delete randomStream;
PRUint32 i;
PRUint32 delta = initialStreamLength / 64;
for (i = initialStreamLength; i >= delta; i -= delta) {
PRUint32 expectedStreamLength = i;
// Do the truncation
record->SetStoredContentLength(expectedStreamLength);
randomStream = new RandomStream(0);
randomStream->Skip(CACHE_KEY_LENGTH + CACHE_METADATA_LENGTH + 1);
TestReadStream(record, randomStream, expectedStreamLength);
WaitForEvents();
}
return NS_OK;
}
// Write known data to random offsets in a single cache entry and test
// resulting stream for correctness.
nsresult
TestOffsetWrites(nsINetDataCache *cache)
{
nsresult rv;
nsCOMPtr<nsINetDataCacheRecord> record;
nsCOMPtr<nsIChannel> channel;
nsCOMPtr<nsIOutputStream> outStream;
char buf[512];
char cacheKey[CACHE_KEY_LENGTH];
RandomStream *randomStream;
randomStream = new RandomStream(0);
randomStream->Read(cacheKey, sizeof cacheKey);
rv = cache->GetCachedNetData(cacheKey, sizeof cacheKey, getter_AddRefs(record));
NS_ASSERTION(NS_SUCCEEDED(rv), "Couldn't access record via opaque cache key");
nsCOMPtr<nsIFileSpec> file ;
record->GetFilename(getter_AddRefs(file)) ;
char* name ;
file->GetUnixStyleFilePath(&name) ;
printf(" file name is %s \n", name) ;
// Write buffer-fulls of data at random offsets into the cache entry.
// Data written is (offset % 0xff)
PRUint32 startingOffset;
PRUint32 streamLength = 0;
PRUint32 len = 0 ;
CounterStream *counterStream;
int i = 0;
for (i = 0; i < 257; i++) {
rv = record->NewChannel(0, getter_AddRefs(channel));
NS_ASSERTION(NS_SUCCEEDED(rv), " ");
startingOffset = streamLength ? streamLength - (randomStream->Next() % sizeof buf): 0;
rv = channel->OpenOutputStream(startingOffset, getter_AddRefs(outStream));
NS_ASSERTION(NS_SUCCEEDED(rv), " ");
truncate(name, startingOffset) ;
counterStream = new CounterStream(startingOffset);
counterStream->Read(buf, sizeof buf);
nsresult status ;
nsCOMPtr<nsIRandomAccessStore> ras = do_QueryInterface(outStream, &status);
if (NS_FAILED(status)) {
// mState = END_WRITE;
return NS_ERROR_FAILURE;
}
PRIntn offset ;
ras->Tell(&offset) ;
// printf(" offset is %d \n", offset) ;
PRUint32 numWritten;
rv = outStream->Write(buf, sizeof buf, &numWritten);
NS_ASSERTION(NS_SUCCEEDED(rv), " ");
NS_ASSERTION(numWritten == sizeof buf, "Write() bug?");
streamLength = startingOffset + sizeof buf;
rv = outStream->Close();
NS_ASSERTION(NS_SUCCEEDED(rv), "Couldn't close channel");
delete counterStream;
record->GetStoredContentLength(&len) ;
if(len != streamLength)
printf(" offset = %d is wrong, filesize = %d\n", startingOffset, len) ;
}
/*
rv = record->NewChannel(0, getter_AddRefs(channel));
NS_ASSERTION(NS_SUCCEEDED(rv), " ");
startingOffset = 208;
rv = channel->OpenOutputStream(startingOffset, getter_AddRefs(outStream));
NS_ASSERTION(NS_SUCCEEDED(rv), " ");
counterStream = new CounterStream(startingOffset);
counterStream->Read(buf, sizeof buf);
nsresult status ;
nsCOMPtr<nsIRandomAccessStore> ras = do_QueryInterface(outStream, &status);
if (NS_FAILED(status)) {
// mState = END_WRITE;
return NS_ERROR_FAILURE;
}
PRIntn offset = 0 ;
ras->Tell(&offset) ;
printf(" offset is %d \n", offset) ;
PRUint32 numWritten;
rv = outStream->Write(buf, sizeof buf, &numWritten);
NS_ASSERTION(NS_SUCCEEDED(rv), " ");
NS_ASSERTION(numWritten == sizeof buf, "Write() bug?");
streamLength = startingOffset + sizeof buf;
rv = outStream->Close();
NS_ASSERTION(NS_SUCCEEDED(rv), "Couldn't close channel");
delete counterStream;
record->GetStoredContentLength(&len) ;
if(len != streamLength)
printf(" offset = %d is wrong, filesize = %d\n", startingOffset, len) ;
*/
delete randomStream;
counterStream = new CounterStream(0);
TestReadStream(record, counterStream, streamLength);
WaitForEvents();
return NS_OK;
}
// Create entries in the network data cache, using random data for the
// key, the meta-data and the stored content data.
nsresult
FillCache(nsINetDataCache *cache)
{
nsresult rv;
PRBool inCache;
nsCOMPtr<nsINetDataCacheRecord> record;
nsCOMPtr<nsIChannel> channel;
nsCOMPtr<nsIOutputStream> outStream;
char buf[1000];
PRUint32 metaDataLength;
char cacheKey[CACHE_KEY_LENGTH];
char metaData[CACHE_METADATA_LENGTH];
PRUint32 testNum;
char *data;
RandomStream *randomStream;
PRIntervalTime startTime = PR_IntervalNow();
for (testNum = 0; testNum < NUM_CACHE_ENTRIES; testNum++) {
randomStream = new RandomStream(testNum);
randomStream->Read(cacheKey, sizeof cacheKey);
// No entry should be in cache until we add it
rv = cache->Contains(cacheKey, sizeof cacheKey, &inCache);
NS_ASSERTION(NS_SUCCEEDED(rv), " ");
NS_ASSERTION(!inCache, "nsINetDataCache::Contains error");
rv = cache->GetCachedNetData(cacheKey, sizeof cacheKey, getter_AddRefs(record));
NS_ASSERTION(NS_SUCCEEDED(rv), "Couldn't access record via opaque cache key");
// Test nsINetDataCacheRecord::GetRecordID()
rv = record->GetRecordID(&recordID[testNum]);
NS_ASSERTION(NS_SUCCEEDED(rv), "Couldn't get Record ID");
// Test nsINetDataCache::GetNumEntries()
PRUint32 numEntries = (PRUint32)-1;
rv = cache->GetNumEntries(&numEntries);
NS_ASSERTION(NS_SUCCEEDED(rv), "Couldn't get number of cache entries");
NS_ASSERTION(numEntries == testNum + 1, "GetNumEntries failure");
// Record meta-data should be initially empty
rv = record->GetMetaData(&metaDataLength, &data);
NS_ASSERTION(NS_SUCCEEDED(rv), " ");
if ((metaDataLength != 0) || (data != 0))
return NS_ERROR_FAILURE;
// Store random data as meta-data
randomStream->Read(metaData, sizeof metaData);
record->SetMetaData(sizeof metaData, metaData);
rv = record->NewChannel(0, getter_AddRefs(channel));
NS_ASSERTION(NS_SUCCEEDED(rv), " ");
rv = channel->OpenOutputStream(0, getter_AddRefs(outStream));
NS_ASSERTION(NS_SUCCEEDED(rv), " ");
PRUint32 beforeOccupancy;
rv = cache->GetStorageInUse(&beforeOccupancy);
NS_ASSERTION(NS_SUCCEEDED(rv), "Couldn't get cache occupancy");
int streamLength = randomStream->Next() & 0xffff;
int remaining = streamLength;
while (remaining) {
PRUint32 numWritten;
int amount = PR_MIN(sizeof buf, remaining);
randomStream->Read(buf, amount);
rv = outStream->Write(buf, amount, &numWritten);
NS_ASSERTION(NS_SUCCEEDED(rv), " ");
NS_ASSERTION(numWritten == (PRUint32)amount, "Write() bug?");
remaining -= amount;
}
outStream->Close();
PRUint32 afterOccupancy;
rv = cache->GetStorageInUse(&afterOccupancy);
NS_ASSERTION(NS_SUCCEEDED(rv), "Couldn't get cache occupancy");
PRUint32 streamLengthInKB = streamLength >> 10;
NS_ASSERTION((afterOccupancy - beforeOccupancy) >= streamLengthInKB,
"nsINetDataCache::GetStorageInUse() is busted");
// *Now* there should be an entry in the cache
rv = cache->Contains(cacheKey, sizeof cacheKey, &inCache);
NS_ASSERTION(NS_SUCCEEDED(rv), " ");
NS_ASSERTION(inCache, "nsINetDataCache::Contains error");
delete randomStream;
}
PRIntervalTime endTime = PR_IntervalNow();
return NS_OK;
}
nsresult NS_AutoregisterComponents()
{
nsresult rv = nsComponentManager::AutoRegister(nsIComponentManager::NS_Startup,
NULL /* default */);
return rv;
}
PRBool initPref ()
{
nsresult rv;
NS_WITH_SERVICE(nsIPref, prefPtr, kPrefCID, &rv);
if (NS_FAILED(rv))
return false;
nsCOMPtr<nsIFileSpec> fileSpec;
rv = NS_NewFileSpec (getter_AddRefs(fileSpec));
if (NS_FAILED(rv))
return false;
nsCString defaultPrefFile = PR_GetEnv ("MOZILLA_FIVE_HOME");
if (defaultPrefFile.Length())
defaultPrefFile += "/";
else
defaultPrefFile = "./";
defaultPrefFile += "default_prefs.js";
fileSpec->SetUnixStyleFilePath (defaultPrefFile.GetBuffer());
PRBool exists = false;
fileSpec->Exists(&exists);
if (exists)
prefPtr->ReadUserPrefsFrom(fileSpec);
else
return false;
return true;
}
int
main(int argc, char* argv[])
{
initPref() ;
nsresult rv;
nsCOMPtr<nsINetDataCache> cache;
rv = NS_AutoregisterComponents();
NS_ASSERTION(NS_SUCCEEDED(rv), "Couldn't register XPCOM components");
rv = nsComponentManager::CreateInstance(kDiskCacheCID, nsnull,
NS_GET_IID(nsINetDataCache),
getter_AddRefs(cache));
NS_ASSERTION(NS_SUCCEEDED(rv), "Couldn't create memory cache factory");
InitQueue();
PRUnichar* description;
rv = cache->GetDescription(&description);
NS_ASSERTION(NS_SUCCEEDED(rv), "Couldn't get cache description");
nsCAutoString descStr(description);
printf("Testing: %s\n", descStr.GetBuffer());
rv = cache->RemoveAll();
NS_ASSERTION(NS_SUCCEEDED(rv), "Couldn't clear cache");
PRUint32 startOccupancy;
rv = cache->GetStorageInUse(&startOccupancy);
NS_ASSERTION(NS_SUCCEEDED(rv), "Couldn't get cache occupancy");
PRUint32 numEntries = (PRUint32)-1;
rv = cache->GetNumEntries(&numEntries);
NS_ASSERTION(NS_SUCCEEDED(rv), "Couldn't get number of cache entries");
NS_ASSERTION(numEntries == 0, "Couldn't clear cache");
rv = FillCache(cache);
NS_ASSERTION(NS_SUCCEEDED(rv), "Couldn't fill cache with random test data");
rv = TestRead(cache);
NS_ASSERTION(NS_SUCCEEDED(rv), "Couldn't read random test data from cache");
rv = TestRecordID(cache);
NS_ASSERTION(NS_SUCCEEDED(rv), "Couldn't index records using record ID");
rv = TestEnumeration(cache);
NS_ASSERTION(NS_SUCCEEDED(rv), "Couldn't successfully enumerate records");
rv = TestTruncation(cache);
NS_ASSERTION(NS_SUCCEEDED(rv), "Couldn't successfully truncate records");
rv = TestOffsetWrites(cache);
NS_ASSERTION(NS_SUCCEEDED(rv), "Couldn't successfully write to records using non-zero offsets");
rv = cache->RemoveAll();
NS_ASSERTION(NS_SUCCEEDED(rv), "Couldn't clear cache");
rv = cache->GetNumEntries(&numEntries);
NS_ASSERTION(NS_SUCCEEDED(rv), "Couldn't get number of cache entries");
NS_ASSERTION(numEntries == 0, "Couldn't clear cache");
PRUint32 endOccupancy;
rv = cache->GetStorageInUse(&endOccupancy);
NS_ASSERTION(NS_SUCCEEDED(rv), "Couldn't get cache occupancy");
NS_ASSERTION(startOccupancy == endOccupancy, "Cache occupancy not correctly computed ?");
return 0;
}

View File

@@ -1,3 +1,4 @@
# Generated automatically from Makefile.in by configure.
#
# 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
@@ -17,22 +18,31 @@
DEPTH = ../../..
topsrcdir = @top_srcdir@
VPATH = @srcdir@
srcdir = @srcdir@
VPATH = @srcdir@
include $(DEPTH)/config/autoconf.mk
LIBRARY_NAME = widgetsupport_s
MODULE = nkcache
CPPSRCS = nsWidgetSupport.cpp
LIBRARY_NAME = nkmemcache_s
EXPORTS = nsWidgetSupport.h
REQUIRES = nspr dbm
# we don't want the shared lib, but we want to force the creation of a static lib.
EXPORTS=nsMemCacheCID.h \
nsMemCache.h \
$(NULL)
CPPSRCS = \
nsMemCache.cpp \
nsMemCacheRecord.cpp \
nsMemCacheChannel.cpp \
$(NULL)
# we don't want the shared lib, but we want to force the creation of a
# static lib.
override NO_SHARED_LIB=1
override NO_STATIC_LIB=
include $(topsrcdir)/config/rules.mk
CXXFLAGS += $(TK_CFLAGS)

View File

@@ -15,38 +15,28 @@
# Copyright (C) 1998 Netscape Communications Corporation. All Rights
# Reserved.
DEPTH=..\..\..\..
LIBRARY_NAME=timer_s
DEPTH=..\..\..
DEFINES=-DWIN32_LEAN_AND_MEAN -DSTRICT
include <$(DEPTH)/config/config.mak>
CPPSRCS = \
nsTimer.cpp \
MODULE = nkcache
LIBRARY_NAME = nkmemcache_s
CPP_OBJS = \
.\$(OBJDIR)\nsMemCache.obj \
.\$(OBJDIR)\nsMemCacheRecord.obj \
.\$(OBJDIR)\nsMemCacheChannel.obj \
$(NULL)
MODULE=timer
REQUIRES=xpcom
CPP_OBJS= \
.\$(OBJDIR)\nsTimer.obj \
$(NULL)
LINCS= \
-I..\
-I$(PUBLIC)\xpcom \
$(NULL)
LCFLAGS = \
$(LCFLAGS) \
$(DEFINES) \
$(NULL)
EXPORTS=nsMemCacheCID.h
include <$(DEPTH)\config\rules.mak>
libs:: $(LIBRARY)
install:: $(LIBRARY)
$(MAKE_INSTALL) $(LIBRARY) $(DIST)\lib
clobber::
rm -f $(DIST)\lib\$(LIBRARY_NAME).lib
rm -f $(PDBFILE).pdb
rm -rf $(OBJDIR)
rm -f $(DIST)\lib\$(LIBRARY_NAME).lib

View File

@@ -0,0 +1,334 @@
/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*-
* The contents of this file are subject to the Netscape Public
* License Version 1.1 (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.mozilla.org/NPL/
*
* Software distributed under the License is distributed on an "AS
* IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or
* implied. See the License for the specific language governing
* rights and limitations under the License.
*
* The Original Code is Mozilla Communicator client code, released
* March 31, 1998.
*
* The Initial Developer of the Original Code is Netscape
* Communications Corporation. Portions created by Netscape are
* Copyright (C) 1998-1999 Netscape Communications Corporation. All
* Rights Reserved.
*
*/
/**
* nsMemCache is the implementation of an in-memory network-data
* cache, used to cache the responses to network retrieval commands.
* Each cache entry may contain both content, e.g. GIF image data, and
* associated metadata, e.g. HTTP headers. Each entry is indexed by
* two different keys: a record id number and an opaque key, which is
* created by the cache manager by combining the URI with a "secondary
* key", e.g. HTTP post data.
*/
#include "nsMemCache.h"
#include "nsMemCacheRecord.h"
#include "nsIGenericFactory.h"
#include "nsString.h"
#include "nsHashtable.h"
#include "nsHashtableEnumerator.h"
#include "nsEnumeratorUtils.h"
PRInt32 nsMemCache::gRecordSerialNumber = 0;
nsMemCache::nsMemCache()
: mNumEntries(0), mOccupancy(0), mEnabled(PR_TRUE),
mHashTable(0)
{
NS_INIT_REFCNT();
}
nsMemCache::~nsMemCache()
{
nsresult rv;
rv = RemoveAll();
NS_ASSERTION(NS_SUCCEEDED(rv) && (mNumEntries == 0),
"Failure to shut down memory cache. "
"Somewhere, someone is holding references to at least one cache record");
delete mHashTable;
}
nsresult
nsMemCache::Init()
{
mHashTable = new nsHashtable(256);
if (!mHashTable)
return NS_ERROR_OUT_OF_MEMORY;
return NS_OK;
}
NS_IMPL_ISUPPORTS(nsMemCache, NS_GET_IID(nsINetDataCache))
NS_IMETHODIMP
nsMemCache::GetDescription(PRUnichar * *aDescription)
{
nsAutoString description("Memory Cache");
*aDescription = description.ToNewUnicode();
if (!*aDescription)
return NS_ERROR_OUT_OF_MEMORY;
return NS_OK;
}
NS_IMETHODIMP
nsMemCache::Contains(const char *aKey, PRUint32 aKeyLength, PRBool *aFound)
{
nsOpaqueKey *opaqueKey = new nsOpaqueKey(aKey, aKeyLength);
if (!opaqueKey)
return NS_ERROR_OUT_OF_MEMORY;
*aFound = mHashTable->Exists(opaqueKey);
delete opaqueKey;
return NS_OK;
}
NS_IMETHODIMP
nsMemCache::GetCachedNetData(const char *aKey, PRUint32 aKeyLength,
nsINetDataCacheRecord* *aRecord)
{
nsresult rv;
nsMemCacheRecord* record = 0;
nsOpaqueKey *opaqueKey2 = 0;
nsOpaqueKey *opaqueKey3 = 0;
nsOpaqueKey *opaqueKey;
opaqueKey = new nsOpaqueKey(aKey, aKeyLength);
if (!opaqueKey)
goto out_of_memory;
record = (nsMemCacheRecord*)mHashTable->Get(opaqueKey);
delete opaqueKey;
// No existing cache database entry was found. Create a new one.
// This requires two mappings in the hash table:
// Record ID ==> record
// Opaque key ==> record
if (!record) {
record = new nsMemCacheRecord;
if (!record)
goto out_of_memory;
rv = record->Init(aKey, aKeyLength, ++gRecordSerialNumber, this);
if (NS_FAILED(rv)) goto out_of_memory;
// Index the record by opaque key
opaqueKey2 = new nsOpaqueKey(record->mKey, record->mKeyLength);
if (!opaqueKey2) goto out_of_memory;
mHashTable->Put(opaqueKey2, record);
// Index the record by it's record ID
char *recordIDbytes = NS_REINTERPRET_CAST(char *, &record->mRecordID);
opaqueKey3 = new nsOpaqueKey(recordIDbytes,
sizeof record->mRecordID);
if (!opaqueKey3) {
// Clean up the first record from the hash table
mHashTable->Remove(opaqueKey);
goto out_of_memory;
}
mHashTable->Put(opaqueKey3, record);
// The hash table holds on to the record
record->AddRef();
delete opaqueKey2;
delete opaqueKey3;
mNumEntries++;
}
record->AddRef();
*aRecord = record;
return NS_OK;
out_of_memory:
delete opaqueKey2;
delete opaqueKey3;
delete record;
return NS_ERROR_OUT_OF_MEMORY;
}
NS_IMETHODIMP
nsMemCache::GetCachedNetDataByID(PRInt32 RecordID,
nsINetDataCacheRecord* *aRecord)
{
nsOpaqueKey opaqueKey(NS_REINTERPRET_CAST(const char *, &RecordID),
sizeof RecordID);
*aRecord = (nsINetDataCacheRecord*)mHashTable->Get(&opaqueKey);
if (*aRecord) {
NS_ADDREF(*aRecord);
return NS_OK;
}
return NS_ERROR_FAILURE;
}
NS_METHOD
nsMemCache::Delete(nsMemCacheRecord* aRecord)
{
nsMemCacheRecord *removedRecord;
char *recordIDbytes = NS_REINTERPRET_CAST(char *, &aRecord->mRecordID);
nsOpaqueKey opaqueRecordIDKey(recordIDbytes,
sizeof aRecord->mRecordID);
removedRecord = (nsMemCacheRecord*)mHashTable->Remove(&opaqueRecordIDKey);
NS_ASSERTION(removedRecord == aRecord, "memory cache database inconsistent");
nsOpaqueKey opaqueKey(aRecord->mKey, aRecord->mKeyLength);
removedRecord = (nsMemCacheRecord*)mHashTable->Remove(&opaqueKey);
NS_ASSERTION(removedRecord == aRecord, "memory cache database inconsistent");
aRecord->Release();
mNumEntries--;
return NS_OK;
}
NS_IMETHODIMP
nsMemCache::GetEnabled(PRBool *aEnabled)
{
NS_ENSURE_ARG(aEnabled);
*aEnabled = mEnabled;
return NS_OK;
}
NS_IMETHODIMP
nsMemCache::SetEnabled(PRBool aEnabled)
{
mEnabled = aEnabled;
return NS_OK;
}
NS_IMETHODIMP
nsMemCache::GetFlags(PRUint32 *aFlags)
{
NS_ENSURE_ARG(aFlags);
*aFlags = MEMORY_CACHE;
return NS_OK;
}
NS_IMETHODIMP
nsMemCache::GetNumEntries(PRUint32 *aNumEntries)
{
NS_ENSURE_ARG(aNumEntries);
*aNumEntries = mNumEntries;
return NS_OK;
}
NS_IMETHODIMP
nsMemCache::GetMaxEntries(PRUint32 *aMaxEntries)
{
NS_ENSURE_ARG(aMaxEntries);
*aMaxEntries = MEM_CACHE_MAX_ENTRIES;
return NS_OK;
}
static NS_METHOD
HashEntryConverter(nsHashKey *aKey, void *aValue,
void *unused, nsISupports **retval)
{
nsMemCacheRecord *record;
nsOpaqueKey *opaqueKey;
record = (nsMemCacheRecord*)aValue;
opaqueKey = (nsOpaqueKey*)aKey;
// Hash table keys that index cache entries by their record ID
// shouldn't be enumerated.
if ((opaqueKey->GetKeyLength() == sizeof(PRInt32))) {
#ifdef DEBUG
PRInt32 recordID;
record->GetRecordID(&recordID);
NS_ASSERTION(*((PRInt32*)opaqueKey->GetKey()) == recordID,
"Key has incorrect key length");
#endif
return NS_ERROR_FAILURE;
}
NS_IF_ADDREF(record);
*retval = NS_STATIC_CAST(nsISupports*, record);
return NS_OK;
}
NS_IMETHODIMP
nsMemCache::NewCacheEntryIterator(nsISimpleEnumerator* *aIterator)
{
nsCOMPtr<nsIEnumerator> iterator;
NS_ENSURE_ARG(aIterator);
NS_NewHashtableEnumerator(mHashTable, HashEntryConverter,
mHashTable, getter_AddRefs(iterator));
return NS_NewAdapterEnumerator(aIterator, iterator);
}
NS_IMETHODIMP
nsMemCache::GetNextCache(nsINetDataCache* *aNextCache)
{
NS_ENSURE_ARG(aNextCache);
*aNextCache = mNextCache;
NS_ADDREF(*aNextCache);
return NS_OK;
}
NS_IMETHODIMP
nsMemCache::SetNextCache(nsINetDataCache* aNextCache)
{
mNextCache = aNextCache;
return NS_OK;
}
NS_IMETHODIMP
nsMemCache::GetStorageInUse(PRUint32 *aStorageInUse)
{
NS_ENSURE_ARG(aStorageInUse);
// Convert from bytes to KB
*aStorageInUse = (mOccupancy >> 10);
return NS_OK;
}
NS_IMETHODIMP
nsMemCache::RemoveAll(void)
{
PRBool failed;
nsCOMPtr<nsISimpleEnumerator> iterator;
nsCOMPtr<nsISupports> recordSupports;
nsCOMPtr<nsINetDataCacheRecord> record;
nsresult rv;
failed = PR_FALSE;
rv = NewCacheEntryIterator(getter_AddRefs(iterator));
if (NS_FAILED(rv))
return rv;
PRBool notDone;
while (1) {
rv = iterator->HasMoreElements(&notDone);
if (NS_FAILED(rv)) return rv;
if (!notDone)
break;
iterator->GetNext(getter_AddRefs(recordSupports));
record = do_QueryInterface(recordSupports);
recordSupports = 0;
PRUint32 bytesUsed;
record->GetStoredContentLength(&bytesUsed);
rv = record->Delete();
if (NS_FAILED(rv)) {
failed = PR_TRUE;
continue;
}
mOccupancy -= bytesUsed;
}
if (failed)
return NS_ERROR_FAILURE;
return NS_OK;
}

View File

@@ -0,0 +1,83 @@
/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*-
* The contents of this file are subject to the Netscape Public
* License Version 1.1 (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.mozilla.org/NPL/
*
* Software distributed under the License is distributed on an "AS
* IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or
* implied. See the License for the specific language governing
* rights and limitations under the License.
*
* The Original Code is Mozilla Communicator client code, released
* March 31, 1998.
*
* The Initial Developer of the Original Code is Netscape
* Communications Corporation. Portions created by Netscape are
* Copyright (C) 1998-1999 Netscape Communications Corporation. All
* Rights Reserved.
*
*/
/**
* nsMemCache is the implementation of an in-memory network-data
* cache, used to cache the responses to network retrieval commands.
* Each cache entry may contain both content, e.g. GIF image data, and
* associated metadata, e.g. HTTP headers. Each entry is indexed by
* two different keys: a record id number and an opaque key, which is
* created by the cache manager by combining the URI with a "secondary
* key", e.g. HTTP post data.
*/
#ifndef _nsMemCache_h_
#define _nsMemCache_h_
#include "nsINetDataCache.h"
// Maximum number of URIs that may be resident in the cache
#define MEM_CACHE_MAX_ENTRIES 1000
#define MEM_CACHE_SEGMENT_SIZE (1 << 12)
#define MEM_CACHE_MAX_ENTRY_SIZE (1 << 20)
class nsHashtable;
class nsMemCacheRecord;
class nsMemCache : public nsINetDataCache
{
public:
nsMemCache();
virtual ~nsMemCache();
nsresult Init();
// nsISupports methods
NS_DECL_ISUPPORTS
// nsINetDataCache methods
NS_DECL_NSINETDATACACHE
// Factory
static NS_METHOD nsMemCacheConstructor(nsISupports *aOuter, REFNSIID aIID,
void **aResult);
protected:
PRUint32 mNumEntries;
PRUint32 mOccupancy; // Memory used, in bytes
PRBool mEnabled; // If false, bypass mem cache
nsINetDataCache* mNextCache;
// Mapping from either opaque key or record ID to nsMemCacheRecord
nsHashtable* mHashTable;
// Used to assign record ID's
static PRInt32 gRecordSerialNumber;
NS_METHOD Delete(nsMemCacheRecord* aRecord);
friend class nsMemCacheRecord;
friend class nsMemCacheChannel;
};
#endif // _nsMemCache_h_

View File

@@ -0,0 +1,36 @@
/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*-
* The contents of this file are subject to the Netscape Public
* License Version 1.1 (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.mozilla.org/NPL/
*
* Software distributed under the License is distributed on an "AS
* IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or
* implied. See the License for the specific language governing
* rights and limitations under the License.
*
* The Original Code is Mozilla Communicator client code, released
* March 31, 1998.
*
* The Initial Developer of the Original Code is Netscape
* Communications Corporation. Portions created by Netscape are
* Copyright (C) 1998-1999 Netscape Communications Corporation. All
* Rights Reserved.
*
*/
// XPCOM Class ID for the network data in-memory cache
#ifndef nsMEMCACHECID_h__
#define nsMEMCACHECID_h__
// {e4710560-7de2-11d3-90cb-0040056a906e}
#define NS_MEM_CACHE_FACTORY_CID \
{ \
0xe4710560, \
0x7de2, \
0x11d3, \
{0x90, 0xcb, 0x00, 0x40, 0x05, 0x6a, 0x90, 0x6e} \
}
#endif // nsMEMCACHECID_h__

View File

@@ -0,0 +1,462 @@
/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*-
* The contents of this file are subject to the Netscape Public
* License Version 1.1 (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.mozilla.org/NPL/
*
* Software distributed under the License is distributed on an "AS
* IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or
* implied. See the License for the specific language governing
* rights and limitations under the License.
*
* The Original Code is Mozilla Communicator client code, released
* March 31, 1998.
*
* The Initial Developer of the Original Code is Netscape
* Communications Corporation. Portions created by Netscape are
* Copyright (C) 1998-1999 Netscape Communications Corporation. All
* Rights Reserved.
*
*/
#include "nsMemCache.h"
#include "nsMemCacheChannel.h"
#include "nsIStreamListener.h"
#include "nsIChannel.h"
#include "nsIStorageStream.h"
#include "nsIOutputStream.h"
#include "nsIServiceManager.h"
#include "nsIEventQueueService.h"
#include "nsNetUtil.h"
#include "nsILoadGroup.h"
static NS_DEFINE_CID(kIOServiceCID, NS_IOSERVICE_CID);
static NS_DEFINE_CID(kEventQueueService, NS_EVENTQUEUESERVICE_CID);
NS_IMPL_ISUPPORTS(nsMemCacheChannel, NS_GET_IID(nsIChannel))
void
nsMemCacheChannel::NotifyStorageInUse(PRInt32 aBytesUsed)
{
mRecord->mCache->mOccupancy += aBytesUsed;
}
/**
* This class acts as an adaptor around a synchronous input stream to add async
* read capabilities. It adds methods for initiating, suspending, resuming and
* cancelling async reads.
*/
class AsyncReadStreamAdaptor : public nsIInputStream {
public:
AsyncReadStreamAdaptor(nsMemCacheChannel* aChannel, nsIInputStream *aSyncStream):
mSyncStream(aSyncStream), mDataAvailCursor(0),
mRemaining(0), mAvailable(0), mChannel(aChannel), mAborted(PR_FALSE), mSuspended(PR_FALSE)
{
NS_INIT_REFCNT();
NS_ADDREF(mChannel);
}
virtual ~AsyncReadStreamAdaptor() {
mChannel->mAsyncReadStream = 0;
NS_RELEASE(mChannel);
}
NS_DECL_ISUPPORTS
nsresult
IsPending(PRBool* aIsPending) {
*aIsPending = (mRemaining != 0) && !mAborted;
return NS_OK;
}
nsresult
Cancel(void) {
mAborted = PR_TRUE;
return mStreamListener->OnStopRequest(mChannel, mContext, NS_BINDING_ABORTED, nsnull);
}
nsresult
Suspend(void) { mSuspended = PR_TRUE; return NS_OK; }
nsresult
Resume(void) {
if (!mSuspended)
return NS_ERROR_FAILURE;
mSuspended = PR_FALSE;
return NextListenerEvent();
}
NS_IMETHOD
Available(PRUint32 *aNumBytes) { return mAvailable; }
NS_IMETHOD
Read(char* aBuf, PRUint32 aCount, PRUint32 *aBytesRead) {
if (mAborted)
return NS_ERROR_ABORT;
*aBytesRead = 0;
aCount = PR_MIN(aCount, mAvailable);
nsresult rv = mSyncStream->Read(aBuf, aCount, aBytesRead);
mAvailable -= *aBytesRead;
if (NS_FAILED(rv) && (rv != NS_BASE_STREAM_WOULD_BLOCK)) {
Fail();
return rv;
}
if (!mSuspended && !mAvailable) {
rv = NextListenerEvent();
if (NS_FAILED(rv)) {
Fail();
return rv;
}
}
return NS_OK;
}
NS_IMETHOD
Close() {
nsresult rv = mSyncStream->Close();
mSyncStream = 0;
mContext = 0;
mStreamListener = 0;
return rv;
}
nsresult
AsyncRead(PRUint32 aStartPosition, PRInt32 aReadCount,
nsISupports* aContext, nsIStreamListener* aListener) {
nsresult rv;
nsIEventQueue *eventQ;
mContext = aContext;
mStreamListener = aListener;
mRemaining = aReadCount;
NS_WITH_SERVICE(nsIIOService, serv, kIOServiceCID, &rv);
if (NS_FAILED(rv)) return rv;
NS_WITH_SERVICE(nsIEventQueueService, eventQService, kEventQueueService, &rv);
if (NS_FAILED(rv)) return rv;
rv = eventQService->GetThreadEventQueue(PR_CurrentThread(), &eventQ);
if (NS_FAILED(rv)) return rv;
rv = NS_NewAsyncStreamListener(aListener, eventQ,
getter_AddRefs(mStreamListener));
NS_RELEASE(eventQ);
if (NS_FAILED(rv)) return rv;
rv = mStreamListener->OnStartRequest(mChannel, aContext);
if (NS_FAILED(rv)) return rv;
return NextListenerEvent();
}
protected:
nsresult
Fail(void) {
mAborted = PR_TRUE;
return mStreamListener->OnStopRequest(mChannel, mContext, NS_BINDING_FAILED, nsnull);
}
nsresult
NextListenerEvent() {
PRUint32 available;
nsresult rv = mSyncStream->Available(&available);
if (NS_FAILED(rv)) return rv;
available -= mAvailable;
available = PR_MIN(available, mRemaining);
if (available) {
PRUint32 size = PR_MIN(available, MEM_CACHE_SEGMENT_SIZE);
rv = mStreamListener->OnDataAvailable(mChannel, mContext, this,
mDataAvailCursor, size);
mDataAvailCursor += size;
mRemaining -= size;
mAvailable += size;
return rv;
} else {
rv = mStreamListener->OnStopRequest(mChannel, mContext, NS_OK, nsnull);
AsyncReadStreamAdaptor* thisAlias = this;
NS_RELEASE(thisAlias);
return rv;
}
}
private:
nsCOMPtr<nsISupports> mContext; // Opaque context passed to AsyncRead()
nsCOMPtr<nsIStreamListener> mStreamListener; // Stream listener that has been proxied
nsCOMPtr<nsIInputStream> mSyncStream; // Underlying synchronous stream that is
// being converted to an async stream
PRUint32 mDataAvailCursor;
PRUint32 mRemaining; // Size of AsyncRead request less bytes for
// consumer OnDataAvailable's that were fired
PRUint32 mAvailable; // Number of bytes for which OnDataAvailable fired
nsMemCacheChannel* mChannel; // Associated memory cache channel, strong link
// but can not use nsCOMPtr
PRBool mAborted; // Abort() has been called
PRBool mSuspended; // Suspend() has been called
};
NS_IMPL_ISUPPORTS(AsyncReadStreamAdaptor, NS_GET_IID(nsIInputStream))
// The only purpose of this output stream wrapper is to adjust the cache's
// overall occupancy as new data flows into the cache entry.
class MemCacheWriteStreamWrapper : public nsIOutputStream {
public:
MemCacheWriteStreamWrapper(nsMemCacheChannel* aChannel, nsIOutputStream *aBaseStream):
mBaseStream(aBaseStream), mChannel(aChannel)
{
NS_INIT_REFCNT();
NS_ADDREF(mChannel);
}
virtual ~MemCacheWriteStreamWrapper() { NS_RELEASE(mChannel); };
static nsresult
Create(nsMemCacheChannel* aChannel, nsIOutputStream *aBaseStream, nsIOutputStream* *aWrapper) {
MemCacheWriteStreamWrapper *wrapper =
new MemCacheWriteStreamWrapper(aChannel, aBaseStream);
if (!wrapper) return NS_ERROR_OUT_OF_MEMORY;
NS_ADDREF(wrapper);
*aWrapper = wrapper;
return NS_OK;
}
NS_DECL_ISUPPORTS
NS_IMETHOD
Write(const char *aBuffer, PRUint32 aCount, PRUint32 *aNumWritten) {
*aNumWritten = 0;
nsresult rv = mBaseStream->Write(aBuffer, aCount, aNumWritten);
mChannel->NotifyStorageInUse(*aNumWritten);
return rv;
}
NS_IMETHOD
Flush() { return mBaseStream->Flush(); }
NS_IMETHOD
Close() { return mBaseStream->Close(); }
private:
nsCOMPtr<nsIOutputStream> mBaseStream;
nsMemCacheChannel* mChannel;
};
NS_IMPL_ISUPPORTS(MemCacheWriteStreamWrapper, NS_GET_IID(nsIOutputStream))
nsMemCacheChannel::nsMemCacheChannel(nsMemCacheRecord *aRecord, nsILoadGroup *aLoadGroup)
: mRecord(aRecord)
{
NS_INIT_REFCNT();
mRecord->mNumChannels++;
}
nsMemCacheChannel::~nsMemCacheChannel()
{
mRecord->mNumChannels--;
}
NS_IMETHODIMP
nsMemCacheChannel::IsPending(PRBool* aIsPending)
{
*aIsPending = PR_FALSE;
if (!mAsyncReadStream)
return NS_OK;
return mAsyncReadStream->IsPending(aIsPending);
}
NS_IMETHODIMP
nsMemCacheChannel::Cancel(void)
{
if (!mAsyncReadStream)
return NS_ERROR_FAILURE;
return mAsyncReadStream->Cancel();
}
NS_IMETHODIMP
nsMemCacheChannel::Suspend(void)
{
if (!mAsyncReadStream)
return NS_ERROR_FAILURE;
return mAsyncReadStream->Suspend();
}
NS_IMETHODIMP
nsMemCacheChannel::Resume(void)
{
if (!mAsyncReadStream)
return NS_ERROR_FAILURE;
return mAsyncReadStream->Resume();
}
NS_IMETHODIMP
nsMemCacheChannel::GetOriginalURI(nsIURI * *aURI)
{
// Not required
return NS_ERROR_NOT_IMPLEMENTED;
}
NS_IMETHODIMP
nsMemCacheChannel::GetURI(nsIURI * *aURI)
{
// Not required to be implemented, since it is implemented by cache manager
NS_ASSERTION(0, "nsMemCacheChannel method unexpectedly called");
return NS_ERROR_NOT_IMPLEMENTED;
}
NS_IMETHODIMP
nsMemCacheChannel::OpenInputStream(PRUint32 aStartPosition, PRInt32 aReadCount,
nsIInputStream* *aResult)
{
nsresult rv;
NS_ENSURE_ARG(aResult);
if (mInputStream)
return NS_ERROR_NOT_AVAILABLE;
rv = mRecord->mStorageStream->NewInputStream(aStartPosition, getter_AddRefs(mInputStream));
*aResult = mInputStream;
NS_ADDREF(*aResult);
return rv;
}
NS_IMETHODIMP
nsMemCacheChannel::OpenOutputStream(PRUint32 startPosition, nsIOutputStream* *aResult)
{
nsresult rv;
NS_ENSURE_ARG(aResult);
nsCOMPtr<nsIOutputStream> outputStream;
PRUint32 oldLength;
mRecord->mStorageStream->GetLength(&oldLength);
rv = mRecord->mStorageStream->GetOutputStream(startPosition, getter_AddRefs(outputStream));
if (NS_FAILED(rv)) return rv;
if (startPosition < oldLength)
NotifyStorageInUse(startPosition - oldLength);
return MemCacheWriteStreamWrapper::Create(this, outputStream, aResult);
}
NS_IMETHODIMP
nsMemCacheChannel::AsyncOpen(nsIStreamObserver *observer, nsISupports *ctxt)
{
// Not required
return NS_ERROR_NOT_IMPLEMENTED;
}
NS_IMETHODIMP
nsMemCacheChannel::AsyncRead(PRUint32 aStartPosition, PRInt32 aReadCount,
nsISupports *aContext, nsIStreamListener *aListener)
{
nsCOMPtr<nsIInputStream> inputStream;
nsresult rv = OpenInputStream(aStartPosition, aReadCount, getter_AddRefs(inputStream));
if (NS_FAILED(rv)) return rv;
AsyncReadStreamAdaptor *asyncReadStreamAdaptor;
asyncReadStreamAdaptor = new AsyncReadStreamAdaptor(this, inputStream);
if (!asyncReadStreamAdaptor)
return NS_ERROR_OUT_OF_MEMORY;
NS_ADDREF(asyncReadStreamAdaptor);
mAsyncReadStream = asyncReadStreamAdaptor;
rv = asyncReadStreamAdaptor->AsyncRead(aStartPosition, aReadCount, aContext, aListener);
if (NS_FAILED(rv))
delete asyncReadStreamAdaptor;
return rv;
}
NS_IMETHODIMP
nsMemCacheChannel::AsyncWrite(nsIInputStream *fromStream, PRUint32 startPosition,
PRInt32 writeCount, nsISupports *ctxt,
nsIStreamObserver *observer)
{
// Not required to be implemented
NS_ASSERTION(0, "nsMemCacheChannel method unexpectedly called");
return NS_ERROR_NOT_IMPLEMENTED;
}
NS_IMETHODIMP
nsMemCacheChannel::GetLoadAttributes(nsLoadFlags *aLoadAttributes)
{
// Not required to be implemented, since it is implemented by cache manager
NS_ASSERTION(0, "nsMemCacheChannel method unexpectedly called");
return NS_ERROR_NOT_IMPLEMENTED;
}
NS_IMETHODIMP
nsMemCacheChannel::SetLoadAttributes(nsLoadFlags aLoadAttributes)
{
// Not required to be implemented, since it is implemented by cache manager
NS_ASSERTION(0, "nsMemCacheChannel method unexpectedly called");
return NS_ERROR_NOT_IMPLEMENTED;
}
NS_IMETHODIMP
nsMemCacheChannel::GetContentType(char* *aContentType)
{
// Not required to be implemented, since it is implemented by cache manager
NS_ASSERTION(0, "nsMemCacheChannel method unexpectedly called");
return NS_ERROR_NOT_IMPLEMENTED;
}
NS_IMETHODIMP
nsMemCacheChannel::GetContentLength(PRInt32 *aContentLength)
{
// Not required to be implemented, since it is implemented by cache manager
NS_ASSERTION(0, "nsMemCacheChannel method unexpectedly called");
return NS_ERROR_NOT_IMPLEMENTED;
}
NS_IMETHODIMP
nsMemCacheChannel::GetOwner(nsISupports* *aOwner)
{
*aOwner = mOwner.get();
NS_IF_ADDREF(*aOwner);
return NS_OK;
}
NS_IMETHODIMP
nsMemCacheChannel::SetOwner(nsISupports* aOwner)
{
// Not required to be implemented, since it is implemented by cache manager
mOwner = aOwner;
return NS_OK;
}
NS_IMETHODIMP
nsMemCacheChannel::GetLoadGroup(nsILoadGroup* *aLoadGroup)
{
// Not required to be implemented, since it is implemented by cache manager
NS_ASSERTION(0, "nsMemCacheChannel method unexpectedly called");
return NS_ERROR_NOT_IMPLEMENTED;
}
NS_IMETHODIMP
nsMemCacheChannel::SetLoadGroup(nsILoadGroup* aLoadGroup)
{
// Not required to be implemented, since it is implemented by cache manager
NS_ASSERTION(0, "nsMemCacheChannel method unexpectedly called");
return NS_ERROR_NOT_IMPLEMENTED;
}
NS_IMETHODIMP
nsMemCacheChannel::GetNotificationCallbacks(nsIInterfaceRequestor* *aNotificationCallbacks)
{
// Not required to be implemented, since it is implemented by cache manager
NS_ASSERTION(0, "nsMemCacheChannel method unexpectedly called");
return NS_ERROR_NOT_IMPLEMENTED;
}
NS_IMETHODIMP
nsMemCacheChannel::SetNotificationCallbacks(nsIInterfaceRequestor* aNotificationCallbacks)
{
// Not required to be implemented, since it is implemented by cache manager
NS_ASSERTION(0, "nsMemCacheChannel method unexpectedly called");
return NS_ERROR_NOT_IMPLEMENTED;
}

View File

@@ -0,0 +1,61 @@
/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*-
* The contents of this file are subject to the Netscape Public
* License Version 1.1 (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.mozilla.org/NPL/
*
* Software distributed under the License is distributed on an "AS
* IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or
* implied. See the License for the specific language governing
* rights and limitations under the License.
*
* The Original Code is Mozilla Communicator client code, released
* March 31, 1998.
*
* The Initial Developer of the Original Code is Netscape
* Communications Corporation. Portions created by Netscape are
* Copyright (C) 1998-1999 Netscape Communications Corporation. All
* Rights Reserved.
*
*/
#ifndef _nsMemCacheChannel_h_
#define _nsMemCacheChannel_h_
#include "nsMemCacheRecord.h"
#include "nsIChannel.h"
#include "nsIInputStream.h"
#include "nsCOMPtr.h"
class AsyncReadStreamAdaptor;
class nsMemCacheChannel : public nsIChannel
{
public:
// Constructors and Destructor
nsMemCacheChannel(nsMemCacheRecord *aRecord, nsILoadGroup *aLoadGroup);
virtual ~nsMemCacheChannel();
// Declare nsISupports methods
NS_DECL_ISUPPORTS
// Declare nsIRequest methods
NS_DECL_NSIREQUEST
// Declare nsIChannel methods
NS_DECL_NSICHANNEL
protected:
void NotifyStorageInUse(PRInt32 aBytesUsed);
nsCOMPtr<nsMemCacheRecord> mRecord;
nsCOMPtr<nsIInputStream> mInputStream;
nsCOMPtr<nsISupports> mOwner;
AsyncReadStreamAdaptor* mAsyncReadStream; // non-owning pointer
friend class MemCacheWriteStreamWrapper;
friend class AsyncReadStreamAdaptor;
};
#endif // _nsMemCacheChannel_h_

View File

@@ -0,0 +1,164 @@
/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*-
* The contents of this file are subject to the Netscape Public
* License Version 1.1 (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.mozilla.org/NPL/
*
* Software distributed under the License is distributed on an "AS
* IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or
* implied. See the License for the specific language governing
* rights and limitations under the License.
*
* The Original Code is Mozilla Communicator client code, released
* March 31, 1998.
*
* The Initial Developer of the Original Code is Netscape
* Communications Corporation. Portions created by Netscape are
* Copyright (C) 1998-1999 Netscape Communications Corporation. All
* Rights Reserved.
*
*/
#include "nsMemCache.h"
#include "nsMemCacheRecord.h"
#include "nsMemCacheChannel.h"
#include "nsIAllocator.h"
#include "nsStorageStream.h"
static NS_DEFINE_IID(kINetDataCacheRecord, NS_INETDATACACHERECORD_IID);
nsMemCacheRecord::nsMemCacheRecord()
: mKey(0), mKeyLength(0), mMetaData(0), mMetaDataLength(0), mNumChannels(0)
{
NS_INIT_REFCNT();
}
nsMemCacheRecord::~nsMemCacheRecord()
{
if (mMetaData)
delete[] mMetaData;
if (mKey)
delete[] mKey;
}
NS_IMPL_ISUPPORTS(nsMemCacheRecord, NS_GET_IID(nsINetDataCacheRecord))
NS_IMETHODIMP
nsMemCacheRecord::GetKey(PRUint32 *aLength, char **aResult)
{
NS_ENSURE_ARG(aResult);
*aResult = (char *)nsAllocator::Alloc(mKeyLength);
if (!*aResult)
return NS_ERROR_OUT_OF_MEMORY;
memcpy(*aResult, mKey, mKeyLength);
*aLength = mKeyLength;
return NS_OK;
}
nsresult
nsMemCacheRecord::Init(const char *aKey, PRUint32 aKeyLength,
PRUint32 aRecordID, nsMemCache *aCache)
{
nsresult rv;
NS_ASSERTION(!mKey, "Memory cache record key set multiple times");
rv = NS_NewStorageStream(MEM_CACHE_SEGMENT_SIZE, MEM_CACHE_MAX_ENTRY_SIZE,
getter_AddRefs(mStorageStream));
if (NS_FAILED(rv)) return rv;
mKey = new char[aKeyLength];
if (!mKey)
return NS_ERROR_OUT_OF_MEMORY;
memcpy(mKey, aKey, aKeyLength);
mKeyLength = aKeyLength;
mRecordID = aRecordID;
mCache = aCache;
return NS_OK;
}
NS_IMETHODIMP
nsMemCacheRecord::GetRecordID(PRInt32 *aRecordID)
{
NS_ENSURE_ARG(aRecordID);
*aRecordID = mRecordID;
return NS_OK;
}
NS_IMETHODIMP
nsMemCacheRecord::GetMetaData(PRUint32 *aLength, char **aResult)
{
NS_ENSURE_ARG(aResult);
*aResult = 0;
if (mMetaDataLength) {
*aResult = (char*)nsAllocator::Alloc(mMetaDataLength);
if (!*aResult)
return NS_ERROR_OUT_OF_MEMORY;
memcpy(*aResult, mMetaData, mMetaDataLength);
}
*aLength = mMetaDataLength;
return NS_OK;
}
NS_IMETHODIMP
nsMemCacheRecord::SetMetaData(PRUint32 aLength, const char *aData)
{
if (mMetaData)
delete[] mMetaData;
mMetaData = new char[aLength];
if (!mMetaData)
return NS_ERROR_OUT_OF_MEMORY;
memcpy(mMetaData, aData, aLength);
mMetaDataLength = aLength;
return NS_OK;
}
NS_IMETHODIMP
nsMemCacheRecord::GetStoredContentLength(PRUint32 *aStoredContentLength)
{
NS_ENSURE_ARG(aStoredContentLength);
return mStorageStream->GetLength(aStoredContentLength);
}
NS_IMETHODIMP
nsMemCacheRecord::SetStoredContentLength(PRUint32 aStoredContentLength)
{
PRUint32 before, after;
mStorageStream->GetLength(&before);
nsresult rv = mStorageStream->SetLength(aStoredContentLength);
if (NS_FAILED(rv)) return rv;
mStorageStream->GetLength(&after);
mCache->mOccupancy -= (before - after);
return NS_OK;
}
NS_IMETHODIMP
nsMemCacheRecord::Delete(void)
{
if (mNumChannels)
return NS_ERROR_NOT_AVAILABLE;
return mCache->Delete(this);
}
NS_IMETHODIMP
nsMemCacheRecord::GetFilename(nsIFileSpec* *aFilename)
{
return NS_ERROR_NOT_IMPLEMENTED;
}
NS_IMETHODIMP
nsMemCacheRecord::NewChannel(nsILoadGroup *aLoadGroup, nsIChannel* *aResult)
{
NS_ENSURE_ARG(aResult);
nsMemCacheChannel* channel = new nsMemCacheChannel(this, aLoadGroup);
if (!channel)
return NS_ERROR_OUT_OF_MEMORY;
NS_ADDREF(channel);
*aResult = NS_STATIC_CAST(nsIChannel*, channel);
return NS_OK;
}

View File

@@ -0,0 +1,65 @@
/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*-
* The contents of this file are subject to the Netscape Public
* License Version 1.1 (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.mozilla.org/NPL/
*
* Software distributed under the License is distributed on an "AS
* IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or
* implied. See the License for the specific language governing
* rights and limitations under the License.
*
* The Original Code is Mozilla Communicator client code, released
* March 31, 1998.
*
* The Initial Developer of the Original Code is Netscape
* Communications Corporation. Portions created by Netscape are
* Copyright (C) 1998-1999 Netscape Communications Corporation. All
* Rights Reserved.
*
*/
#ifndef _nsMemCacheRecord_h_
#define _nsMemCacheRecord_h_
#include "nsINetDataCacheRecord.h"
#include "nsIStorageStream.h"
#include "nsCOMPtr.h"
class nsMemCache;
class nsMemCacheRecord : public nsINetDataCacheRecord
{
public:
// Declare interface methods
NS_DECL_ISUPPORTS
NS_DECL_NSINETDATACACHERECORD
protected:
// Constructors and Destructor
nsMemCacheRecord();
virtual ~nsMemCacheRecord();
nsresult Init(const char *aKey, PRUint32 aKeyLength,
PRUint32 aRecordID, nsMemCache *aCache);
char* mKey; // opaque database key for this record
PRUint32 mKeyLength; // length, in bytes, of mKey
PRInt32 mRecordID; // An alternate key for this record
char* mMetaData; // opaque URI metadata
PRUint32 mMetaDataLength; // length, in bytes, of mMetaData
nsMemCache* mCache; // weak pointer to the cache database
// that this record inhabits
nsCOMPtr<nsIStorageStream> mStorageStream;
PRUint32 mNumChannels; // Count un-Release'ed nsIChannels
friend class nsMemCache;
friend class nsMemCacheChannel;
};
#endif // _nsMemCacheRecord_h_

View File

@@ -26,29 +26,30 @@ VPATH = @srcdir@
include $(DEPTH)/config/autoconf.mk
LIBRARY_NAME = raptorbasewidget_s
MODULE = nkcache
LIBRARY_NAME = nkcachemgr_s
REQUIRES = nspr
EXPORTS = \
nsCacheManager.h \
$(NULL)
CPPSRCS = \
nsBaseWidget.cpp \
nsBaseFilePicker.cpp \
nsTransferable.cpp \
nsXIFFormatConverter.cpp \
nsBaseDragService.cpp \
nsBaseClipboard.cpp \
nsFileSpecWithUIImpl.cpp \
nsPrimitiveHelpers.cpp \
nsCacheManager.cpp \
nsCachedNetData.cpp \
nsReplacementPolicy.cpp \
nsCacheEntryChannel.cpp \
$(NULL)
LOCAL_INCLUDES = \
-I$(srcdir)/../$(MOZ_WIDGET_TOOLKIT) \
-I$(srcdir) \
$(NULL)
LOCAL_INCLUDES = -I$(srcdir)/../public -I$(srcdir)/../include
# we don't want the shared lib, but we want to force the creation of a static lib.
EXTRA_LIBS = $(NSPR_LIBS)
# we don't want the shared lib, but we want to force the creation of a
# static lib.
override NO_SHARED_LIB=1
override NO_STATIC_LIB=
include $(topsrcdir)/config/rules.mk
CXXFLAGS += $(TK_CFLAGS)

45
mozilla/netwerk/cache/mgr/Makefile.win vendored Executable file
View File

@@ -0,0 +1,45 @@
#!gmake
#
# The contents of this file are subject to the Netscape Public
# License Version 1.1 (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.mozilla.org/NPL/
#
# Software distributed under the License is distributed on an "AS
# IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or
# implied. See the License for the specific language governing
# rights and limitations under the License.
#
# The Original Code is mozilla.org code.
#
# The Initial Developer of the Original Code is Netscape
# Communications Corporation. Portions created by Netscape are
# Copyright (C) 1998 Netscape Communications Corporation. All
# Rights Reserved.
#
# Contributor(s):
DEPTH=..\..\..
include <$(DEPTH)/config/config.mak>
MODULE = nkcache
LIBRARY_NAME = nkcachemgr_s
CPP_OBJS = \
.\$(OBJDIR)\nsCacheManager.obj \
.\$(OBJDIR)\nsCachedNetData.obj \
.\$(OBJDIR)\nsReplacementPolicy.obj \
.\$(OBJDIR)\nsCacheEntryChannel.obj \
$(NULL)
include <$(DEPTH)\config\rules.mak>
install:: $(LIBRARY)
$(MAKE_INSTALL) $(LIBRARY) $(DIST)\lib
clobber::
rm -rf $(OBJDIR)
rm -f $(DIST)\lib\$(LIBRARY_NAME).lib

View File

@@ -0,0 +1,261 @@
/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*-
*
* The contents of this file are subject to the Netscape Public
* License Version 1.1 (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.mozilla.org/NPL/
*
* Software distributed under the License is distributed on an "AS
* IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or
* implied. See the License for the specific language governing
* rights and limitations under the License.
*
* The Original Code is Mozilla Communicator client code, released
* March 31, 1998.
*
* The Initial Developer of the Original Code is Netscape
* Communications Corporation. Portions created by Netscape are
* Copyright (C) 1999 Netscape Communications Corporation. All
* Rights Reserved.
*
* Contributor(s):
* Scott Furman, fur@netscape.com
*/
#include "nsCacheManager.h"
#include "nsCacheEntryChannel.h"
#include "nsIOutputStream.h"
#include "nsIIOService.h"
#include "nsIServiceManager.h"
#include "nsIStreamListener.h"
nsCacheEntryChannel::nsCacheEntryChannel(nsCachedNetData* aCacheEntry, nsIChannel* aChannel,
nsILoadGroup* aLoadGroup):
nsChannelProxy(aChannel), mCacheEntry(aCacheEntry), mLoadGroup(aLoadGroup), mLoadAttributes(0)
{
NS_ASSERTION(aCacheEntry->mChannelCount < 0xFF, "Overflowed channel counter");
mCacheEntry->mChannelCount++;
NS_INIT_REFCNT();
}
nsCacheEntryChannel::~nsCacheEntryChannel()
{
mCacheEntry->mChannelCount--;
}
NS_IMPL_ISUPPORTS3(nsCacheEntryChannel, nsISupports, nsIChannel, nsIRequest)
// A proxy for nsIOutputStream
class CacheOutputStream : public nsIOutputStream {
public:
CacheOutputStream(nsIOutputStream *aOutputStream, nsCachedNetData *aCacheEntry):
mOutputStream(aOutputStream), mCacheEntry(aCacheEntry), mStartTime(PR_Now())
{ NS_INIT_REFCNT(); }
virtual ~CacheOutputStream() {
mCacheEntry->NoteDownloadTime(mStartTime, PR_Now());
mCacheEntry->ClearFlag(nsCachedNetData::UPDATE_IN_PROGRESS);
}
NS_DECL_ISUPPORTS
NS_IMETHOD Close() {
return mOutputStream->Close();
}
NS_IMETHOD Flush() { return mOutputStream->Flush(); }
NS_IMETHOD
Write(const char *aBuf, PRUint32 aCount, PRUint32 *aActualBytes) {
nsresult rv;
*aActualBytes = 0;
rv = mOutputStream->Write(aBuf, aCount, aActualBytes);
mCacheEntry->mLogicalLength += *aActualBytes;
if (NS_FAILED(rv)) return rv;
nsCacheManager::LimitCacheSize();
return rv;
}
protected:
nsCOMPtr<nsIOutputStream> mOutputStream;
nsCOMPtr<nsCachedNetData> mCacheEntry;
// Time at which stream was opened
PRTime mStartTime;
};
NS_IMPL_ISUPPORTS(CacheOutputStream, NS_GET_IID(nsIOutputStream))
NS_IMETHODIMP
nsCacheEntryChannel::OpenOutputStream(PRUint32 aStartPosition, nsIOutputStream* *aOutputStream)
{
nsresult rv;
nsCOMPtr<nsIOutputStream> baseOutputStream;
rv = mChannel->OpenOutputStream(aStartPosition, getter_AddRefs(baseOutputStream));
if (NS_FAILED(rv)) return rv;
mCacheEntry->NoteUpdate();
mCacheEntry->NoteAccess();
mCacheEntry->mLogicalLength = aStartPosition;
*aOutputStream = new CacheOutputStream(baseOutputStream, mCacheEntry);
if (!*aOutputStream)
return NS_ERROR_OUT_OF_MEMORY;
NS_ADDREF(*aOutputStream);
return NS_OK;
}
NS_IMETHODIMP
nsCacheEntryChannel::OpenInputStream(PRUint32 aStartPosition, PRInt32 aReadCount,
nsIInputStream* *aInputStream)
{
mCacheEntry->NoteAccess();
return mChannel->OpenInputStream(aStartPosition, aReadCount, aInputStream);
}
class CacheManagerStreamListener: public nsIStreamListener {
public:
CacheManagerStreamListener(nsIStreamListener *aListener,
nsILoadGroup *aLoadGroup, nsIChannel *aChannel):
mListener(aListener), mLoadGroup(aLoadGroup), mChannel(aChannel)
{ NS_INIT_REFCNT(); }
virtual ~CacheManagerStreamListener() {}
private:
NS_DECL_ISUPPORTS
NS_IMETHOD
OnDataAvailable(nsIChannel *channel, nsISupports *aContext,
nsIInputStream *inStr, PRUint32 sourceOffset, PRUint32 count) {
return mListener->OnDataAvailable(mChannel, aContext, inStr, sourceOffset, count);
}
NS_IMETHOD
OnStartRequest(nsIChannel *channel, nsISupports *aContext) {
if (mLoadGroup)
mLoadGroup->AddChannel(mChannel, aContext);
return mListener->OnStartRequest(mChannel, aContext);
}
NS_IMETHOD
OnStopRequest(nsIChannel *channel, nsISupports *aContext,
nsresult status, const PRUnichar *errorMsg) {
nsresult rv;
rv = mListener->OnStopRequest(mChannel, aContext, status, errorMsg);
if (mLoadGroup)
mLoadGroup->RemoveChannel(mChannel, aContext, status, errorMsg);
return rv;
}
private:
nsCOMPtr<nsIStreamListener> mListener;
nsCOMPtr<nsILoadGroup> mLoadGroup;
nsCOMPtr<nsIChannel> mChannel;
};
NS_IMPL_ISUPPORTS2(CacheManagerStreamListener, nsIStreamListener, nsIStreamObserver)
NS_IMETHODIMP
nsCacheEntryChannel::AsyncRead(PRUint32 aStartPosition, PRInt32 aReadCount,
nsISupports *aContext, nsIStreamListener *aListener)
{
nsresult rv;
mCacheEntry->NoteAccess();
nsCOMPtr<nsIStreamListener> headListener;
if (mLoadGroup) {
mLoadGroup->GetDefaultLoadAttributes(&mLoadAttributes);
// Create a load group "proxy" listener...
nsCOMPtr<nsILoadGroupListenerFactory> factory;
rv = mLoadGroup->GetGroupListenerFactory(getter_AddRefs(factory));
if (NS_SUCCEEDED(rv) && factory) {
rv = factory->CreateLoadGroupListener(aListener,
getter_AddRefs(headListener));
if (NS_FAILED(rv)) return rv;
}
} else {
headListener = aListener;
}
CacheManagerStreamListener* cacheManagerStreamListener;
nsIChannel *channelForListener;
channelForListener = mProxyChannel ? mProxyChannel.get() : NS_STATIC_CAST(nsIChannel*, this);
cacheManagerStreamListener =
new CacheManagerStreamListener(headListener, mLoadGroup, channelForListener);
if (!cacheManagerStreamListener) return NS_ERROR_OUT_OF_MEMORY;
NS_ADDREF(cacheManagerStreamListener);
rv = mChannel->AsyncRead(aStartPosition, aReadCount, aContext,
cacheManagerStreamListener);
NS_RELEASE(cacheManagerStreamListener);
return rv;
}
// No async writes allowed to the cache yet
NS_IMETHODIMP
nsCacheEntryChannel::AsyncWrite(nsIInputStream *aFromStream, PRUint32 aStartPosition,
PRInt32 aWriteCount, nsISupports *aContext,
nsIStreamObserver *aObserver)
{
return NS_ERROR_NOT_IMPLEMENTED;
}
NS_IMETHODIMP
nsCacheEntryChannel::GetLoadGroup(nsILoadGroup* *aLoadGroup)
{
*aLoadGroup = mLoadGroup;
return NS_OK;
}
NS_IMETHODIMP
nsCacheEntryChannel::GetLoadAttributes(nsLoadFlags *aLoadAttributes)
{
*aLoadAttributes = mLoadAttributes;
return NS_OK;
}
NS_IMETHODIMP
nsCacheEntryChannel::SetLoadAttributes(nsLoadFlags aLoadAttributes)
{
mLoadAttributes = aLoadAttributes;
return NS_OK;
}
static NS_DEFINE_CID(kIOServiceCID, NS_IOSERVICE_CID);
NS_IMETHODIMP
nsCacheEntryChannel::GetURI(nsIURI * *aURI)
{
char* spec;
nsresult rv;
rv = mCacheEntry->GetUriSpec(&spec);
if (NS_FAILED(rv)) return rv;
NS_WITH_SERVICE(nsIIOService, serv, kIOServiceCID, &rv);
if (NS_FAILED(rv)) return rv;
rv = serv->NewURI(spec, 0, aURI);
nsAllocator::Free(spec);
return rv;
}
NS_IMETHODIMP
nsCacheEntryChannel::GetOriginalURI(nsIURI * *aURI)
{
// FIXME - should return original URI passed into NewChannel() ?
return NS_ERROR_NOT_IMPLEMENTED;
}

View File

@@ -0,0 +1,82 @@
/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*-
*
* The contents of this file are subject to the Netscape Public
* License Version 1.1 (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.mozilla.org/NPL/
*
* Software distributed under the License is distributed on an "AS
* IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or
* implied. See the License for the specific language governing
* rights and limitations under the License.
*
* The Original Code is Mozilla Communicator client code, released
* March 31, 1998.
*
* The Initial Developer of the Original Code is Netscape
* Communications Corporation. Portions created by Netscape are
* Copyright (C) 1998-1999 Netscape Communications Corporation. All
* Rights Reserved.
*
* Contributor(s):
* Scott Furman, fur@netscape.com
*/
#ifndef _nsCacheEntryChannel_h_
#define _nsCacheEntryChannel_h_
#include "nsCOMPtr.h"
#include "nsIChannel.h"
#include "nsCachedNetData.h"
#include "nsILoadGroup.h"
class nsIStreamListener;
// A proxy for an nsIChannel, useful when only a few nsIChannel
// methods must be overridden
class nsChannelProxy : public nsIChannel {
public:
NS_FORWARD_NSICHANNEL(mChannel->)
NS_FORWARD_NSIREQUEST(mChannel->)
protected:
nsChannelProxy(nsIChannel* aChannel):mChannel(aChannel) {};
virtual ~nsChannelProxy() {};
nsCOMPtr<nsIChannel> mChannel;
};
// Override several nsIChannel methods so that they interact with the cache manager
class nsCacheEntryChannel : public nsChannelProxy {
public:
NS_DECL_ISUPPORTS
NS_IMETHOD OpenOutputStream(PRUint32 aStartPosition, nsIOutputStream* *aOutputStream);
NS_IMETHOD OpenInputStream(PRUint32 aStartPosition, PRInt32 aReadCount,
nsIInputStream* *aInputStream);
NS_IMETHOD AsyncRead(PRUint32 aStartPosition, PRInt32 aReadCount,
nsISupports *aContext, nsIStreamListener *aListener);
NS_IMETHOD AsyncWrite(nsIInputStream *aFromStream, PRUint32 aStartPosition,
PRInt32 aWriteCount, nsISupports *aContext,
nsIStreamObserver *aObserver);
NS_IMETHOD GetLoadAttributes(nsLoadFlags *aLoadAttributes);
NS_IMETHOD SetLoadAttributes(nsLoadFlags aLoadAttributes);
NS_IMETHOD GetLoadGroup(nsILoadGroup* *aLoadGroup);
NS_IMETHOD GetURI(nsIURI * *aURI);
NS_IMETHOD GetOriginalURI(nsIURI * *aURI);
protected:
nsCacheEntryChannel(nsCachedNetData* aCacheEntry, nsIChannel* aChannel, nsILoadGroup* aLoadGroup);
virtual ~nsCacheEntryChannel();
friend class nsCachedNetData;
private:
nsCOMPtr<nsCachedNetData> mCacheEntry;
nsCOMPtr<nsILoadGroup> mLoadGroup;
nsCOMPtr<nsIChannel> mProxyChannel;
nsLoadFlags mLoadAttributes;
};
#endif // _nsCacheEntryChannel_h_

View File

@@ -0,0 +1,497 @@
/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*-
*
* The contents of this file are subject to the Netscape Public
* License Version 1.1 (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.mozilla.org/NPL/
*
* Software distributed under the License is distributed on an "AS
* IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or
* implied. See the License for the specific language governing
* rights and limitations under the License.
*
* The Original Code is Mozilla Communicator client code, released
* March 31, 1998.
*
* The Initial Developer of the Original Code is Netscape
* Communications Corporation. Portions created by Netscape are
* Copyright (C) 1998-1999 Netscape Communications Corporation. All
* Rights Reserved.
*
* Contributor(s):
* Scott Furman, fur@netscape.com
*/
#include "nsINetDataCache.h"
#include "nsCacheManager.h"
#include "nsCachedNetData.h"
#include "nsReplacementPolicy.h"
#include "nsString.h"
#include "nsIURI.h"
#include "nsHashtable.h"
#include "nsIComponentManager.h"
#include "nsINetDataDiskCache.h"
// Limit the number of entries in the cache to conserve memory space
// in the nsReplacementPolicy code
#define MAX_MEM_CACHE_ENTRIES 800
#define MAX_DISK_CACHE_ENTRIES 3200
// Cache capacities in MB, overridable via APIs
#define DEFAULT_MEMORY_CACHE_CAPACITY 1024
#define DEFAULT_DISK_CACHE_CAPACITY 10000
#define CACHE_HIGH_WATER_MARK(capacity) ((PRUint32)(0.98 * (capacity)))
#define CACHE_LOW_WATER_MARK(capacity) ((PRUint32)(0.97 * (capacity)))
nsCacheManager* gCacheManager = 0;
NS_IMPL_ISUPPORTS(nsCacheManager, NS_GET_IID(nsINetDataCacheManager))
nsCacheManager::nsCacheManager()
: mActiveCacheRecords(0),
mDiskCacheCapacity(DEFAULT_DISK_CACHE_CAPACITY),
mMemCacheCapacity(DEFAULT_MEMORY_CACHE_CAPACITY)
{
NS_ASSERTION(!gCacheManager, "Multiple cache managers created");
gCacheManager = this;
NS_INIT_REFCNT();
}
nsCacheManager::~nsCacheManager()
{
gCacheManager = 0;
delete mActiveCacheRecords;
delete mMemSpaceManager;
delete mDiskSpaceManager;
}
nsresult
nsCacheManager::Init()
{
nsresult rv;
mActiveCacheRecords = new nsHashtable(64);
if (!mActiveCacheRecords)
return NS_ERROR_OUT_OF_MEMORY;
// Instantiate the memory cache component
rv = nsComponentManager::CreateInstance(NS_NETWORK_MEMORY_CACHE_PROGID,
nsnull,
NS_GET_IID(nsINetDataCache),
getter_AddRefs(mMemCache));
if (NS_FAILED(rv))
return rv;
rv = nsComponentManager::CreateInstance(NS_NETWORK_FLAT_CACHE_PROGID,
nsnull,
NS_GET_IID(nsINetDataCache),
getter_AddRefs(mFlatCache));
if (NS_FAILED(rv)) {
// For now, we don't require a flat cache module to be present
if (rv != NS_ERROR_FACTORY_NOT_REGISTERED)
return rv;
}
#ifdef FILE_CACHE_IS_READY
// Instantiate the file cache component
rv = nsComponentManager::CreateInstance(NS_NETWORK_FILE_CACHE_PROGID,
nsnull,
NS_GET_IID(nsINetDataCache),
getter_AddRefs(mFileCache));
if (NS_FAILED(rv)) {
NS_WARNING("No disk cache present");
}
#endif
// Set up linked list of caches in search order
mCacheSearchChain = mMemCache;
if (mFlatCache) {
mMemCache->SetNextCache(mFlatCache);
mFlatCache->SetNextCache(mFileCache);
} else {
mMemCache->SetNextCache(mFileCache);
}
// TODO - Load any extension caches here
// Initialize replacement policy for memory cache module
mMemSpaceManager = new nsReplacementPolicy;
if (!mMemSpaceManager)
return NS_ERROR_OUT_OF_MEMORY;
rv = mMemSpaceManager->Init(MAX_MEM_CACHE_ENTRIES);
if (NS_FAILED(rv)) return rv;
rv = mMemSpaceManager->AddCache(mMemCache);
// Initialize replacement policy for disk cache modules (file
// cache and flat cache)
mDiskSpaceManager = new nsReplacementPolicy;
if (!mDiskSpaceManager)
return NS_ERROR_OUT_OF_MEMORY;
rv = mDiskSpaceManager->Init(MAX_DISK_CACHE_ENTRIES);
if (NS_FAILED(rv)) return rv;
if (mFileCache) {
rv = mDiskSpaceManager->AddCache(mFileCache);
if (NS_FAILED(rv)) return rv;
}
if (mFlatCache) {
rv = mDiskSpaceManager->AddCache(mFlatCache);
if (NS_FAILED(rv)) return rv;
}
return NS_OK;
}
NS_IMETHODIMP
nsCacheManager::GetCachedNetData(const char *aUriSpec, const char *aSecondaryKey,
PRUint32 aSecondaryKeyLength,
PRUint32 aFlags, nsICachedNetData* *aResult)
{
nsCachedNetData *cachedData;
nsresult rv;
nsINetDataCache *cache;
nsReplacementPolicy *spaceManager;
if (aFlags & CACHE_AS_FILE) {
cache = mFileCache;
spaceManager = mDiskSpaceManager;
// Ensure that cache is initialized
if (mDiskCacheCapacity == (PRUint32)-1)
return NS_ERROR_NOT_AVAILABLE;
} else if ((aFlags & BYPASS_PERSISTENT_CACHE) ||
(!mFileCache && !mFlatCache) || !mDiskCacheCapacity) {
cache = mMemCache;
spaceManager = mMemSpaceManager;
} else {
cache = mFlatCache ? mFlatCache : mFileCache;
spaceManager = mDiskSpaceManager;
}
// Construct the cache key by appending the secondary key to the URI spec
nsCAutoString cacheKey(aUriSpec);
// Insert NUL at end of URI spec
cacheKey += '\0';
if (aSecondaryKey)
cacheKey.Append(aSecondaryKey, aSecondaryKeyLength);
nsStringKey key(cacheKey);
cachedData = (nsCachedNetData*)mActiveCacheRecords->Get(&key);
// There is no existing instance of nsCachedNetData for this URL.
// Make one from the corresponding record in the cache module.
if (cachedData) {
NS_ASSERTION(cache == cachedData->mCache,
"Cannot yet handle simultaneously active requests for the "
"same URL using different caches");
NS_ADDREF(cachedData);
} else {
rv = spaceManager->GetCachedNetData(cacheKey.GetBuffer(), cacheKey.Length(),
cache, &cachedData);
if (NS_FAILED(rv)) return rv;
mActiveCacheRecords->Put(&key, cachedData);
}
*aResult = cachedData;
return NS_OK;
}
// Remove this cache entry from the list of active ones
nsresult
nsCacheManager::NoteDormant(nsCachedNetData* aEntry)
{
nsresult rv;
PRUint32 keyLength;
char* key;
nsCOMPtr<nsINetDataCacheRecord> record;
nsCachedNetData* deletedEntry;
rv = aEntry->GetRecord(getter_AddRefs(record));
if (NS_FAILED(rv)) return rv;
rv = record->GetKey(&keyLength, &key);
if (NS_FAILED(rv)) return rv;
nsStringKey hashTableKey(nsCString(key, keyLength));
deletedEntry = (nsCachedNetData*)gCacheManager->mActiveCacheRecords->Remove(&hashTableKey);
// NS_ASSERTION(deletedEntry == aEntry, "Hash table inconsistency");
return NS_OK;
}
NS_IMETHODIMP
nsCacheManager::Contains(const char *aUriSpec, const char *aSecondaryKey,
PRUint32 aSecondaryKeyLength,
PRUint32 aFlags, PRBool *aResult)
{
nsINetDataCache *cache;
nsReplacementPolicy *spaceManager;
nsCachedNetData *cachedData;
if (aFlags & CACHE_AS_FILE) {
cache = mFileCache;
spaceManager = mDiskSpaceManager;
} else if ((aFlags & BYPASS_PERSISTENT_CACHE) ||
(!mFileCache && !mFlatCache) || !mDiskCacheCapacity) {
cache = mMemCache;
spaceManager = mMemSpaceManager;
} else {
cache = mFlatCache ? mFlatCache : mFileCache;
spaceManager = mDiskSpaceManager;
}
// Construct the cache key by appending the secondary key to the URI spec
nsCAutoString cacheKey(aUriSpec);
// Insert NUL between URI spec and secondary key
cacheKey += '\0';
cacheKey.Append(aSecondaryKey, aSecondaryKeyLength);
// Locate the record using (URI + secondary key)
nsStringKey key(cacheKey);
cachedData = (nsCachedNetData*)mActiveCacheRecords->Get(&key);
if (cachedData && (cache == cachedData->mCache)) {
*aResult = PR_TRUE;
return NS_OK;
} else {
// No active cache entry, see if there is a dormant one
return cache->Contains(cacheKey.GetBuffer(), cacheKey.Length(), aResult);
}
}
NS_IMETHODIMP
nsCacheManager::GetNumEntries(PRUint32 *aNumEntries)
{
nsresult rv;
nsCOMPtr<nsISimpleEnumerator> iterator;
nsCOMPtr<nsISupports> cacheSupports;
nsCOMPtr<nsINetDataCache> cache;
PRUint32 totalEntries = 0;
rv = NewCacheModuleIterator(getter_AddRefs(iterator));
if (NS_FAILED(rv)) return rv;
while (1) {
PRBool notDone;
rv = iterator->HasMoreElements(&notDone);
if (NS_FAILED(rv)) return rv;
if (!notDone)
break;
iterator->GetNext(getter_AddRefs(cacheSupports));
cache = do_QueryInterface(cacheSupports);
PRUint32 numEntries;
rv = cache->GetNumEntries(&numEntries);
if (NS_FAILED(rv)) return rv;
totalEntries += numEntries;
}
*aNumEntries = totalEntries;
return NS_OK;
}
NS_IMETHODIMP
nsCacheManager::NewCacheEntryIterator(nsISimpleEnumerator* *aResult)
{
return NS_ERROR_NOT_IMPLEMENTED;
}
class CacheEnumerator : public nsISimpleEnumerator
{
public:
CacheEnumerator(nsINetDataCache* aFirstCache):mCache(aFirstCache)
{ NS_INIT_REFCNT(); }
virtual ~CacheEnumerator() {};
NS_DECL_ISUPPORTS
NS_IMETHODIMP
HasMoreElements(PRBool* aMoreElements) {
*aMoreElements = (mCache != 0);
return NS_OK;
}
NS_IMETHODIMP
GetNext(nsISupports* *aSupports) {
*aSupports = mCache;
if (!mCache)
return NS_ERROR_FAILURE;
NS_ADDREF(*aSupports);
nsCOMPtr<nsINetDataCache> nextCache;
nsresult rv = mCache->GetNextCache(getter_AddRefs(nextCache));
mCache = nextCache;
return rv;
}
private:
nsCOMPtr<nsINetDataCache> mCache;
};
NS_IMPL_ISUPPORTS(CacheEnumerator, NS_GET_IID(nsISimpleEnumerator))
NS_IMETHODIMP
nsCacheManager::NewCacheModuleIterator(nsISimpleEnumerator* *aResult)
{
*aResult = new CacheEnumerator(mCacheSearchChain);
if (!*aResult)
return NS_ERROR_OUT_OF_MEMORY;
NS_ADDREF(*aResult);
return NS_OK;
}
NS_IMETHODIMP
nsCacheManager::RemoveAll(void)
{
nsresult rv, result;
nsCOMPtr<nsISimpleEnumerator> iterator;
nsCOMPtr<nsINetDataCache> cache;
nsCOMPtr<nsISupports> iSupports;
result = NS_OK;
rv = NewCacheModuleIterator(getter_AddRefs(iterator));
if (NS_FAILED(rv)) return rv;
while (1) {
PRBool notDone;
rv = iterator->HasMoreElements(&notDone);
if (NS_FAILED(rv)) return rv;
if (!notDone)
break;
iterator->GetNext(getter_AddRefs(iSupports));
cache = do_QueryInterface(iSupports);
PRUint32 cacheFlags;
rv = cache->GetFlags(&cacheFlags);
if (NS_FAILED(rv)) return rv;
if ((cacheFlags & nsINetDataCache::READ_ONLY) == 0) {
rv = cache->RemoveAll();
if (NS_FAILED(rv))
result = rv;
}
}
return result;
}
nsresult
nsCacheManager::LimitMemCacheSize()
{
nsresult rv;
nsReplacementPolicy* spaceManager;
NS_ASSERTION(gCacheManager, "No cache manager");
spaceManager = gCacheManager->mMemSpaceManager;
PRUint32 occupancy;
rv = spaceManager->GetStorageInUse(&occupancy);
if (NS_FAILED(rv)) return rv;
PRUint32 memCacheCapacity = gCacheManager->mMemCacheCapacity;
if (occupancy > CACHE_HIGH_WATER_MARK(memCacheCapacity))
return spaceManager->Evict(CACHE_LOW_WATER_MARK(memCacheCapacity));
return NS_OK;
}
nsresult
nsCacheManager::LimitDiskCacheSize()
{
nsresult rv;
nsReplacementPolicy* spaceManager;
NS_ASSERTION(gCacheManager, "No cache manager");
spaceManager = gCacheManager->mDiskSpaceManager;
PRUint32 occupancy;
rv = spaceManager->GetStorageInUse(&occupancy);
if (NS_FAILED(rv)) return rv;
PRUint32 diskCacheCapacity = gCacheManager->mDiskCacheCapacity;
if (occupancy > CACHE_HIGH_WATER_MARK(diskCacheCapacity))
return spaceManager->Evict(CACHE_LOW_WATER_MARK(diskCacheCapacity));
return NS_OK;
}
nsresult
nsCacheManager::LimitCacheSize()
{
nsresult rv;
rv = LimitDiskCacheSize();
if (NS_FAILED(rv)) return rv;
rv = LimitMemCacheSize();
if (NS_FAILED(rv)) return rv;
return NS_OK;
}
NS_IMETHODIMP
nsCacheManager::SetMemCacheCapacity(PRUint32 aCapacity)
{
mMemCacheCapacity = aCapacity;
LimitCacheSize();
return NS_OK;
}
NS_IMETHODIMP
nsCacheManager::GetMemCacheCapacity(PRUint32* aCapacity)
{
NS_ENSURE_ARG_POINTER(aCapacity);
*aCapacity = mMemCacheCapacity;
return NS_OK;
}
NS_IMETHODIMP
nsCacheManager::SetDiskCacheCapacity(PRUint32 aCapacity)
{
mDiskCacheCapacity = aCapacity;
LimitCacheSize();
return NS_OK;
}
NS_IMETHODIMP
nsCacheManager::GetDiskCacheCapacity(PRUint32* aCapacity)
{
NS_ENSURE_ARG_POINTER(aCapacity);
*aCapacity = mDiskCacheCapacity;
return NS_OK;
}
NS_IMETHODIMP
nsCacheManager::SetDiskCacheFolder(nsIFileSpec* aFolder)
{
NS_ENSURE_ARG(aFolder);
if (!mFileCache)
return NS_ERROR_NOT_AVAILABLE;
nsCOMPtr<nsINetDataDiskCache> fileCache;
fileCache = do_QueryInterface(mFileCache);
return fileCache->SetDiskCacheFolder(aFolder);
}
NS_IMETHODIMP
nsCacheManager::GetDiskCacheFolder(nsIFileSpec* *aFolder)
{
NS_ENSURE_ARG(aFolder);
if (!mFileCache)
return NS_ERROR_NOT_AVAILABLE;
nsCOMPtr<nsINetDataDiskCache> fileCache;
fileCache = do_QueryInterface(mFileCache);
return fileCache->GetDiskCacheFolder(aFolder);
}

View File

@@ -0,0 +1,100 @@
/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*-
*
* The contents of this file are subject to the Netscape Public
* License Version 1.1 (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.mozilla.org/NPL/
*
* Software distributed under the License is distributed on an "AS
* IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or
* implied. See the License for the specific language governing
* rights and limitations under the License.
*
* The Original Code is Mozilla Communicator client code, released
* March 31, 1998.
*
* The Initial Developer of the Original Code is Netscape
* Communications Corporation. Portions created by Netscape are
* Copyright (C) 1998-1999 Netscape Communications Corporation. All
* Rights Reserved.
*
* Contributor(s):
* Scott Furman, fur@netscape.com
*/
#ifndef _nsCacheManager_h_
#define _nsCacheManager_h_
// 2030f0b0-9567-11d3-90d3-0040056a906e
#define NS_CACHE_MANAGER_CID \
{ \
0x2030f0b0, \
0x9567, \
0x11d3, \
{0x90, 0xd3, 0x00, 0x40, 0x05, 0x6a, 0x90, 0x6e} \
}
#include "nsINetDataCacheManager.h"
#include "nsINetDataCache.h"
#include "nsCOMPtr.h"
class nsHashtable;
class nsReplacementPolicy;
class nsCachedNetData;
class nsCacheManager : public nsINetDataCacheManager {
public:
nsCacheManager();
virtual ~nsCacheManager();
NS_METHOD Init();
// nsISupports methods
NS_DECL_ISUPPORTS
// nsINetDataCacheManager methods
NS_DECL_NSINETDATACACHEMANAGER
private:
// Mapping from cache key to nsCachedNetData, but only for those cache
// entries with external references, i.e. those referred to outside the
// cache manager
nsHashtable* mActiveCacheRecords;
// Memory cache
nsCOMPtr<nsINetDataCache> mMemCache;
// Flat-file database cache; All content aggregated into single disk file
nsCOMPtr<nsINetDataCache> mFlatCache;
// stream-as-file cache
nsCOMPtr<nsINetDataCache> mFileCache;
// Unified replacement policy for flat-cache and file-cache
nsReplacementPolicy* mDiskSpaceManager;
// Replacement policy for memory cache
nsReplacementPolicy* mMemSpaceManager;
// List of caches in search order
nsINetDataCache* mCacheSearchChain;
// Combined file/flat cache capacity, in KB
PRUint32 mDiskCacheCapacity;
// Memory cache capacity, in KB
PRUint32 mMemCacheCapacity;
protected:
static nsresult NoteDormant(nsCachedNetData* aEntry);
static nsresult LimitCacheSize();
static nsresult LimitMemCacheSize();
static nsresult LimitDiskCacheSize();
friend class nsCachedNetData;
friend class CacheOutputStream;
};
#endif // _nsCacheManager_h_

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,242 @@
/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*-
*
* The contents of this file are subject to the Netscape Public
* License Version 1.1 (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.mozilla.org/NPL/
*
* Software distributed under the License is distributed on an "AS
* IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or
* implied. See the License for the specific language governing
* rights and limitations under the License.
*
* The Original Code is Mozilla Communicator client code, released
* March 31, 1998.
*
* The Initial Developer of the Original Code is Netscape
* Communications Corporation. Portions created by Netscape are
* Copyright (C) 1998-1999 Netscape Communications Corporation. All
* Rights Reserved.
*
* Contributor(s):
* Scott Furman, fur@netscape.com
*/
#ifndef _nsCachedNetData_h_
#define _nsCachedNetData_h_
#include "nsICachedNetData.h"
#include "nsCOMPtr.h"
#include "nsINetDataCacheRecord.h"
class nsINetDataCache;
class nsIStreamAsFileObserver;
class nsIStreamAsFile;
class nsIArena;
class StreamAsFileObserverClosure;
class CacheMetaData;
// Number of recent access times recorded
#define MAX_K 3
/**
* FIXME - add comment. There are a lot of these data structures resident in
* memory, so be careful about adding members unnecessarily.
*/
class nsCachedNetData : public nsICachedNetData {
public:
NS_DECL_ISUPPORTS
// nsICachedNetData methods
NS_DECL_NSICACHEDNETDATA
NS_METHOD Init(nsINetDataCacheRecord *aRecord, nsINetDataCache *aCache);
protected:
// Bits for mFlags, below
typedef enum {
DIRTY = 1 << 0, // Cache entry data needs to be flushed to database
// ==== Flags that can be set by the protocol handler ====
ALLOW_PARTIAL = 1 << 1, // Protocol handler supports partial fetching
UPDATE_IN_PROGRESS = 1 << 2, // Protocol handler now modifying cache data
// ==== Cache-entry state flags. At most one of these flags can be set ====
TRUNCATED_CONTENT = 1 << 4, // Entry contains valid content, but it has
// been truncated by cache manager
// A previously-used cache entry, which has been purged of all cached
// content and protocol-private data. This cache entry can be refilled
// with new content or it may be retained in this vestigial state
// because the usage statistics it contains will be used by the
// replacement policy if the same URI is ever cached again.
VESTIGIAL = 1 << 5,
// ==== Memory usage status bits. At most one of these flags can be set ====
RECYCLED = 1 << 8, // Previously associated database record has
// been deleted; This cache entry is available
// for recycling.
DORMANT = 1 << 9, // No references to this cache entry, except by
// the cache manager itself
// ==== Setter bits ====
LAST_MODIFIED_KNOWN = 1 <<12, // Protocol handler called SetLastModifiedTime()
EXPIRATION_KNOWN = 1 <<13, // Protocol handler called SetExpirationTime()
STALE_TIME_KNOWN = 1 <<14, // Protocol handler called SetStaleTime()
// ==== Useful flag combinations ====
// Cache entry not eligible for eviction
UNEVICTABLE = VESTIGIAL | RECYCLED | UPDATE_IN_PROGRESS,
// State flags that are in-memory only, i.e. not persistent
TRANSIENT_FLAGS = DIRTY | RECYCLED | DORMANT
} Flag;
PRBool GetFlag(Flag aFlag) { return (mFlags & aFlag) != 0; }
nsresult GetFlag(PRBool *aResult, Flag aFlag) { *aResult = GetFlag(aFlag); return NS_OK; }
// Set a boolean flag for the cache entry
nsresult SetFlag(PRBool aValue, Flag aFlag);
nsresult SetFlag(Flag aFlag) { return SetFlag(PR_TRUE, aFlag); }
nsresult ClearFlag(Flag aFlag) { return SetFlag(PR_FALSE, aFlag); }
void ComputeProfit(PRUint32 aCurrentTime);
static int Compare(const void *a, const void *b, void *unused);
void NoteAccess();
void NoteUpdate();
// Get underlying raw cache database record.
nsresult GetRecord(nsINetDataCacheRecord* *aRecord);
nsresult GetRecordID(PRInt32 *aRecordID);
nsresult Evict(PRUint32 aTruncatedContentLength);
nsresult GetFileSpec(nsIFileSpec* *aFileSpec);
void NoteDownloadTime(PRTime start, PRTime end);
// placement new for arena-allocation
void *operator new (size_t aSize, nsIArena *aArena);
friend class nsReplacementPolicy;
friend class nsCacheManager;
friend class StreamAsFile;
friend class nsCacheEntryChannel;
friend class CacheOutputStream;
friend class InterceptStreamListener;
private:
nsCachedNetData() {};
virtual ~nsCachedNetData() {};
// Initialize internal fields of this nsCachedNetData instance from the
// underlying raw cache database record.
nsresult Deserialize(PRBool aDeserializeFlags);
// Notify stream-as-file observers about change in cache entry status
nsresult Notify(PRUint32 aMessage, nsresult aError);
// Add/Remove stream-as-file observers
nsresult AddObserver(nsIStreamAsFile *aStreamAsFile, nsIStreamAsFileObserver* aObserver);
nsresult RemoveObserver(nsIStreamAsFileObserver* aObserver);
// Mark cache entry to indicate a write out to the cache database is required
void SetDirty() { mFlags |= DIRTY; }
nsresult Resurrect(nsINetDataCacheRecord *aRecord);
nsresult CommitFlags();
CacheMetaData* FindTaggedMetaData(const char* aTag, PRBool aCreate);
private:
// List of nsIStreamAsFileObserver's that will receive notification events
// when the cache manager or a client desires to delete/truncate a cache
// entry file.
StreamAsFileObserverClosure* mObservers;
// Protocol-specific meta-data, opaque to the cache manager
CacheMetaData *mMetaData;
// Next in chain for a single bucket in the replacement policy hash table
// that maps from record ID to nsCachedNetData
nsCachedNetData* mNext;
// See flag bits, above
// NOTE: 16 bit member is combined with members below for
// struct packing efficiency. Do not change order of members!
PRUint16 mFlags;
protected:
// Number of nsCacheEntryChannels referring to this record
PRUint8 mChannelCount;
// Below members are statistics kept per cache-entry, used to decide how
// profitable it will be to evict a record from the cache relative to other
// existing records. Note: times are measured in *seconds* since the
// 1/1/70 epoch, same as a unix time_t.
// Number of accesses for this cache record
// NOTE: 8 bit member is combined with members above for
// struct packing efficiency. Do not change order of members!
PRUint8 mNumAccesses;
// A reference to the underlying, raw cache database record, either as a
// pointer to an in-memory object or as a database record identifier
union {
nsINetDataCacheRecord* mRecord;
// Database record ID of associated cache record. See
// nsINetDataCache::GetRecordByID().
PRInt32 mRecordID;
};
// Weak link to parent cache
nsINetDataCache* mCache;
// Length of stored content, which may be less than storage consumed if
// compression is used
PRUint32 mLogicalLength;
// Most recent cache entry access times, used to compute access frequency
PRUint32 mAccessTime[MAX_K];
// We use modification time of the original document for replacement policy
// computations, i.e. to compute a document's age, but if we don't know it,
// we use the time that the document was last written to the cache.
union {
// Document modification time, if known.
PRUint32 mLastModifiedTime;
// Time of last cache update for this doc
PRUint32 mLastUpdateTime;
};
union {
// Time until which document is fresh, i.e. does not have to be validated
// with server and, therefore, data in cache is guaranteed usable
PRUint32 mExpirationTime;
// Heuristic time at which cached document is likely to be out-of-date
// with respect to canonical copy on server. Used for cache replacement
// policy, not for validation.
PRUint32 mStaleTime;
};
// Download time per byte, measure roughly in units of KB/s
float mDownloadRate;
// Heuristic estimate of cache entry future benefits, based on above values
float mProfit;
};
#endif // _nsCachedNetData_h_

View File

@@ -0,0 +1,666 @@
/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*-
* The contents of this file are subject to the Netscape Public
* License Version 1.1 (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.mozilla.org/NPL/
*
* Software distributed under the License is distributed on an "AS
* IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or
* implied. See the License for the specific language governing
* rights and limitations under the License.
*
* The Original Code is Mozilla Communicator client code, released
* March 31, 1998.
*
* The Initial Developer of the Original Code is Netscape
* Communications Corporation. Portions created by Netscape are
* Copyright (C) 1998-1999 Netscape Communications Corporation. All
* Rights Reserved.
*
* Contributor(s):
* Scott Furman, fur@netscape.com
*/
#include "nsReplacementPolicy.h"
#include "nsCachedNetData.h"
#include "nsQuickSort.h"
#include "nsIAllocator.h"
#include "nsIEnumerator.h"
#include "prtime.h"
#include "prbit.h"
#include "nsCOMPtr.h"
#include <math.h>
// Constant used to estimate frequency of access to a document based on size
#define CACHE_CONST_B 1.35
// A cache whose space is managed by this replacement policy
class nsReplacementPolicy::CacheInfo {
public:
CacheInfo(nsINetDataCache* aCache):mCache(aCache),mNext(0) {}
nsINetDataCache* mCache;
CacheInfo* mNext;
};
nsReplacementPolicy::nsReplacementPolicy()
: mRankedEntries(0), mCaches(0), mRecordsRemovedSinceLastRanking(0),
mNumEntries(0), mCapacityRankedEntriesArray(0), mLastRankTime(0) {}
nsReplacementPolicy::~nsReplacementPolicy()
{
if (mRankedEntries)
nsAllocator::Free(mRankedEntries);
if (mMapRecordIdToEntry)
nsAllocator::Free(mMapRecordIdToEntry);
}
nsresult
nsReplacementPolicy::Init(PRUint32 aMaxCacheEntries)
{
nsresult rv;
rv = NS_NewHeapArena(getter_AddRefs(mArena), sizeof(nsCachedNetData) * 32);
if (NS_FAILED(rv)) return rv;
mMaxEntries = aMaxCacheEntries;
mHashArrayLength = PR_CeilingLog2(aMaxCacheEntries) >> 3;
size_t numBytes = mHashArrayLength * sizeof(*mMapRecordIdToEntry);
mMapRecordIdToEntry = (nsCachedNetData**)nsAllocator::Alloc(numBytes);
if (!mMapRecordIdToEntry)
return NS_ERROR_OUT_OF_MEMORY;
nsCRT::zero(mMapRecordIdToEntry, numBytes);
return NS_OK;
}
nsresult
nsReplacementPolicy::AddCache(nsINetDataCache *aCache)
{
CacheInfo *cacheInfo = new CacheInfo(aCache);
if (!cacheInfo)
return NS_ERROR_OUT_OF_MEMORY;
cacheInfo->mNext = mCaches;
mCaches = cacheInfo;
return NS_OK;
}
PRUint32
nsReplacementPolicy::HashRecordID(PRInt32 aRecordID)
{
return ((aRecordID >> 16) ^ aRecordID) & (mHashArrayLength - 1);
}
nsCachedNetData*
nsReplacementPolicy::FindCacheEntryByRecordID(PRInt32 aRecordID, nsINetDataCache *aCache)
{
nsresult rv;
nsCachedNetData* cacheEntry;
PRUint32 bucket = HashRecordID(aRecordID);
cacheEntry = mMapRecordIdToEntry[bucket];
for (;cacheEntry; cacheEntry = cacheEntry->mNext) {
PRInt32 recordID;
rv = cacheEntry->GetRecordID(&recordID);
if (NS_FAILED(rv))
continue;
if ((recordID == aRecordID) && (cacheEntry->mCache == aCache))
return cacheEntry;
}
return 0;
}
// Add a cache entry to the hash table that maps record ID to entries
void
nsReplacementPolicy::AddCacheEntry(nsCachedNetData* aCacheEntry, PRInt32 aRecordID)
{
nsCachedNetData** cacheEntryp;
PRUint32 bucket = HashRecordID(aRecordID);
cacheEntryp = &mMapRecordIdToEntry[bucket];
while (*cacheEntryp)
cacheEntryp = &(*cacheEntryp)->mNext;
*cacheEntryp = aCacheEntry;
aCacheEntry->mNext = 0;
}
// Delete a cache entry from the hash table that maps record ID to entries
nsresult
nsReplacementPolicy::DeleteCacheEntry(nsCachedNetData* aCacheEntry)
{
nsresult rv;
PRInt32 recordID;
rv = aCacheEntry->GetRecordID(&recordID);
if (NS_FAILED(rv)) return rv;
PRUint32 bucket = HashRecordID(recordID);
nsCachedNetData** cacheEntryp;
cacheEntryp = &mMapRecordIdToEntry[bucket];
while (*cacheEntryp) {
if (*cacheEntryp == aCacheEntry) {
*cacheEntryp = aCacheEntry->mNext;
return NS_OK;
}
cacheEntryp = &(*cacheEntryp)->mNext;
}
NS_ASSERTION(0, "hash table inconsistency");
return NS_ERROR_FAILURE;
}
nsresult
nsReplacementPolicy::AddAllRecordsInCache(nsINetDataCache *aCache)
{
nsresult rv;
nsCOMPtr<nsISimpleEnumerator> iterator;
nsCOMPtr<nsISupports> iSupports;
nsCOMPtr<nsINetDataCacheRecord> record;
rv = aCache->NewCacheEntryIterator(getter_AddRefs(iterator));
if (!NS_SUCCEEDED(rv)) return rv;
while (1) {
PRBool notDone;
rv = iterator->HasMoreElements(&notDone);
if (NS_FAILED(rv)) return rv;
if (!notDone)
break;
rv = iterator->GetNext(getter_AddRefs(iSupports));
if (!NS_SUCCEEDED(rv)) return rv;
record = do_QueryInterface(iSupports);
rv = AssociateCacheEntryWithRecord(record, aCache, 0);
if (!NS_SUCCEEDED(rv)) return rv;
}
return NS_OK;
}
// Get current time and convert to seconds since the epoch
static PRUint32
now32()
{
double nowFP;
PRInt64 now64 = PR_Now();
LL_L2D(nowFP, now64);
PRUint32 now = (PRUint32)(nowFP * 1e-6);
return now;
}
void
nsCachedNetData::NoteDownloadTime(PRTime start, PRTime end)
{
double startFP, endFP, rate, duration;
LL_L2D(startFP, start);
LL_L2D(endFP, end);
duration = endFP - startFP;
// If the data arrives so fast that it can not be timed due to the clock
// granularity, assume a data arrival duration of 10 ms
if (!duration)
duration = 10000;
// Compute download rate in kB/s
rate = mLogicalLength / (duration * (1e-6 * 1024.0));
if (mDownloadRate) {
// Exponentially smooth download rate
const double alpha = 0.5;
mDownloadRate = (float)(mDownloadRate * alpha + rate * (1.0 - alpha));
} else {
mDownloadRate = (float)rate;
}
}
// 1 hour
#define MIN_HALFLIFE (60 * 60)
// 1 week
#define TYPICAL_HALFLIFE (7 * 24 * 60 * 60)
/**
* Estimate the profit that would be lost if the given cache entry was evicted
* from the cache. Profit is defined as the future expected download delay per
* byte of cached content. The profit computation is made based on projected
* frequency of access, prior download performance and a heuristic staleness
* criteria. The technique used is a variation of that described in the
* following paper:
*
* "A Case for Delay-Conscious Caching of Web Documents"
* http://www.bell-labs.com/user/rvingral/www97.html
*
* Briefly, expected profit is:
*
* (projected frequency of access) * (download time per byte) * (probability freshness)
*/
void
nsCachedNetData::ComputeProfit(PRUint32 aNow)
{
PRUint32 K, now;
if (aNow)
now = aNow;
else
now = now32();
K = PR_MIN(MAX_K, mNumAccesses);
if (!K) {
mProfit = 0;
return;
}
// Compute time, in seconds, since k'th most recent access
double timeSinceKthAccess = now - mAccessTime[K - 1];
if (timeSinceKthAccess <= 0.0) // Sanity check
timeSinceKthAccess = 1.0;
// Estimate frequency of future document access based on past
// access frequency
double frequencyAccess = K / timeSinceKthAccess;
// If we don't have much historical data on access frequency
// use a heuristic based on document size as an estimate
if (mLogicalLength) {
if (K == 1) {
frequencyAccess /= pow(mLogicalLength, CACHE_CONST_B);
} else if (K == 2) {
frequencyAccess /= pow(mLogicalLength, CACHE_CONST_B / 2);
}
}
// Estimate likelihood that data in cache is fresh, i.e.
// that it corresponds to the document on the server
double probabilityFreshness;
PRInt32 halfLife, age, docTime;
PRBool potentiallyStale;
docTime = GetFlag(LAST_MODIFIED_KNOWN) ? mLastModifiedTime : mLastUpdateTime;
age = now - docTime;
probabilityFreshness = 1.0; // Optimistic
if (GetFlag(EXPIRATION_KNOWN)) {
potentiallyStale = now > mExpirationTime;
halfLife = mExpirationTime - mLastModifiedTime;
} else if (GetFlag(STALE_TIME_KNOWN)) {
potentiallyStale = PR_TRUE;
halfLife = mStaleTime - docTime;
} else {
potentiallyStale = PR_TRUE;
halfLife = TYPICAL_HALFLIFE;
}
if (potentiallyStale) {
if (halfLife < MIN_HALFLIFE)
halfLife = MIN_HALFLIFE;
probabilityFreshness = pow(0.5, (double)age / (double)halfLife);
}
mProfit = (float)(frequencyAccess * probabilityFreshness);
if (mDownloadRate)
mProfit /= mDownloadRate;
}
// Number of entries to grow mRankedEntries array when it's full
#define STATS_GROWTH_INCREMENT 256
// Sorting predicate for NS_Quicksort
int
nsCachedNetData::Compare(const void *a, const void *b, void *unused)
{
nsCachedNetData* entryA = *(nsCachedNetData**)a;
nsCachedNetData* entryB = *(nsCachedNetData**)b;
// Percolate deleted or empty entries to the end of the mRankedEntries
// array, so that they can be recycled.
if (!entryA || entryA->GetFlag(RECYCLED)) {
if (!entryB || entryB->GetFlag(RECYCLED))
return 0;
else
return +1;
}
if (!entryB || entryB->GetFlag(RECYCLED))
return -1;
// Evicted entries (those with no content data) and active entries (those
// currently being updated) are collected towards the end of the sorted
// array just prior to the deleted cache entries, since evicted entries
// can't be re-evicted.
if (entryA->GetFlag(UPDATE_IN_PROGRESS)) {
if (entryB->GetFlag(UPDATE_IN_PROGRESS))
return 0;
else
return +1;
}
if (entryB->GetFlag(UPDATE_IN_PROGRESS))
return -1;
PRUint16 Ka = PR_MIN(MAX_K, entryA->mNumAccesses);
PRUint16 Kb = PR_MIN(MAX_K, entryB->mNumAccesses);
// Order cache entries by the number of times they've been accessed
if (Ka < Kb)
return -1;
if (Ka > Kb)
return +1;
/*
* Among records that have been accessed an equal number of times, order
* them by profit.
*/
if (entryA->mProfit > entryB->mProfit)
return +1;
if (entryA->mProfit < entryB->mProfit)
return -1;
return 0;
}
/**
* Rank cache entries in terms of their elegibility for eviction.
*/
nsresult
nsReplacementPolicy::RankRecords()
{
PRUint32 i, now;
// Add all cache records if this is the first ranking
if (!mLastRankTime) {
nsresult rv;
CacheInfo *cacheInfo;
cacheInfo = mCaches;
while (cacheInfo) {
rv = AddAllRecordsInCache(cacheInfo->mCache);
if (NS_FAILED(rv)) return rv;
cacheInfo = cacheInfo->mNext;
}
}
// Get current time and convert to seconds since the epoch
now = now32();
// Recompute profit for every known cache record, except deleted ones
for (i = 0; i < mNumEntries; i++) {
nsCachedNetData* entry = mRankedEntries[i];
if (entry && !entry->GetFlag(nsCachedNetData::RECYCLED))
entry->ComputeProfit(now);
}
NS_QuickSort(mRankedEntries, mNumEntries, sizeof *mRankedEntries,
nsCachedNetData::Compare, 0);
mNumEntries -= mRecordsRemovedSinceLastRanking;
mRecordsRemovedSinceLastRanking = 0;
mLastRankTime = now;
return NS_OK;
}
// A heuristic policy to avoid the cost of re-ranking cache records by
// profitability every single time space must be made available in the cache.
void
nsReplacementPolicy::MaybeRerankRecords()
{
// Rank at most once per minute
PRUint32 now = now32();
if ((now - mLastRankTime) >= 60)
RankRecords();
}
void
nsReplacementPolicy::CompactRankedEntriesArray()
{
if (mRecordsRemovedSinceLastRanking || !mLastRankTime)
RankRecords();
}
nsresult
nsReplacementPolicy::CheckForTooManyCacheEntries()
{
if (mCapacityRankedEntriesArray == mMaxEntries) {
return DeleteOneEntry(0);
} else {
nsresult rv;
CacheInfo *cacheInfo;
cacheInfo = mCaches;
while (cacheInfo) {
PRUint32 numEntries, maxEntries;
rv = cacheInfo->mCache->GetNumEntries(&numEntries);
if (NS_FAILED(rv)) return rv;
rv = cacheInfo->mCache->GetMaxEntries(&maxEntries);
if (NS_FAILED(rv)) return rv;
if (numEntries == maxEntries)
return DeleteOneEntry(cacheInfo->mCache);
cacheInfo = cacheInfo->mNext;
}
}
return NS_OK;
}
/**
* Create a new association between a low-level cache database record and a
* cache entry. Add the entry to the set of entries eligible for eviction from
* the cache. This would typically be done when the cache entry is created.
*/
nsresult
nsReplacementPolicy::AssociateCacheEntryWithRecord(nsINetDataCacheRecord *aRecord,
nsINetDataCache* aCache,
nsCachedNetData** aResult)
{
nsCachedNetData* cacheEntry;
nsresult rv;
// First, see if the record is already known to the replacement policy
PRInt32 recordID;
rv = aRecord->GetRecordID(&recordID);
if (NS_FAILED(rv)) return rv;
cacheEntry = FindCacheEntryByRecordID(recordID, aCache);
if (cacheEntry) {
if (aResult) {
if (cacheEntry->GetFlag(nsCachedNetData::DORMANT))
cacheEntry->Resurrect(aRecord);
NS_ADDREF(cacheEntry);
*aResult = cacheEntry;
}
return NS_OK;
}
// Compact the array of cache entry statistics, so that free entries appear
// at the end, for possible reuse.
if (mNumEntries && (mNumEntries == mCapacityRankedEntriesArray))
CompactRankedEntriesArray();
// If compaction doesn't yield available entries in the
// mRankedEntries array, then extend the array.
if (mNumEntries == mCapacityRankedEntriesArray) {
PRUint32 newCapacity;
rv = CheckForTooManyCacheEntries();
if (NS_FAILED(rv)) return rv;
newCapacity = mCapacityRankedEntriesArray + STATS_GROWTH_INCREMENT;
if (newCapacity > mMaxEntries)
newCapacity = mMaxEntries;
nsCachedNetData** newRankedEntriesArray;
PRUint32 numBytes = sizeof(nsCachedNetData*) * newCapacity;
newRankedEntriesArray =
(nsCachedNetData**)nsAllocator::Realloc(mRankedEntries, numBytes);
if (!newRankedEntriesArray)
return NS_ERROR_OUT_OF_MEMORY;
mRankedEntries = newRankedEntriesArray;
mCapacityRankedEntriesArray = newCapacity;
PRUint32 i;
for (i = mNumEntries; i < newCapacity; i++)
mRankedEntries[i] = 0;
}
// Recycle the record after the last in-use record in the array
nsCachedNetData *entry = mRankedEntries[mNumEntries];
NS_ASSERTION(!entry || !entry->GetFlag(nsCachedNetData::RECYCLED),
"Only deleted cache entries should appear at end of array");
if (!entry) {
entry = new(mArena) nsCachedNetData;
if (!entry)
return NS_ERROR_OUT_OF_MEMORY;
mRankedEntries[mNumEntries] = entry;
} else {
// Clear out recycled data structure
nsCRT::zero(entry, sizeof(*entry));
}
entry->Init(aRecord, aCache);
AddCacheEntry(entry, recordID);
// Add one reference to the cache entry from the cache manager
NS_ADDREF(entry);
if (aResult) {
// And one reference from our caller
NS_ADDREF(entry);
*aResult = entry;
}
mNumEntries++;
return NS_OK;
}
nsresult
nsReplacementPolicy::GetCachedNetData(const char* cacheKey, PRUint32 cacheKeyLength,
nsINetDataCache* aCache,
nsCachedNetData** aResult)
{
nsresult rv;
nsCOMPtr<nsINetDataCacheRecord> record;
rv = aCache->GetCachedNetData(cacheKey, cacheKeyLength,
getter_AddRefs(record));
if (NS_FAILED(rv)) return rv;
return AssociateCacheEntryWithRecord(record, aCache, aResult);
}
/**
* Delete the least desirable record from the cache database. This is used
* when the addition of another record would exceed either the cache manager or
* the cache's maximum permitted number of records.
*/
nsresult
nsReplacementPolicy::DeleteOneEntry(nsINetDataCache *aCache)
{
PRUint32 i;
nsresult rv;
nsCachedNetData *entry;
i = 0;
while (1) {
MaybeRerankRecords();
for (; i < mNumEntries; i++) {
entry = mRankedEntries[i];
if (!entry || entry->GetFlag(nsCachedNetData::RECYCLED))
continue;
if (!aCache || (entry->mCache == aCache))
break;
}
// Report error if no record found to delete
if (i == mNumEntries)
return NS_ERROR_FAILURE;
rv = entry->Delete();
if (NS_SUCCEEDED(rv)) {
rv = DeleteCacheEntry(entry);
return rv;
}
}
}
nsresult
nsReplacementPolicy::GetStorageInUse(PRUint32* aStorageInUse)
{
nsresult rv;
CacheInfo *cacheInfo;
*aStorageInUse = 0;
cacheInfo = mCaches;
while (cacheInfo) {
PRUint32 cacheStorage;
rv = cacheInfo->mCache->GetStorageInUse(&cacheStorage);
if (NS_FAILED(rv)) return rv;
*aStorageInUse += cacheStorage;
cacheInfo = cacheInfo->mNext;
}
return NS_OK;
}
/**
* Delete the least desirable records from the cache until the occupancy of the
* cache has been reduced by the given number of KB. This is used when the
* addition of more cache data would exceed the cache's capacity.
*/
nsresult
nsReplacementPolicy::Evict(PRUint32 aTargetOccupancy)
{
PRUint32 i;
nsCachedNetData *entry;
nsresult rv;
PRUint32 occupancy;
PRInt32 truncatedLength;
nsCOMPtr<nsINetDataCacheRecord> record;
MaybeRerankRecords();
for (i = 0; i < mNumEntries; i++) {
rv = GetStorageInUse(&occupancy);
if (!NS_SUCCEEDED(rv)) return rv;
if (occupancy <= aTargetOccupancy)
return NS_OK;
entry = mRankedEntries[i];
// Skip deleted/empty cache entries and ones that have already been evicted
if (!entry || entry->GetFlag(nsCachedNetData::UNEVICTABLE))
continue;
if (entry->GetFlag(nsCachedNetData::ALLOW_PARTIAL)) {
rv = entry->GetRecord(getter_AddRefs(record));
if (NS_FAILED(rv))
continue;
PRUint32 contentLength;
rv = record->GetStoredContentLength(&contentLength);
if (NS_FAILED(rv))
continue;
// Additional cache storage required, in KB
PRUint32 storageToReclaim = (occupancy - aTargetOccupancy) << 10;
truncatedLength = (PRInt32)(contentLength - storageToReclaim);
if (truncatedLength < 0)
truncatedLength = 0;
} else {
truncatedLength = 0;
}
rv = entry->Evict(truncatedLength);
}
return NS_ERROR_FAILURE;
}

View File

@@ -0,0 +1,136 @@
/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*-
*
* The contents of this file are subject to the Netscape Public
* License Version 1.1 (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.mozilla.org/NPL/
*
* Software distributed under the License is distributed on an "AS
* IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or
* implied. See the License for the specific language governing
* rights and limitations under the License.
*
* The Original Code is Mozilla Communicator client code, released
* March 31, 1998.
*
* The Initial Developer of the Original Code is Netscape
* Communications Corporation. Portions created by Netscape are
* Copyright (C) 1998-1999 Netscape Communications Corporation. All
* Rights Reserved.
*
* Contributor(s):
* Scott Furman, fur@netscape.com
*/
/**
* This class manages one or more caches that share a storage resource, e.g. a
* file cache and a flat-database cache might each occupy space on the disk and
* they would share a single instance of nsReplacementPolicy. The replacement
* policy heuristically chooses which cache entries to evict when storage is
* required to accommodate incoming cache data.
*/
#ifndef _nsReplacementPolicy_h_
#define _nsReplacementPolicy_h_
#include "nscore.h"
#include "nsISupportsUtils.h"
#include "nsINetDataCache.h"
#include "nsICachedNetData.h"
#include "nsIArena.h"
#include "nsCOMPtr.h"
#include "nsHashtable.h"
class nsCachedNetData;
struct PL_HashTable;
/**
* This private class is responsible for implementing the network data cache's
* replacement policy, i.e. it decides which cache data should be evicted to
* make room for new incoming data.
*/
class nsReplacementPolicy {
public:
nsReplacementPolicy();
~nsReplacementPolicy();
protected:
nsresult Init(PRUint32 aMaxCacheEntries);
nsresult AddCache(nsINetDataCache *aCache);
nsresult GetCachedNetData(const char* cacheKey, PRUint32 cacheKeyLength,
nsINetDataCache* aCache,
nsCachedNetData** aResult);
nsresult GetStorageInUse(PRUint32* aNumKBytes);
friend class nsCacheManager;
private:
nsresult RankRecords();
void MaybeRerankRecords();
void CompactRankedEntriesArray();
nsresult DeleteOneEntry(nsINetDataCache* aCache);
nsresult Evict(PRUint32 aTargetOccupancy);
nsCachedNetData* FindCacheEntryByRecordID(PRInt32 aRecordID, nsINetDataCache *aCache);
void AddCacheEntry(nsCachedNetData* aCacheEntry, PRInt32 aRecordID);
nsresult DeleteCacheEntry(nsCachedNetData* aCacheEntry);
PRUint32 HashRecordID(PRInt32 aRecordID);
nsresult AssociateCacheEntryWithRecord(nsINetDataCacheRecord *aRecord,
nsINetDataCache* aCache,
nsCachedNetData** aResult);
nsresult AddAllRecordsInCache(nsINetDataCache *aCache);
nsresult CheckForTooManyCacheEntries();
class CacheInfo;
private:
// Growable array of pointers to individual cache entries; It is sorted by
// profitability, such that low-numbered array indices refer to cache
// entries that are the least profitable to retain. New cache entries are
// added to the end of the array. Deleted cache entries are specially
// marked and percolate to the end of the array for recycling whenever
// mRankedEntries is sorted. Evicted cache entries (those with no
// associated content data) are retained for the purpose of improving the
// replacement policy efficacy, and are percolated towards the end of the
// array, just prior to the deleted cache entries.
//
// The array is not in sorted order 100% of the time; For efficiency
// reasons, sorting is only done when heuristically deemed necessary.
nsCachedNetData** mRankedEntries;
// Hash table buckets to map Record ID to cache entry. We use this instead
// of a PL_HashTable to reduce storage requirements
nsCachedNetData** mMapRecordIdToEntry;
// Length of mMapRecordIdToEntry array
PRUint32 mHashArrayLength;
// Linked list of caches that share this replacement policy
CacheInfo* mCaches;
// Allocation area for cache entry (nsCachedNetData) instances
nsCOMPtr<nsIArena> mArena;
// Bookkeeping
PRUint32 mRecordsRemovedSinceLastRanking;
// Maximum permitted length of mRankedEntries array
PRUint32 mMaxEntries;
// Number of occupied slots in mRankedEntries array
PRUint32 mNumEntries;
// Capacity of mRankedEntries array
PRUint32 mCapacityRankedEntriesArray;
// Time at which cache entries were last ranked by profitability
PRUint32 mLastRankTime;
};
#endif // _nsReplacementPolicy_h_

View File

@@ -0,0 +1,43 @@
#
# The contents of this file are subject to the Netscape Public
# License Version 1.1 (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.mozilla.org/NPL/
#
# Software distributed under the License is distributed on an "AS
# IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or
# implied. See the License for the specific language governing
# rights and limitations under the License.
#
# The Original Code is mozilla.org code.
#
# The Initial Developer of the Original Code is Netscape
# Communications Corporation. Portions created by Netscape are
# Copyright (C) 1998 Netscape Communications Corporation. All
# Rights Reserved.
#
# Contributor(s):
#
DEPTH = ../../..
topsrcdir = @top_srcdir@
srcdir = @srcdir@
VPATH = @srcdir@
MODULE = nkcache
include $(DEPTH)/config/autoconf.mk
XPIDLSRCS = \
nsICachedNetData.idl \
nsINetDataCacheManager.idl \
nsINetDataCache.idl \
nsINetDataCacheRecord.idl \
nsINetDataDiskCache.idl \
nsIStreamAsFile.idl \
$(NULL)
EXPORTS := $(addprefix $(srcdir)/, $(EXPORTS))
include $(topsrcdir)/config/rules.mk

41
mozilla/netwerk/cache/public/Makefile.win vendored Executable file
View File

@@ -0,0 +1,41 @@
#!gmake
#
# The contents of this file are subject to the Netscape Public
# License Version 1.1 (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.mozilla.org/NPL/
#
# Software distributed under the License is distributed on an "AS
# IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or
# implied. See the License for the specific language governing
# rights and limitations under the License.
#
# The Original Code is mozilla.org code.
#
# The Initial Developer of the Original Code is Netscape
# Communications Corporation. Portions created by Netscape are
# Copyright (C) 1998 Netscape Communications Corporation. All
# Rights Reserved.
#
# Contributor(s):
MODULE = nkcache
DEPTH = ..\..\..
include <$(DEPTH)/config/config.mak>
EXPORTS = \
$(NULL)
XPIDLSRCS = \
.\nsICachedNetData.idl \
.\nsINetDataCacheManager.idl \
.\nsINetDataCache.idl \
.\nsINetDataCacheRecord.idl \
.\nsINetDataDiskCache.idl \
.\nsIStreamAsFile.idl \
$(NULL)
include <$(DEPTH)/config/rules.mak>

View File

@@ -0,0 +1,229 @@
/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*-
*
* The contents of this file are subject to the Netscape Public
* License Version 1.1 (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.mozilla.org/NPL/
*
* Software distributed under the License is distributed on an "AS
* IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or
* implied. See the License for the specific language governing
* rights and limitations under the License.
*
* The Original Code is mozilla.org code.
*
* The Initial Developer of the Original Code is Netscape
* Communications Corporation. Portions created by Netscape are
* Copyright (C) 1998 Netscape Communications Corporation. All
* Rights Reserved.
*
* Contributor(s):
*/
#include "nsrootidl.idl"
#include "nsISupports.idl"
interface nsIFileSpec;
interface nsIURI;
interface nsIObserver;
interface nsIChannel;
interface nsINetDataCache;
interface nsINetDataCacheRecord;
interface nsILoadGroup;
interface nsIStreamListener;
/**
* The nsICachedNetData interface represents a single entry in a database that
* caches data retrieved from the network. This interface is implemented by the
* cache manager on top of the low-level nsINetDataCacheRecord and
* nsINetDataCache interfaces that are implemented by the database.
*
* Each cache record may contain both content and metadata. The content may
* be, for example, GIF image data or HTML, and it is accessed through
* nsIChannel's streaming API. The opaque metadata, which may contain HTTP
* headers among other things, is stored as a byte array. Each entry in the
* cache is indexed by two different keys: a record id number and a key created
* by combining the URI with a "secondary key", e.g. HTTP post data.
*
* @See nsINetDataCacheRecord
* @See nsINetDataCache
* @See nsINetDataDiskCache
* @See nsINetDataCacheManager
*/
[scriptable, uuid(6aeb2a40-6d43-11d3-90c8-000064657374)]
interface nsICachedNetData : nsISupports
{
/**
* String form of the URI provided as an argument to the call to
* nsINetDataCacheManager::GetCachedNetData() that created this record.
*/
readonly attribute string uriSpec;
/**
* Getter for the opaque secondary database key provided as an argument to
* the call to nsINetDataCacheManager::GetCachedNetData() that created this
* record.
*/
void getSecondaryKey(out unsigned long length,
[retval, size_is(length)] out string secondaryKey);
/**
* This flag may be set by a protocol handler to indicate that it supports
* partial fetching of data. In that case, the cache manager is permitted
* to truncate the entry's content to accommodate incoming data for other
* cache entries rather than deleting it wholesale.
*/
attribute boolean allowPartial;
/**
* This flag indicates that the write stream supplying content data for the
* cache did not complete normally and, therefore, the content may be
* truncated.
*/
readonly attribute boolean partialFlag;
/**
* This flag can be set and cleared by a protocol handler as a form of
* self-notification, so as to avoid race conditions in which a protocol
* handler issues two identical network requests to fill the same cache
* entry. The cache manager itself largely ignores this flag.
*/
attribute boolean updateInProgress;
/**
* inUse is set if any existing channels are associated with this cache
* entry or if the updateInProgess flag is set. This can be used to
* prevent writing to a cache entry by a protocol handler if it's being
* read or written elsewhere.
*/
readonly attribute boolean inUse;
/**
* Date/time that the document was last stored on the origin server, as
* supplied by the protocol handler. This value is used as input to the
* cache replacement policy, i.e. it is not used for validation. If the
* protocol can't supply a last-modified time, this attribute should remain
* unset. When unset, the value of this attribute is zero.
*
* FIXME: Should use nsIDateTime interface, once it's created
* instead of PRTime, for improved scriptability ?
*/
attribute PRTime lastModifiedTime;
/**
* Supplied by the protocol handler, the expirationTime attribute specifies
* the time until which the document is guaranteed fresh, i.e. the document
* does not have to be validated with the server and, therefore, any data
* in cache is definitely usable. The value of this attribute serves as a
* hint to the cache replacement policy. Only one of either staleTime or
* expirationTime may be set for a single cache record. When unset, the
* value of this attribute is zero.
*/
attribute PRTime expirationTime;
/**
* Date/time supplied by the protocol handler, at which point the content
* is *likely* to be stale, i.e. the data in the cache may be out-of-date
* with respect to the data on the server. This heuristic date does not
* necessarily correspond to the HTTP Expires header, as it does not
* determine when cached network data must be validated with the origin
* server, but only serves as a hint to the cache replacement policy. Only
* one of either staleTime or expirationTime may be set for a single cache
* record. When unset, the value of this attribute is zero.
*/
attribute PRTime staleTime;
/**
* Date/time of last access of the data in this cache record, as determined
* by the cache manager.
*/
readonly attribute PRTime lastAccessTime;
/**
* Number of times this record has been accessed since it was first stored.
*/
readonly attribute PRUint16 numberAccesses;
/**
* Accessor methods for opaque meta-data which can be read and updated
* independently of the content data.
*
* The aTag argument can be used to accommodate multiple clients of the
* cache API, each of which wants to store its own private meta-data into
* the cache. For example, there could be a "headers" tag that the HTTP
* protocol handler uses to store http response headers and a "image size"
* tag used to store the image dimensions of a GIF file. The aData
* argument refers to an opaque blob of arbitrary bytes.
*
* IMPORTANT: If aData does not contain byte-oriented data, i.e. it's not a
* string, the contents of aData must be byte-swapped by the,
* caller, so as to make the cache files endian-independent.
*/
void getAnnotation(in string aTag,
out PRUint32 aLength, [size_is(aLength), retval] out string aData);
void setAnnotation(in string aTag,
in PRUint32 aLength, [size_is(aLength)] in string aData);
/**
* As a getter, return the number of content bytes stored in the cache,
* i.e. via the nsIChannel streaming APIs. This may be less than the
* complete content length if a partial cache fill occurred. The cached
* content can be truncated by setting the value of this attribute. The
* value of the attribute represents a logical, not a physical, length. If
* compression has been used, the content may consume less storage than
* indicated by this attribute.
*
* When this attribute is set to zero the associated cache disk file, if
* any, should be deleted.
*/
attribute PRUint32 storedContentLength;
/**
* Notify any observers associated with this cache entry of the deletion
* request. If all observers drop their reference to the cache entry,
* proceed to delete the underlying cache database record and associated
* content storage.
*/
void delete();
/**
* Flush any changes in this entry's data to the cache database. This
* method will automatically be called when the last reference to the cache
* is dropped, but it can also be called explicitly for a synchronous
* effect.
*/
void commit();
/**
* Parent container cache for this entry.
*/
readonly attribute nsINetDataCache cache;
/**
* Create a channel for reading or writing a stream of content into the
* entry. It is expected that many of the nsIChannel methods return
* NS_NOT_IMPLEMENTED, including:
*
* + GetURI()
* + GetContentType()
* + GetContentLength()
*
* Though nsIChannel provides for both async and synchronous I/O APIs, both
* may not be implemented. Only AsyncRead() and OpenOutputStream() is
* required. The aProxyChannel argument allows another channel to be
* specified as the proffered argument to nsIStreamListener methods rather
* than the cache's own channel.
*/
nsIChannel newChannel(in nsILoadGroup aLoadGroup,
in nsIChannel aProxyChannel);
/**
* This method can be used by a caching protocol handler to store data in
* the cache by forking an asynchronous read stream so that it is
* simultaneously sent to a requester and written into the cache. This
* method implicitly sets the updateInProgress flag, if it has not already
* been set.
*/
nsIStreamListener interceptAsyncRead(in nsIStreamListener aOriginalListener,
in PRUint32 aStartOffset);
};

View File

@@ -0,0 +1,143 @@
/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*-
*
* The contents of this file are subject to the Netscape Public
* License Version 1.1 (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.mozilla.org/NPL/
*
* Software distributed under the License is distributed on an "AS
* IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or
* implied. See the License for the specific language governing
* rights and limitations under the License.
*
* The Original Code is mozilla.org code.
*
* The Initial Developer of the Original Code is Netscape
* Communications Corporation. Portions created by Netscape are
* Copyright (C) 1998 Netscape Communications Corporation. All
* Rights Reserved.
*
* Contributor(s):
*/
#include "nsISupports.idl"
interface nsIURI;
interface nsINetDataCacheRecord;
interface nsISimpleEnumerator;
interface nsIFileSpec;
/**
* The nsINetDataCache defines the low-level API for a network-data
* cache, used to cache the responses to network retrieval commands.
* This interface, along with nsINetDataCacheRecord, is implemented by
* the memory cache, the file cache and, optionally, by some extension
* caches. This interface is essentially a pseudo-private API for the
* cache manager. Other clients should never use this interface.
*
* Each cache entry may contain both content, e.g. GIF image data, and
* associated metadata, e.g. HTTP headers. Each entry is indexed by two
* different keys: a record id number and a key created by combining the URI
* with a "secondary key", e.g. HTTP post data.
*
* The nsINetDataCache interface is agnostic as to where the data is
* stored and whether the storage is volatile or persistent. The
* memory cache, any disk caches and any extension caches must all
* implement this interface.
*
*/
[scriptable, uuid(ccfc58c0-6dde-11d3-90c8-000064657374)]
interface nsINetDataCache : nsISupports
{
/**
* Human-readable description of the cache module, e.g. "Disk Cache"
*/
readonly attribute wstring description;
/**
* Returns true if cached data is available for the given opaque key,
* even if only partial data is stored.
*/
boolean contains([size_is(length)] in string key, in PRUint32 length);
/**
* Fetch the cache entry record for the given opaque key. If one does not
* exist, create a new, empty record.
*/
nsINetDataCacheRecord getCachedNetData([size_is(length)] in string key,
in PRUint32 length);
/**
* Fetch the cache entry record for the given URI using the record ID as a key.
*/
nsINetDataCacheRecord getCachedNetDataByID(in PRInt32 RecordID);
/**
* False indicates that this cache is entirely bypassed.
*/
attribute boolean enabled;
/**
* Constants for flags attribute, below
*/
// Used for extension caches, e.g. a CD-ROM cache
const long READ_ONLY = 1 << 0;
// One of these bits must be set
const long MEMORY_CACHE = 1 << 1;
const long FLAT_FILE_CACHE = 1 << 2;
const long FILE_PER_URL_CACHE = 1 << 3;
/**
* See constants defined above.
*/
readonly attribute PRUint32 flags;
/**
* Total number of URI entries stored in the cache.
*/
readonly attribute PRUint32 numEntries;
/**
* Maximum number of URI entries that may be stored in the cache.
*/
readonly attribute PRUint32 maxEntries;
/**
* Enumerate the URI entries stored in the cache.
*/
nsISimpleEnumerator newCacheEntryIterator();
/**
* Contains a reference to the next cache in search order. For the memory
* cache, this attribute always references the disk cache. For the disk
* cache, it contains a reference to the first extension cache.
*/
attribute nsINetDataCache nextCache;
/**
* An estimate of the amount of storage occupied by the cache, in kB.
* Actual use may be slightly higher than reported due to cache overhead
* and heap fragmentation (in the memory cache) or block quantization (in
* the disk cache).
*/
readonly attribute PRUint32 storageInUse;
/**
* Remove all entries from a writable cache. This could be used, for
* example, after a guest ends a browser session. This is equivalent to
* setting the cache's Capacity to zero, except that all cache entries,
* even those in active use, will be deleted. Also, any global cache
* database files will be deleted.
*/
void removeAll();
};
%{ C++
// ProgID prefix for Components that implement this interface
#define NS_NETWORK_CACHE_PROGID "component://netscape/network/cache"
#define NS_NETWORK_MEMORY_CACHE_PROGID NS_NETWORK_CACHE_PROGID "?name=memory-cache"
#define NS_NETWORK_FLAT_CACHE_PROGID NS_NETWORK_CACHE_PROGID "?name=flat-cache"
#define NS_NETWORK_FILE_CACHE_PROGID NS_NETWORK_CACHE_PROGID "?name=file-cache"
%}

View File

@@ -0,0 +1,163 @@
/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*-
*
* The contents of this file are subject to the Netscape Public
* License Version 1.1 (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.mozilla.org/NPL/
*
* Software distributed under the License is distributed on an "AS
* IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or
* implied. See the License for the specific language governing
* rights and limitations under the License.
*
* The Original Code is mozilla.org code.
*
* The Initial Developer of the Original Code is Netscape
* Communications Corporation. Portions created by Netscape are
* Copyright (C) 1998 Netscape Communications Corporation. All
* Rights Reserved.
*
* Contributor(s):
*/
#include "nsISupports.idl"
interface nsISimpleEnumerator;
interface nsICachedNetData;
interface nsINetDataCache;
interface nsINetDataDiskCache;
interface nsIURI;
interface nsIFileSpec;
/**
* The network-response cache manager is partly responsible for the caching of
* content and associated metadata that has been retrieved via the network.
* (The remaining responsibility for caching lies with individual network
* protocol handlers.)
*
* The cache manager supervises the actions of individual cache components,
* such as the memory cache, the disk cache and any extension caches, e.g. a
* read-only CD-ROM cache.
*
* @See nsINetDataCache
* @See nsICachedNetData
*/
[scriptable, uuid(71c8ab00-6d5c-11d3-90c8-000064657374)]
interface nsINetDataCacheManager : nsISupports
{
/**
* Flag for the GetCachedNetData() method: If set, the memory cache is
* neither searched nor will any data be stored into it. This might be
* appropriate, for example, with images, because they have their own
* cache for storing *decoded* images.
*/
const unsigned long BYPASS_MEMORY_CACHE = 1 << 0;
/**
* Flag for the GetCachedNetData() method: If set, the disk cache
* is neither searched nor will any be data stored into it.
* However, read-only extension caches may be searched. This
* might be used to avoid leaving persistent records of secure
* data.
*/
const unsigned long BYPASS_PERSISTENT_CACHE = 1 << 1;
/**
* Flag for the GetCachedNetData() method: If set, any stream
* content is stored in the cache as a single disk file. Content
* will not be cached in the memory cache nor is it cached in a
* flat-file cache database. This is used to implement the jar
* protocol handler and to provide the stream-as-file semantics
* required by the classic bowser plugin API.
*/
const unsigned long CACHE_AS_FILE = 1 << 2;
/**
* Fetch the cache entry record for the given URI. If one does not exist,
* create a new, empty record. The normal search order for caches is:
* + Memory cache
* + Disk cache
* + File cache (stream-as-file cache)
* + All extension caches
*
* When writing, data is typically stored in both the memory cache and the
* disk cache. Both the search order and this write policy can be modified by
* setting one or more of the flag argument bits, as defined above.
*
* The optionally-NULL secondaryKey argument can be used, e.g. for form
* post data or for HTTP headers in the case of HTTP.
*/
nsICachedNetData getCachedNetData(in string uri,
[size_is(secondaryKeyLength)] in string secondaryKey,
in PRUint32 secondaryKeyLength,
in PRUint32 flags);
/**
* Returns true if cached content is available for the given URI, even if
* only partial data is stored. The flags argument behaves the same as for
* the GetCachedNetData() method, above.
*/
boolean contains(in string uri,
[size_is(secondaryKeyLength)] in string secondaryKey,
in PRUint32 secondaryKeyLength,
in PRUint32 flags);
/**
* Total number of unexpired URI entries stored in all caches. This number
* does not take into account duplicate URIs, e.g. because the memory cache
* and the disk cache might each contain an entry for the same URI.
*/
readonly attribute PRUint32 numEntries;
/**
* Enumerate the unexpired URI entries stored in all caches. Some URIs may
* be enumerated more than once, e.g. because the the memory cache and the
* disk cache might each contain an entry for the same URI.
*/
nsISimpleEnumerator newCacheEntryIterator();
/*
* Enumerate all the loaded nsINetDataCache-implementing cache modules.
* The first module enumerated will be the memory cache, the second will be
* the disk cache, then the file cache, followed by all the extension
* caches, in search order.
*/
nsISimpleEnumerator newCacheModuleIterator();
/**
* Remove all entries from all writable caches. This could be used, for
* example, after a guest ends a browser session. This is equivalent to
* setting the DiskCacheCapacity to zero, except that all cache entries,
* even those in active use, will be deleted. Also, any global cache
* database files will be deleted.
*/
void RemoveAll();
/**
* The disk cache is made up of the file cache (for stream-as-file
* requests) and a (possibly independent) persistent cache that handles all
* other cache requests. This attribute sets/gets the combined capacity of
* these caches, measured in KBytes. Setting the capacity lower than the
* current amount of space currently in use may cause cache entries to be
* evicted from the cache to accomodate the requested capacity.
*/
attribute PRUint32 diskCacheCapacity;
/**
* This attribute sets/gets the capacity of the memory cache, measured in
* KBytes. Setting the capacity lower than the current amount of space
* currently in use may cause cache entries to be evicted from the cache to
* accomodate the requested capacity.
*/
attribute PRUint32 memCacheCapacity;
/**
* This attribute must be set before attempting to store into the disk cache.
*/
attribute nsIFileSpec diskCacheFolder;
};
%{ C++
// ProgID prefix for Components that implement this interface
#define NS_NETWORK_CACHE_MANAGER_PROGID NS_NETWORK_CACHE_PROGID "?name=manager"
%}

View File

@@ -0,0 +1,125 @@
/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*-
*
* The contents of this file are subject to the Netscape Public
* License Version 1.1 (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.mozilla.org/NPL/
*
* Software distributed under the License is distributed on an "AS
* IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or
* implied. See the License for the specific language governing
* rights and limitations under the License.
*
* The Original Code is mozilla.org code.
*
* The Initial Developer of the Original Code is Netscape
* Communications Corporation. Portions created by Netscape are
* Copyright (C) 1998 Netscape Communications Corporation. All
* Rights Reserved.
*
* Contributor(s):
*/
#include "nsISupports.idl"
#include "nsrootidl.idl"
interface nsIFileSpec;
interface nsIChannel;
interface nsINetDataCache;
/**
* The nsINetDataCacheRecord represents a single entry in a database that
* caches data retrieved from the network. On top of this low-level interface
* to the raw record data, the cache manager implements a higher-level record
* interface, nsICachedNetData. Each instance of nsINetDataCacheRecord is
* (internally) associated with a parent database, an instance of the
* nsINetDataCache interface. This interface is essentially a pseudo-private
* API for the cache manager. Other clients should never use this interface.
*
* Each cache record may contain both content and metadata. The content may
* be, for example, GIF image data or HTML, and it is accessed through
* nsIChannel's streaming API. The opaque metadata, which may contain HTTP
* headers among other things, is accessed as a contiguous byte array. Each
* entry in the cache is indexed by two different keys: a unique record id
* number, generated by the cache, and an opaque string. The latter contains
* the URI and other secondary key information, e.g. HTTP form post key/value
* pairs.
*
* The nsINetDataCacheRecord interface is agnostic as to where the data is
* stored and whether the storage is volatile or persistent. The memory cache,
* the disk cache, a flat-file cache and any read-only extension caches must
* all implement this interface.
*
* @See nsICachedNetData
* @See nsINetDataCache
* @See nsINetDataDiskCache
* @See nsINetDataCacheManager
*/
interface nsILoadGroup;
[scriptable, uuid(fdcdd6a0-7461-11d3-90ca-0040056a906e)]
interface nsINetDataCacheRecord : nsISupports
{
/**
* As far as the nsINetDataCacheRecord implementation is concerned, the
* cache entry database key is an opaque blob, but it's intended to contain
* both the URI and any secondary keys, such as HTTP post data.
*/
void getKey(out unsigned long length, [size_is(length), retval] out string key);
/**
* A persistent record number assigned by the cache which must be unique
* among all entries stored within the same cache. The record ID serves as
* an alternate key to the cache record. Providing that they satisfy the
* afforementioned uniqueness requirement, record IDs can be assigned any
* value by the database except that they may never be zero.
*/
readonly attribute PRInt32 recordID;
/**
* Opaque data which can be updated for each cache entry independently of
* the content data. This data is a combination of protocol-independent
* data provided by the cache manager and protocol-specific meta-data,
* e.g. HTTP headers.
*/
void getMetaData(out PRUint32 length, [size_is(length), retval] out string metaData);
void setMetaData(in PRUint32 length, [size_is(length)] in string data);
/**
* Number of content bytes stored in the cache, i.e. via the nsIChannel
* streaming APIs. This may be less than the complete content length if a
* partial cache fill occurred. Additionally, the cached content can be
* truncated by reducing the value of this attribute. When this attribute
* is set to zero the associated cache disk file, if any, should be
* deleted.
*/
attribute PRUint32 storedContentLength;
/**
* Delete this cache entry and its associated content.
*/
void delete();
/**
* Create a channel for reading or writing a stream of content into the
* entry. However, many of the nsIChannel methods may return
* NS_NOT_IMPLEMENTED, including:
*
* + GetURI()
* + GetContentType()
* + GetContentLength()
*/
nsIChannel newChannel(in nsILoadGroup loadGroup);
/**
* If a cache is implemented such that it stores each URI's content in an
* individual disk file, this method will identify the file corresponding
* to this record. This may be used to implement the "stream-as-file"
* semantics required by some plugins and by the 'jar:' protocol handler.
* However, not all cache implementations are *required* to store the data
* from each URI in an individual file, so it is acceptable for an
* implementation of this method to signal NS_NOT_IMPLEMENTED.
*/
readonly attribute nsIFileSpec filename;
};

View File

@@ -1,4 +1,4 @@
/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*-
/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*-
*
* The contents of this file are subject to the Netscape Public
* License Version 1.1 (the "License"); you may not use this file
@@ -20,44 +20,23 @@
* Contributor(s):
*/
#ifndef nsBaseClipboard_h__
#define nsBaseClipboard_h__
#include "nsINetDataCache.idl"
#include "nsIClipboard.h"
#include "nsITransferable.h"
class nsITransferable;
class nsDataObj;
class nsIClipboardOwner;
class nsIWidget;
interface nsIFileSpec;
/**
* Native Win32 BaseClipboard wrapper
/**
* A network-data disk cache is used to persistently cache the responses to
* network retrieval commands. Each cache entry may contain both content,
* e.g. GIF image data, and associated metadata, e.g. HTTP headers.
*/
class nsBaseClipboard : public nsIClipboard
[scriptable, uuid(6408e390-6f13-11d3-90c8-000064657374)]
interface nsINetDataDiskCache : nsINetDataCache
{
public:
nsBaseClipboard();
virtual ~nsBaseClipboard();
//nsISupports
NS_DECL_ISUPPORTS
// nsIClipboard
NS_DECL_NSICLIPBOARD
protected:
NS_IMETHOD SetNativeClipboardData() = 0;
NS_IMETHOD GetNativeClipboardData(nsITransferable * aTransferable) = 0;
PRBool mIgnoreEmptyNotification;
nsIClipboardOwner * mClipboardOwner;
nsITransferable * mTransferable;
/**
* This attribute must be set before calling any other methods of this
* interface.
*/
attribute nsIFileSpec diskCacheFolder;
};
#endif // nsBaseClipboard_h__

View File

@@ -0,0 +1,106 @@
/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*-
*
* The contents of this file are subject to the Netscape Public
* License Version 1.1 (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.mozilla.org/NPL/
*
* Software distributed under the License is distributed on an "AS
* IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or
* implied. See the License for the specific language governing
* rights and limitations under the License.
*
* The Original Code is Mozilla Communicator client code, released
* March 31, 1998.
*
* The Initial Developer of the Original Code is Netscape
* Communications Corporation. Portions created by Netscape are
* Copyright (C) 1999 Netscape Communications Corporation. All
* Rights Reserved.
*
* Contributor(s):
* Scott Furman, fur@netscape.com
*/
#include "nsrootidl.idl"
#include "nsISupports.idl"
interface nsIFileSpec;
interface nsIStreamAsFileObserver;
/**
* In addition to enhancing effective network response time via caching, the
* cache manager serves a second purpose by providing the stream-as-file
* service required by traditional browser plugins and the jar: protocol
* handler. The interface below provides a means for a client to determine the
* filename associated with a stream and to detect modification/deletion of
* that file.
*/
[scriptable, uuid(0eedbbf0-92d9-11d3-90d3-0040056a906e)]
interface nsIStreamAsFile : nsISupports
{
/**
* Filename containing stream-as-file
*/
readonly attribute nsIFileSpec fileSpec;
/**
* Add an observer for this cache record. When the cache wants to delete
* or truncate a record, so as to make space for another cache entry's
* content data, it will call <code>aObserver</code>'s Observe() method,
* passing the nsIStreamAsFile instance as the <code>aSubject</code>
* argument and an appropriate message. If the observer does not wish to
* inhibit deletion/truncation, it should Release() any references it has to the
* cache record.
*
* @See nsIStreamAsFileObserver
*/
void addObserver(in nsIStreamAsFileObserver aObserver);
/**
* Delete an observer that was added by the AddObserver() method.
*/
void removeObserver(in nsIStreamAsFileObserver aObserver);
};
/**
* This interface can be implemented by a client to receive notifications of
* either modification or deletion of a file created by the cache manager using
* the stream-as-file semantics.
*/
[scriptable, uuid(a26e27c0-92da-11d3-90d3-0040056a906e)]
interface nsIStreamAsFileObserver : nsISupports
{
/**
* Flag bits for argument to Observe() method.
*/
const long NOTIFY_AVAILABLE = 1 << 0; // Stream-as-file now available for reading
const long NOTIFY_ERROR = 1 << 1; // Error while loading stream / creating file
const long REQUEST_DELETION = 1 << 2; // Cache manager wishes to delete/truncate file
const long INVALIDATE = 1 << 3; // File is out-of-date
// Convenience value
const long MAKE_UNAVAILABLE = REQUEST_DELETION | INVALIDATE;
/**
* Receive either a notification or a request concerning a file that has
* been opened using stream-as-file. The aMessage and aError arguments
* have varying values depending on the nature of the notification.
* aMessage is set to NOTIFY_AVAILABLE when a complete stream has been read
* and stored on disk in a file. At that point, and no sooner, may the
* filename attribute of the associated nsIStreamAsFile be accessed via the
* associated nsIStreamAsFile interface. If the aMessage argument is
* NOTIFY_ERROR, the aError argument contains the relevant error code. If
* the aMessage argument is either REQUEST_DELETION or REQUEST_TRUNCATION,
* the callee should immediately Release() all references to the
* nsIStreamAsFile (and any references to its associated nsICachedNetData
* instances), unless it wishes to inhibit the requested file modification.
* If the aMessage argument is INVALIDATE, the cache manager is replacing
* the file with a more recent version. If a client wants to continue
* using the (now out-of-date) file, it must delete it when it has finished,
* as the cache manager will effectively relinquished ownership of the
* file.
*/
void ObserveStreamAsFile(in nsIStreamAsFile aStreamAsFile,
in PRUint32 aMessage,
in nsresult aError);
};

View File

@@ -0,0 +1,39 @@
#!gmake
#
# The contents of this file are subject to the Netscape Public
# License Version 1.1 (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.mozilla.org/NPL/
#
# Software distributed under the License is distributed on an "AS
# IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or
# implied. See the License for the specific language governing
# rights and limitations under the License.
#
# The Original Code is mozilla.org code.
#
# The Initial Developer of the Original Code is Netscape
# Communications Corporation. Portions created by Netscape are
# Copyright (C) 1998 Netscape Communications Corporation. All
# Rights Reserved.
#
# Contributor(s):
DEPTH = ..
MODULE = necko
DIRS= \
base \
dns \
build \
protocol \
socket \
util \
mime \
streamconv \
cache \
test \
$(NULL)
include <$(DEPTH)\config\rules.mak>

View File

@@ -1,4 +1,4 @@
/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*-
/* -*- Mode: IDL; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*-
*
* The contents of this file are subject to the Netscape Public
* License Version 1.1 (the "License"); you may not use this file
@@ -21,23 +21,12 @@
*/
#include "nsISupports.idl"
#include "nsIFileSpec.idl"
[scriptable, uuid(B148EED1-236D-11d3-B35C-00A0CC3C1CDE)]
interface nsISound : nsISupports
interface nsIAtom;
[scriptable, uuid(a3ec67f0-465a-11d3-9a89-0080c7cb1080)]
interface nsIHTTPHeader : nsISupports
{
void Init();
void Play(in nsIFileSpec filespec);
// void Stop();
void Beep();
nsIAtom GetField();
string GetValue();
};
%{ C++
extern nsresult
NS_NewSound(nsISound** aSound);
%}

View File

@@ -0,0 +1,603 @@
/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 4 -*-
*
* 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.
*/
#include "nsIStreamListener.h"
#include "nsIStreamObserver.h"
#include "nsIServiceManager.h"
#include "nsIInputStream.h"
#include "nsIOutputStream.h"
#include "nsIEventQueue.h"
#include "nsIEventQueueService.h"
#include "nsIChannel.h"
#include "nsCOMPtr.h"
#include "nsINetDataCache.h"
#include "nsINetDataCacheManager.h"
#include "nsICachedNetData.h"
// Number of test entries to be placed in the cache
// FIXME - temporary
#define NUM_CACHE_ENTRIES 25
// Cache content stream length will have random length between zero and
// MAX_CONTENT_LENGTH bytes
#define MAX_CONTENT_LENGTH 20000
// Limits, converted to KB
#define DISK_CACHE_CAPACITY ((MAX_CONTENT_LENGTH * 4) >> 10)
#define MEM_CACHE_CAPACITY ((MAX_CONTENT_LENGTH * 3) >> 10)
// Length of random-data cache entry URI key
#define CACHE_KEY_LENGTH 13
// Length of random-data cache entry secondary key
#define CACHE_SECONDARY_KEY_LENGTH 10
// Length of random-data cache entry meta-data
#define CACHE_PROTOCOL_PRIVATE_LENGTH 10
// Mapping from test case number to RecordID
static PRInt32 recordID[NUM_CACHE_ENTRIES];
static PRInt32
mapRecordIdToTestNum(PRInt32 aRecordID)
{
int i;
for (i = 0; i < NUM_CACHE_ENTRIES; i++) {
if (recordID[i] == aRecordID)
return i;
}
return -1;
}
// A supply of stream data to either store or compare with
class nsITestDataStream {
public:
virtual ~nsITestDataStream() {};
virtual PRUint32 Next() = 0;
virtual void Read(char* aBuf, PRUint32 aCount) = 0;
virtual void ReadString(char* aBuf, PRUint32 aCount) = 0;
virtual PRBool Match(char* aBuf, PRUint32 aCount) = 0;
virtual PRBool MatchString(char* aBuf, PRUint32 aCount) = 0;
virtual void Skip(PRUint32 aCount) = 0;
virtual void SkipString(PRUint32 aCount) = 0;
};
// A reproducible stream of random data.
class RandomStream : public nsITestDataStream {
public:
RandomStream(PRUint32 aSeed) {
mStartSeed = mState = aSeed;
}
PRUint32 GetStartSeed() {
return mStartSeed;
}
PRUint32 Next() {
mState = 1103515245 * mState + 12345 ^ (mState >> 16);
return mState;
}
PRUint8 NextChar() {
PRUint8 c;
do {
c = Next();
} while (!isalnum(c));
return c;
}
void Read(char* aBuf, PRUint32 aCount) {
PRUint32 i;
for (i = 0; i < aCount; i++) {
*aBuf++ = Next();
}
}
// Same as Read(), but using only printable chars and
// with a terminating NUL
void ReadString(char* aBuf, PRUint32 aCount) {
PRUint32 i;
for (i = 0; i < aCount; i++) {
*aBuf++ = NextChar();
}
*aBuf = 0;
}
PRBool
Match(char* aBuf, PRUint32 aCount) {
PRUint32 i;
for (i = 0; i < aCount; i++) {
if (*aBuf++ != (char)(Next() & 0xff))
return PR_FALSE;
}
return PR_TRUE;
}
PRBool
MatchString(char* aBuf, PRUint32 aCount) {
PRUint32 i;
for (i = 0; i < aCount; i++) {
if (*aBuf++ != (char)(NextChar() & 0xff))
return PR_FALSE;
}
// Check for terminating NUL character
if (*aBuf)
return PR_FALSE;
return PR_TRUE;
}
void
Skip(PRUint32 aCount) {
while (aCount--)
Next();
}
void
SkipString(PRUint32 aCount) {
while (aCount--)
NextChar();
}
protected:
PRUint32 mState;
PRUint32 mStartSeed;
};
static int gNumReaders = 0;
static PRUint32 gTotalBytesRead = 0;
static PRUint32 gTotalBytesWritten = 0;
static PRUint32 gTotalDuration = 0;
class nsReader : public nsIStreamListener {
public:
NS_DECL_ISUPPORTS
nsReader()
: mStartTime(0), mBytesRead(0)
{
NS_INIT_REFCNT();
gNumReaders++;
}
virtual ~nsReader() {
delete mTestDataStream;
gNumReaders--;
}
nsresult
Init(nsITestDataStream* aRandomStream, PRUint32 aExpectedStreamLength) {
mTestDataStream = aRandomStream;
mExpectedStreamLength = aExpectedStreamLength;
mRefCnt = 1;
return NS_OK;
}
NS_IMETHOD OnStartRequest(nsIChannel* channel,
nsISupports* context) {
mStartTime = PR_IntervalNow();
return NS_OK;
}
NS_IMETHOD OnDataAvailable(nsIChannel* channel,
nsISupports* context,
nsIInputStream *aIStream,
PRUint32 aSourceOffset,
PRUint32 aLength) {
char buf[1025];
while (aLength > 0) {
PRUint32 amt;
PRBool match;
aIStream->Read(buf, sizeof buf, &amt);
if (amt == 0) break;
aLength -= amt;
mBytesRead += amt;
match = mTestDataStream->Match(buf, amt);
NS_ASSERTION(match, "Stored data was corrupted on read");
}
return NS_OK;
}
NS_IMETHOD OnStopRequest(nsIChannel* channel,
nsISupports* context,
nsresult aStatus,
const PRUnichar* aMsg) {
PRIntervalTime endTime;
PRIntervalTime duration;
endTime = PR_IntervalNow();
duration = (endTime - mStartTime);
if (NS_FAILED(aStatus)) printf("channel failed.\n");
// printf("read %d bytes\n", mBytesRead);
//FIXME NS_ASSERTION(mBytesRead == mExpectedStreamLength,
// "Stream in cache is wrong length");
gTotalBytesRead += mBytesRead;
gTotalDuration += duration;
return NS_OK;
}
protected:
PRIntervalTime mStartTime;
PRUint32 mBytesRead;
nsITestDataStream* mTestDataStream;
PRUint32 mExpectedStreamLength;
};
NS_IMPL_ISUPPORTS2(nsReader, nsIStreamListener, nsIStreamObserver)
static nsIEventQueue* eventQueue;
static NS_DEFINE_CID(kEventQueueServiceCID, NS_EVENTQUEUESERVICE_CID);
nsresult
InitQueue() {
nsresult rv;
NS_WITH_SERVICE(nsIEventQueueService, eventQService, kEventQueueServiceCID, &rv);
NS_ASSERTION(NS_SUCCEEDED(rv), "Couldn't get event queue service");
rv = eventQService->CreateThreadEventQueue();
NS_ASSERTION(NS_SUCCEEDED(rv), "Couldn't create event queue");
rv = eventQService->GetThreadEventQueue(PR_CurrentThread(), &eventQueue);
NS_ASSERTION(NS_SUCCEEDED(rv), "Couldn't get event queue for main thread");
return NS_OK;
}
// Process events until all streams are OnStopRequest'ed
nsresult
WaitForEvents() {
while (gNumReaders) {
eventQueue->ProcessPendingEvents();
}
return NS_OK;
}
// Read data for a single cache record and compare against testDataStream
nsresult
TestReadStream(nsICachedNetData *cacheEntry, nsITestDataStream *testDataStream,
PRUint32 expectedStreamLength)
{
nsCOMPtr<nsIChannel> channel;
nsresult rv;
PRUint32 actualContentLength;
rv = cacheEntry->NewChannel(0, 0, getter_AddRefs(channel));
NS_ASSERTION(NS_SUCCEEDED(rv), " ");
rv = cacheEntry->GetStoredContentLength(&actualContentLength);
NS_ASSERTION(NS_SUCCEEDED(rv), " ");
// FIXME NS_ASSERTION(actualContentLength == expectedStreamLength,
// "nsICachedNetData::GetContentLength() busted ?");
nsReader *reader = new nsReader;
reader->AddRef();
rv = reader->Init(testDataStream, expectedStreamLength);
NS_ASSERTION(NS_SUCCEEDED(rv), " ");
rv = channel->AsyncRead(0, -1, 0, reader);
NS_ASSERTION(NS_SUCCEEDED(rv), " ");
reader->Release();
return NS_OK;
}
// Convert PRTime to unix-style time_t, i.e. seconds since the epoch
static PRUint32
convertPRTimeToSeconds(PRTime aTime64)
{
double fpTime;
LL_L2D(fpTime, aTime64);
return (PRUint32)(fpTime * 1e-6 + 0.5);
}
// Convert unix-style time_t, i.e. seconds since the epoch, to PRTime
static PRTime
convertSecondsToPRTime(PRUint32 aSeconds)
{
PRInt64 t64;
LL_L2I(t64, aSeconds);
LL_MUL(t64, t64, 1000000);
return t64;
}
// Read the test data that was written in FillCache(), checking for
// corruption, truncation.
nsresult
TestRead(nsINetDataCacheManager *aCache, PRUint32 aFlags)
{
nsresult rv;
PRBool inCache;
nsCOMPtr<nsICachedNetData> cacheEntry;
RandomStream *randomStream;
char uriCacheKey[CACHE_KEY_LENGTH];
char secondaryCacheKey[CACHE_SECONDARY_KEY_LENGTH];
char *storedUriKey;
PRUint32 testNum;
gTotalBytesRead = 0;
gTotalDuration = 0;
for (testNum = 0; testNum < NUM_CACHE_ENTRIES; testNum++) {
randomStream = new RandomStream(testNum);
randomStream->ReadString(uriCacheKey, sizeof uriCacheKey - 1);
randomStream->Read(secondaryCacheKey, sizeof secondaryCacheKey);
// Ensure that entry is in the cache
rv = aCache->Contains(uriCacheKey,
secondaryCacheKey, sizeof secondaryCacheKey,
aFlags, &inCache);
NS_ASSERTION(NS_SUCCEEDED(rv), " ");
NS_ASSERTION(inCache, "nsINetDataCacheManager::Contains error");
rv = aCache->GetCachedNetData(uriCacheKey,
secondaryCacheKey, sizeof secondaryCacheKey,
aFlags,
getter_AddRefs(cacheEntry));
NS_ASSERTION(NS_SUCCEEDED(rv), " ");
// Test GetUriSpec() method
rv = cacheEntry->GetUriSpec(&storedUriKey);
NS_ASSERTION(NS_SUCCEEDED(rv) &&
!memcmp(storedUriKey, &uriCacheKey[0], sizeof uriCacheKey),
"nsICachedNetData::GetKey failed");
nsAllocator::Free(storedUriKey);
// Test GetSecondaryKey() method
PRUint32 storedSecondaryKeyLength;
char* storedSecondaryKey;
rv = cacheEntry->GetSecondaryKey(&storedSecondaryKeyLength, &storedSecondaryKey);
NS_ASSERTION(NS_SUCCEEDED(rv) &&
!memcmp(storedSecondaryKey, &secondaryCacheKey[0],
sizeof secondaryCacheKey),
"nsICachedNetData::GetSecondaryKey failed");
// Compare against stored protocol data
char *storedProtocolData;
PRUint32 storedProtocolDataLength;
rv = cacheEntry->GetAnnotation("test data", &storedProtocolDataLength, &storedProtocolData);
NS_ASSERTION(NS_SUCCEEDED(rv) &&
storedProtocolDataLength == CACHE_PROTOCOL_PRIVATE_LENGTH,
"nsICachedNetData::GetAnnotation() failed");
randomStream->Match(storedProtocolData, storedProtocolDataLength);
// Test GetAllowPartial()
PRBool allowPartial;
rv = cacheEntry->GetAllowPartial(&allowPartial);
NS_ASSERTION(NS_SUCCEEDED(rv) &&
(allowPartial == (PRBool)(randomStream->Next() & 1)),
"nsICachedNetData::GetAllowPartial() failed");
// Test GetExpirationTime()
PRTime expirationTime;
PRTime expectedExpirationTime = convertSecondsToPRTime(randomStream->Next() & 0xffffff);
rv = cacheEntry->GetExpirationTime(&expirationTime);
NS_ASSERTION(NS_SUCCEEDED(rv) && LL_EQ(expirationTime, expectedExpirationTime),
"nsICachedNetData::GetExpirationTime() failed");
PRUint32 expectedStreamLength = randomStream->Next() % MAX_CONTENT_LENGTH;
TestReadStream(cacheEntry, randomStream, expectedStreamLength);
}
WaitForEvents();
// Compute rate in MB/s
double rate = gTotalBytesRead / PR_IntervalToMilliseconds(gTotalDuration);
rate *= NUM_CACHE_ENTRIES;
rate *= 1000;
rate /= (1024 * 1024);
printf("Read %7d bytes at a rate of %5.1f MB per second \n",
gTotalBytesRead, rate);
return NS_OK;
}
// Create entries in the network data cache, using random data for the
// key, the meta-data and the stored content data.
nsresult
FillCache(nsINetDataCacheManager *aCache, PRUint32 aFlags, PRUint32 aCacheCapacity)
{
nsresult rv;
PRBool inCache;
nsCOMPtr<nsICachedNetData> cacheEntry;
nsCOMPtr<nsIChannel> channel;
nsCOMPtr<nsIOutputStream> outStream;
nsCOMPtr<nsINetDataCache> containingCache;
char buf[1000];
PRUint32 protocolDataLength;
char cacheKey[CACHE_KEY_LENGTH];
char secondaryCacheKey[CACHE_SECONDARY_KEY_LENGTH];
char protocolData[CACHE_PROTOCOL_PRIVATE_LENGTH];
PRUint32 testNum;
RandomStream *randomStream;
gTotalBytesWritten = 0;
PRIntervalTime startTime = PR_IntervalNow();
for (testNum = 0; testNum < NUM_CACHE_ENTRIES; testNum++) {
randomStream = new RandomStream(testNum);
randomStream->ReadString(cacheKey, sizeof cacheKey - 1);
randomStream->Read(secondaryCacheKey, sizeof secondaryCacheKey);
// No entry should be in cache until we add it
rv = aCache->Contains(cacheKey,
secondaryCacheKey, sizeof secondaryCacheKey,
aFlags, &inCache);
NS_ASSERTION(NS_SUCCEEDED(rv), " ");
NS_ASSERTION(!inCache, "nsINetDataCacheManager::Contains error");
rv = aCache->GetCachedNetData(cacheKey,
secondaryCacheKey, sizeof secondaryCacheKey,
aFlags,
getter_AddRefs(cacheEntry));
NS_ASSERTION(NS_SUCCEEDED(rv), "Couldn't access cacheEntry via cache key");
// Test nsINetDataCacheManager::GetNumEntries()
PRUint32 numEntries = (PRUint32)-1;
rv = aCache->GetNumEntries(&numEntries);
NS_ASSERTION(NS_SUCCEEDED(rv), "Couldn't get number of cache entries");
NS_ASSERTION(numEntries == testNum + 1, "GetNumEntries failure");
// Record meta-data should be initially empty
char *protocolDatap;
rv = cacheEntry->GetAnnotation("test data", &protocolDataLength, &protocolDatap);
NS_ASSERTION(NS_SUCCEEDED(rv), " ");
if ((protocolDataLength != 0) || (protocolDatap != 0))
return NS_ERROR_FAILURE;
// Store random data as meta-data
randomStream->Read(protocolData, sizeof protocolData);
cacheEntry->SetAnnotation("test data", sizeof protocolData, protocolData);
// Store random data as allow-partial flag
PRBool allowPartial = randomStream->Next() & 1;
rv = cacheEntry->SetAllowPartial(allowPartial);
NS_ASSERTION(NS_SUCCEEDED(rv),
"nsICachedNetData::SetAllowPartial() failed");
// Store random data as expiration time
PRTime expirationTime = convertSecondsToPRTime(randomStream->Next() & 0xffffff);
rv = cacheEntry->SetExpirationTime(expirationTime);
NS_ASSERTION(NS_SUCCEEDED(rv),
"nsICachedNetData::SetExpirationTime() failed");
// Cache manager complains if expiration set without setting last-modified time
rv = cacheEntry->SetLastModifiedTime(expirationTime);
rv = cacheEntry->NewChannel(0, 0, getter_AddRefs(channel));
NS_ASSERTION(NS_SUCCEEDED(rv), " ");
rv = cacheEntry->GetCache(getter_AddRefs(containingCache));
NS_ASSERTION(NS_SUCCEEDED(rv), " ");
rv = channel->OpenOutputStream(0, getter_AddRefs(outStream));
NS_ASSERTION(NS_SUCCEEDED(rv), " ");
int streamLength = randomStream->Next() % MAX_CONTENT_LENGTH;
int remaining = streamLength;
while (remaining) {
PRUint32 numWritten;
int amount = PR_MIN(sizeof buf, remaining);
randomStream->Read(buf, amount);
rv = outStream->Write(buf, amount, &numWritten);
NS_ASSERTION(NS_SUCCEEDED(rv), " ");
NS_ASSERTION(numWritten == (PRUint32)amount, "Write() bug?");
remaining -= amount;
PRUint32 storageInUse;
rv = containingCache->GetStorageInUse(&storageInUse);
NS_ASSERTION(NS_SUCCEEDED(rv) && (storageInUse <= aCacheCapacity),
"Cache manager failed to limit cache growth");
}
outStream->Close();
gTotalBytesWritten += streamLength;
// *Now* there should be an entry in the cache
rv = aCache->Contains(cacheKey,
secondaryCacheKey, sizeof secondaryCacheKey,
aFlags, &inCache);
NS_ASSERTION(NS_SUCCEEDED(rv), " ");
NS_ASSERTION(inCache, "nsINetDataCacheManager::Contains error");
delete randomStream;
}
PRIntervalTime endTime = PR_IntervalNow();
// Compute rate in MB/s
double rate = gTotalBytesWritten / PR_IntervalToMilliseconds(endTime - startTime);
rate *= 1000;
rate /= (1024 * 1024);
printf("Wrote %7d bytes at a rate of %5.1f MB per second \n",
gTotalBytesWritten, rate);
return NS_OK;
}
nsresult NS_AutoregisterComponents()
{
nsresult rv = nsComponentManager::AutoRegister(nsIComponentManager::NS_Startup,
NULL /* default */);
return rv;
}
nsresult
Test(nsINetDataCacheManager *aCache, PRUint32 aFlags, PRUint32 aCacheCapacity)
{
nsresult rv;
rv = aCache->RemoveAll();
NS_ASSERTION(NS_SUCCEEDED(rv), "Couldn't clear cache");
PRUint32 numEntries = (PRUint32)-1;
rv = aCache->GetNumEntries(&numEntries);
NS_ASSERTION(NS_SUCCEEDED(rv), "Couldn't get number of cache entries");
NS_ASSERTION(numEntries == 0, "Couldn't clear cache");
rv = FillCache(aCache, aFlags, aCacheCapacity);
NS_ASSERTION(NS_SUCCEEDED(rv), "Couldn't fill cache with random test data");
rv = TestRead(aCache, aFlags);
NS_ASSERTION(NS_SUCCEEDED(rv), "Couldn't read random test data from cache");
rv = aCache->RemoveAll();
NS_ASSERTION(NS_SUCCEEDED(rv), "Couldn't clear cache");
rv = aCache->GetNumEntries(&numEntries);
NS_ASSERTION(NS_SUCCEEDED(rv), "Couldn't get number of cache entries");
NS_ASSERTION(numEntries == 0, "Couldn't clear cache");
return 0;
}
int
main(int argc, char* argv[])
{
nsresult rv;
nsCOMPtr<nsINetDataCacheManager> cache;
rv = NS_AutoregisterComponents();
NS_ASSERTION(NS_SUCCEEDED(rv), "Couldn't register XPCOM components");
rv = nsComponentManager::CreateInstance(NS_NETWORK_CACHE_MANAGER_PROGID,
nsnull,
NS_GET_IID(nsINetDataCacheManager),
getter_AddRefs(cache));
NS_ASSERTION(NS_SUCCEEDED(rv), "Couldn't create cache manager factory") ;
cache->SetDiskCacheCapacity(DISK_CACHE_CAPACITY);
cache->SetMemCacheCapacity(MEM_CACHE_CAPACITY);
InitQueue();
Test(cache, nsINetDataCacheManager::BYPASS_PERSISTENT_CACHE, MEM_CACHE_CAPACITY);
Test(cache, nsINetDataCacheManager::BYPASS_MEMORY_CACHE, DISK_CACHE_CAPACITY);
return 0;
}

View File

@@ -0,0 +1,820 @@
/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 4 -*-
*
* 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.
*/
#include "nsIStreamListener.h"
#include "nsIStreamObserver.h"
#include "nsIServiceManager.h"
#include "nsIInputStream.h"
#include "nsIOutputStream.h"
#include "nsIEventQueue.h"
#include "nsIEventQueueService.h"
#include "nsIChannel.h"
#include "nsCOMPtr.h"
#include "nsString.h"
#include <stdio.h>
#include "nsINetDataCache.h"
#include "nsINetDataDiskCache.h"
#include "nsINetDataCacheRecord.h"
#include "nsMemCacheCID.h"
// file cache include
#include "nsNetDiskCacheCID.h"
#include "nsIPref.h"
#include "prenv.h"
#include "nsIFileStream.h"
// Number of test entries to be placed in the cache
#define NUM_CACHE_ENTRIES 250
// Cache content stream length will have random length between zero and
// MAX_CONTENT_LENGTH bytes
#define MAX_CONTENT_LENGTH 20000
// Length of random-data cache entry key
#define CACHE_KEY_LENGTH 15
// Length of random-data cache entry meta-data
#define CACHE_METADATA_LENGTH 100
static NS_DEFINE_CID(kMemCacheCID, NS_MEM_CACHE_FACTORY_CID);
static NS_DEFINE_CID(kEventQueueServiceCID, NS_EVENTQUEUESERVICE_CID);
// file cache cid
static NS_DEFINE_CID(kDiskCacheCID, NS_NETDISKCACHE_CID) ;
static NS_DEFINE_CID(kPrefCID, NS_PREF_CID);
static NS_DEFINE_IID(kIPrefIID, NS_IPREF_IID);
// Mapping from test case number to RecordID
static PRInt32 recordID[NUM_CACHE_ENTRIES];
static PRInt32
mapRecordIdToTestNum(PRInt32 aRecordID)
{
int i;
for (i = 0; i < NUM_CACHE_ENTRIES; i++) {
if (recordID[i] == aRecordID)
return i;
}
return -1;
}
// A supply of stream data to either store or compare with
class nsITestDataStream {
public:
virtual ~nsITestDataStream() {};
virtual PRUint32 Next() = 0;
virtual void Read(char* aBuf, PRUint32 aCount) = 0;
virtual PRBool Match(char* aBuf, PRUint32 aCount) = 0;
virtual void Skip(PRUint32 aCount) = 0;
};
// A reproducible stream of random data.
class RandomStream : public nsITestDataStream {
public:
RandomStream(PRUint32 aSeed) {
mStartSeed = mState = aSeed;
}
PRUint32 GetStartSeed() {
return mStartSeed;
}
PRUint32 Next() {
mState = 1103515245 * mState + 12345;
return mState;
}
void Read(char* aBuf, PRUint32 aCount) {
PRUint32 i;
for (i = 0; i < aCount; i++) {
*aBuf++ = Next();
}
}
PRBool
Match(char* aBuf, PRUint32 aCount) {
PRUint32 i;
for (i = 0; i < aCount; i++) {
if (*aBuf++ != (char)(Next() & 0xff))
return PR_FALSE;
}
return PR_TRUE;
}
void
Skip(PRUint32 aCount) {
while (aCount--)
Next();
}
protected:
PRUint32 mState;
PRUint32 mStartSeed;
};
// A stream of data that increments on each byte that is read, modulo 256
class CounterStream : public nsITestDataStream {
public:
CounterStream(PRUint32 aSeed) {
mStartSeed = mState = aSeed;
}
PRUint32 GetStartSeed() {
return mStartSeed;
}
PRUint32 Next() {
mState += 1;
mState &= 0xff;
return mState;
}
void Read(char* aBuf, PRUint32 aCount) {
PRUint32 i;
for (i = 0; i < aCount; i++) {
*aBuf++ = Next();
}
}
PRBool
Match(char* aBuf, PRUint32 aCount) {
PRUint32 i;
for (i = 0; i < aCount; i++) {
if (*aBuf++ != (char)Next())
return PR_FALSE;
}
return PR_TRUE;
}
void
Skip(PRUint32 aCount) {
mState += aCount;
mState &= 0xff;
}
protected:
PRUint32 mState;
PRUint32 mStartSeed;
};
static int gNumReaders = 0;
static PRUint32 gTotalBytesRead = 0;
static PRUint32 gTotalDuration = 0;
class nsReader : public nsIStreamListener {
public:
NS_DECL_ISUPPORTS
nsReader()
: mStartTime(0), mBytesRead(0)
{
NS_INIT_REFCNT();
gNumReaders++;
}
virtual ~nsReader() {
delete mTestDataStream;
gNumReaders--;
}
nsresult
Init(nsITestDataStream* aRandomStream, PRUint32 aExpectedStreamLength) {
mTestDataStream = aRandomStream;
mExpectedStreamLength = aExpectedStreamLength;
mRefCnt = 1;
return NS_OK;
}
NS_IMETHOD OnStartRequest(nsIChannel* channel,
nsISupports* context) {
mStartTime = PR_IntervalNow();
return NS_OK;
}
NS_IMETHOD OnDataAvailable(nsIChannel* channel,
nsISupports* context,
nsIInputStream *aIStream,
PRUint32 aSourceOffset,
PRUint32 aLength) {
char buf[1025];
while (aLength > 0) {
PRUint32 amt;
PRBool match;
aIStream->Read(buf, sizeof buf, &amt);
if (amt == 0) break;
aLength -= amt;
mBytesRead += amt;
match = mTestDataStream->Match(buf, amt);
NS_ASSERTION(match, "Stored data was corrupted on read");
}
return NS_OK;
}
NS_IMETHOD OnStopRequest(nsIChannel* channel,
nsISupports* context,
nsresult aStatus,
const PRUnichar* aMsg) {
PRIntervalTime endTime;
PRIntervalTime duration;
endTime = PR_IntervalNow();
duration = (endTime - mStartTime);
if (NS_FAILED(aStatus)) printf("channel failed.\n");
// printf("read %d bytes\n", mBytesRead);
NS_ASSERTION(mBytesRead == mExpectedStreamLength,
"Stream in cache is wrong length");
gTotalBytesRead += mBytesRead;
gTotalDuration += duration;
return NS_OK;
}
protected:
PRIntervalTime mStartTime;
PRUint32 mBytesRead;
nsITestDataStream* mTestDataStream;
PRUint32 mExpectedStreamLength;
};
NS_IMPL_ISUPPORTS2(nsReader, nsIStreamListener, nsIStreamObserver)
static nsIEventQueue* eventQueue;
nsresult
InitQueue() {
nsresult rv;
NS_WITH_SERVICE(nsIEventQueueService, eventQService, kEventQueueServiceCID, &rv);
NS_ASSERTION(NS_SUCCEEDED(rv), "Couldn't get event queue service");
rv = eventQService->CreateThreadEventQueue();
NS_ASSERTION(NS_SUCCEEDED(rv), "Couldn't create event queue");
rv = eventQService->GetThreadEventQueue(PR_CurrentThread(), &eventQueue);
NS_ASSERTION(NS_SUCCEEDED(rv), "Couldn't get event queue for main thread");
return NS_OK;
}
// Process events until all streams are OnStopRequest'ed
nsresult
WaitForEvents() {
while (gNumReaders) {
eventQueue->ProcessPendingEvents();
}
return NS_OK;
}
// Read data for a single cache record and compare against testDataStream
nsresult
TestReadStream(nsINetDataCacheRecord *record, nsITestDataStream *testDataStream,
PRUint32 expectedStreamLength)
{
nsCOMPtr<nsIChannel> channel;
nsresult rv;
PRUint32 actualContentLength;
rv = record->NewChannel(0, getter_AddRefs(channel));
NS_ASSERTION(NS_SUCCEEDED(rv), " ");
rv = record->GetStoredContentLength(&actualContentLength);
NS_ASSERTION(NS_SUCCEEDED(rv), " ");
NS_ASSERTION(actualContentLength == expectedStreamLength,
"nsINetDataCacheRecord::GetContentLength() busted ?");
nsReader *reader = new nsReader;
rv = reader->Init(testDataStream, expectedStreamLength);
NS_ASSERTION(NS_SUCCEEDED(rv), " ");
rv = channel->AsyncRead(0, -1, 0, reader);
NS_ASSERTION(NS_SUCCEEDED(rv), " ");
reader->Release();
return NS_OK;
}
// Check that records can be retrieved using their record-ID, in addition
// to using the opaque key.
nsresult
TestRecordID(nsINetDataCache *cache)
{
nsresult rv;
nsCOMPtr<nsINetDataCacheRecord> record;
RandomStream *randomStream;
PRUint32 metaDataLength;
char cacheKey[CACHE_KEY_LENGTH];
char *metaData;
PRUint32 testNum;
PRBool match;
for (testNum = 0; testNum < NUM_CACHE_ENTRIES; testNum++) {
randomStream = new RandomStream(testNum);
randomStream->Read(cacheKey, sizeof cacheKey);
rv = cache->GetCachedNetDataByID(recordID[testNum], getter_AddRefs(record));
NS_ASSERTION(NS_SUCCEEDED(rv), "Couldn't obtain record using record ID");
// Match against previously stored meta-data
rv = record->GetMetaData(&metaDataLength, &metaData);
NS_ASSERTION(NS_SUCCEEDED(rv), "Couldn't get record meta-data");
match = randomStream->Match(metaData, metaDataLength);
NS_ASSERTION(match, "Meta-data corrupted or incorrect");
nsAllocator::Free(metaData);
delete randomStream;
}
return NS_OK;
}
// Check that all cache entries in the database are enumerated and that
// no duplicates appear.
nsresult
TestEnumeration(nsINetDataCache *cache)
{
nsresult rv;
nsCOMPtr<nsINetDataCacheRecord> record;
nsCOMPtr<nsISupports> tempISupports;
nsCOMPtr<nsISimpleEnumerator> iterator;
RandomStream *randomStream;
PRUint32 metaDataLength;
char cacheKey[CACHE_KEY_LENGTH];
char *metaData;
PRUint32 testNum;
PRBool match;
PRInt32 recID;
int numRecords = 0;
// Iterate over all records in the cache
rv = cache->NewCacheEntryIterator(getter_AddRefs(iterator));
NS_ASSERTION(NS_SUCCEEDED(rv), "Couldn't create new cache entry iterator");
PRBool notDone;
while (1) {
// Done iterating ?
rv = iterator->HasMoreElements(&notDone);
if (NS_FAILED(rv)) return rv;
if (!notDone)
break;
// Get next record in iteration
rv = iterator->GetNext(getter_AddRefs(tempISupports));
NS_ASSERTION(NS_SUCCEEDED(rv), "iterator bustage");
record = do_QueryInterface(tempISupports);
numRecords++;
// Get record ID
rv = record->GetRecordID(&recID);
NS_ASSERTION(NS_SUCCEEDED(rv), "Couldn't get Record ID");
testNum = mapRecordIdToTestNum(recID);
NS_ASSERTION(testNum != -1, "Corrupted Record ID ?");
// Erase mapping from table, so that duplicate enumerations are detected
recordID[testNum] = -1;
// Make sure stream matches test data
randomStream = new RandomStream(testNum);
randomStream->Read(cacheKey, sizeof cacheKey);
// Match against previously stored meta-data
rv = record->GetMetaData(&metaDataLength, &metaData);
NS_ASSERTION(NS_SUCCEEDED(rv), "Couldn't get record meta-data");
match = randomStream->Match(metaData, metaDataLength);
NS_ASSERTION(match, "Meta-data corrupted or incorrect");
nsAllocator::Free(metaData);
delete randomStream;
}
NS_ASSERTION(numRecords == NUM_CACHE_ENTRIES, "Iteration bug");
return NS_OK;
}
// Read the test data that was written in FillCache(), checking for
// corruption, truncation.
nsresult
TestRead(nsINetDataCache *cache)
{
nsresult rv;
PRBool inCache;
nsCOMPtr<nsINetDataCacheRecord> record;
RandomStream *randomStream;
PRUint32 metaDataLength;
char cacheKey[CACHE_KEY_LENGTH];
char *metaData, *storedCacheKey;
PRUint32 testNum, storedCacheKeyLength;
PRBool match;
for (testNum = 0; testNum < NUM_CACHE_ENTRIES; testNum++) {
randomStream = new RandomStream(testNum);
randomStream->Read(cacheKey, sizeof cacheKey);
// Ensure that entry is in the cache
rv = cache->Contains(cacheKey, sizeof cacheKey, &inCache);
NS_ASSERTION(NS_SUCCEEDED(rv), " ");
NS_ASSERTION(inCache, "nsINetDataCache::Contains error");
rv = cache->GetCachedNetData(cacheKey, sizeof cacheKey, getter_AddRefs(record));
NS_ASSERTION(NS_SUCCEEDED(rv), " ");
// Match against previously stored meta-data
match = record->GetMetaData(&metaDataLength, &metaData);
NS_ASSERTION(NS_SUCCEEDED(rv), " ");
match = randomStream->Match(metaData, metaDataLength);
NS_ASSERTION(match, "Meta-data corrupted or incorrect");
nsAllocator::Free(metaData);
// Test GetKey() method
rv = record->GetKey(&storedCacheKeyLength, &storedCacheKey);
NS_ASSERTION(NS_SUCCEEDED(rv) &&
(storedCacheKeyLength == sizeof cacheKey) &&
!memcmp(storedCacheKey, &cacheKey[0], sizeof cacheKey),
"nsINetDataCacheRecord::GetKey failed");
nsAllocator::Free(storedCacheKey);
PRUint32 expectedStreamLength = randomStream->Next() % MAX_CONTENT_LENGTH;
TestReadStream(record, randomStream, expectedStreamLength);
}
WaitForEvents();
// Compute rate in MB/s
double rate = gTotalBytesRead / PR_IntervalToMilliseconds(gTotalDuration);
rate *= NUM_CACHE_ENTRIES;
rate *= 1000;
rate /= (1024 * 1024);
printf("Read %d bytes at a rate of %5.1f MB per second \n",
gTotalBytesRead, rate);
return NS_OK;
}
// Repeatedly call SetStoredContentLength() on a cache entry and make
// read the stream's data to ensure that it's not corrupted by the effect
nsresult
TestTruncation(nsINetDataCache *cache)
{
nsresult rv;
nsCOMPtr<nsINetDataCacheRecord> record;
RandomStream *randomStream;
char cacheKey[CACHE_KEY_LENGTH];
randomStream = new RandomStream(0);
randomStream->Read(cacheKey, sizeof cacheKey);
rv = cache->GetCachedNetData(cacheKey, sizeof cacheKey, getter_AddRefs(record));
NS_ASSERTION(NS_SUCCEEDED(rv), " ");
randomStream->Skip(CACHE_METADATA_LENGTH);
PRUint32 initialStreamLength = randomStream->Next() % MAX_CONTENT_LENGTH;
delete randomStream;
PRUint32 i;
PRUint32 delta = initialStreamLength / 64;
for (i = initialStreamLength; i >= delta; i -= delta) {
PRUint32 expectedStreamLength = i;
// Do the truncation
record->SetStoredContentLength(expectedStreamLength);
randomStream = new RandomStream(0);
randomStream->Skip(CACHE_KEY_LENGTH + CACHE_METADATA_LENGTH + 1);
PRUint32 afterContentLength;
rv = record->GetStoredContentLength(&afterContentLength);
NS_ASSERTION(NS_SUCCEEDED(rv), " ");
NS_ASSERTION(afterContentLength == expectedStreamLength,
"nsINetDataCacheRecord::SetContentLength() failed to truncate record");
TestReadStream(record, randomStream, expectedStreamLength);
WaitForEvents();
}
return NS_OK;
}
// Write known data to random offsets in a single cache entry and test
// resulting stream for correctness.
nsresult
TestOffsetWrites(nsINetDataCache *cache)
{
nsresult rv;
nsCOMPtr<nsINetDataCacheRecord> record;
nsCOMPtr<nsIChannel> channel;
nsCOMPtr<nsIOutputStream> outStream;
char buf[512];
char cacheKey[CACHE_KEY_LENGTH];
RandomStream *randomStream;
randomStream = new RandomStream(0);
randomStream->Read(cacheKey, sizeof cacheKey);
rv = cache->GetCachedNetData(cacheKey, sizeof cacheKey, getter_AddRefs(record));
NS_ASSERTION(NS_SUCCEEDED(rv), "Couldn't access record via opaque cache key");
// Write buffer-fulls of data at random offsets into the cache entry.
// Data written is (offset % 0xff)
PRUint32 startingOffset;
PRUint32 streamLength = 0;
CounterStream *counterStream;
int i;
for (i = 0; i < 100; i++) {
rv = record->NewChannel(0, getter_AddRefs(channel));
NS_ASSERTION(NS_SUCCEEDED(rv), " ");
startingOffset = streamLength ? streamLength - (randomStream->Next() % sizeof buf): 0;
rv = channel->OpenOutputStream(startingOffset, getter_AddRefs(outStream));
NS_ASSERTION(NS_SUCCEEDED(rv), " ");
counterStream = new CounterStream(startingOffset);
counterStream->Read(buf, sizeof buf);
PRUint32 numWritten;
rv = outStream->Write(buf, sizeof buf, &numWritten);
NS_ASSERTION(NS_SUCCEEDED(rv), " ");
NS_ASSERTION(numWritten == sizeof buf, "Write() bug?");
streamLength = startingOffset + sizeof buf;
rv = outStream->Close();
NS_ASSERTION(NS_SUCCEEDED(rv), "Couldn't close channel");
delete counterStream;
}
delete randomStream;
counterStream = new CounterStream(0);
TestReadStream(record, counterStream, streamLength);
WaitForEvents();
return NS_OK;
}
// Create entries in the network data cache, using random data for the
// key, the meta-data and the stored content data.
nsresult
FillCache(nsINetDataCache *cache)
{
nsresult rv;
PRBool inCache;
nsCOMPtr<nsINetDataCacheRecord> record;
nsCOMPtr<nsIChannel> channel;
nsCOMPtr<nsIOutputStream> outStream;
char buf[1000];
PRUint32 metaDataLength;
char cacheKey[CACHE_KEY_LENGTH];
char metaData[CACHE_METADATA_LENGTH];
PRUint32 testNum;
char *data;
RandomStream *randomStream;
PRUint32 totalBytesWritten = 0;
PRIntervalTime startTime = PR_IntervalNow();
for (testNum = 0; testNum < NUM_CACHE_ENTRIES; testNum++) {
randomStream = new RandomStream(testNum);
randomStream->Read(cacheKey, sizeof cacheKey);
// No entry should be in cache until we add it
rv = cache->Contains(cacheKey, sizeof cacheKey, &inCache);
NS_ASSERTION(NS_SUCCEEDED(rv), " ");
NS_ASSERTION(!inCache, "nsINetDataCache::Contains error");
rv = cache->GetCachedNetData(cacheKey, sizeof cacheKey, getter_AddRefs(record));
NS_ASSERTION(NS_SUCCEEDED(rv), "Couldn't access record via opaque cache key");
// Test nsINetDataCacheRecord::GetRecordID()
rv = record->GetRecordID(&recordID[testNum]);
NS_ASSERTION(NS_SUCCEEDED(rv), "Couldn't get Record ID");
// Test nsINetDataCache::GetNumEntries()
PRUint32 numEntries = (PRUint32)-1;
rv = cache->GetNumEntries(&numEntries);
NS_ASSERTION(NS_SUCCEEDED(rv), "Couldn't get number of cache entries");
NS_ASSERTION(numEntries == testNum + 1, "GetNumEntries failure");
// Record meta-data should be initially empty
rv = record->GetMetaData(&metaDataLength, &data);
NS_ASSERTION(NS_SUCCEEDED(rv), " ");
if ((metaDataLength != 0) || (data != 0))
return NS_ERROR_FAILURE;
// Store random data as meta-data
randomStream->Read(metaData, sizeof metaData);
record->SetMetaData(sizeof metaData, metaData);
rv = record->NewChannel(0, getter_AddRefs(channel));
NS_ASSERTION(NS_SUCCEEDED(rv), " ");
rv = channel->OpenOutputStream(0, getter_AddRefs(outStream));
NS_ASSERTION(NS_SUCCEEDED(rv), " ");
PRUint32 beforeOccupancy;
rv = cache->GetStorageInUse(&beforeOccupancy);
NS_ASSERTION(NS_SUCCEEDED(rv), "Couldn't get cache occupancy");
int streamLength = randomStream->Next() % MAX_CONTENT_LENGTH;
int remaining = streamLength;
while (remaining) {
PRUint32 numWritten;
int amount = PR_MIN(sizeof buf, remaining);
randomStream->Read(buf, amount);
rv = outStream->Write(buf, amount, &numWritten);
NS_ASSERTION(NS_SUCCEEDED(rv), " ");
NS_ASSERTION(numWritten == (PRUint32)amount, "Write() bug?");
remaining -= amount;
}
outStream->Close();
totalBytesWritten += streamLength;
PRUint32 afterOccupancy;
rv = cache->GetStorageInUse(&afterOccupancy);
NS_ASSERTION(NS_SUCCEEDED(rv), "Couldn't get cache occupancy");
PRUint32 streamLengthInKB = streamLength >> 10;
NS_ASSERTION((afterOccupancy - beforeOccupancy) >= streamLengthInKB,
"nsINetDataCache::GetStorageInUse() is busted");
// *Now* there should be an entry in the cache
rv = cache->Contains(cacheKey, sizeof cacheKey, &inCache);
NS_ASSERTION(NS_SUCCEEDED(rv), " ");
NS_ASSERTION(inCache, "nsINetDataCache::Contains error");
delete randomStream;
}
PRIntervalTime endTime = PR_IntervalNow();
// Compute rate in MB/s
double rate = totalBytesWritten / PR_IntervalToMilliseconds(endTime - startTime);
rate *= 1000;
rate /= (1024 * 1024);
printf("Wrote %7d bytes at a rate of %5.1f MB per second \n",
totalBytesWritten, rate);
return NS_OK;
}
nsresult NS_AutoregisterComponents()
{
nsresult rv = nsComponentManager::AutoRegister(nsIComponentManager::NS_Startup,
NULL /* default */);
return rv;
}
PRBool initPref ()
{
nsresult rv;
NS_WITH_SERVICE(nsIPref, prefPtr, kPrefCID, &rv);
if (NS_FAILED(rv))
return false;
nsCOMPtr<nsIFileSpec> fileSpec;
rv = NS_NewFileSpec (getter_AddRefs(fileSpec));
if (NS_FAILED(rv))
return false;
nsCString defaultPrefFile = PR_GetEnv ("MOZILLA_FIVE_HOME");
if (defaultPrefFile.Length())
defaultPrefFile += "/";
else
defaultPrefFile = "./";
defaultPrefFile += "default_prefs.js";
fileSpec->SetUnixStyleFilePath (defaultPrefFile.GetBuffer());
PRBool exists = false;
fileSpec->Exists(&exists);
if (exists)
prefPtr->ReadUserPrefsFrom(fileSpec);
else
return false;
return true;
}
int
main(int argc, char* argv[])
{
nsresult rv;
if(argc <2) {
printf(" %s -f to test filecache\n", argv[0]) ;
printf(" %s -m to test memcache\n", argv[0]) ;
return -1 ;
}
rv = NS_AutoregisterComponents();
NS_ASSERTION(NS_SUCCEEDED(rv), "Couldn't register XPCOM components");
nsCOMPtr<nsINetDataCache> cache;
if (PL_strcasecmp(argv[1], "-m") == 0) {
rv = nsComponentManager::CreateInstance(kMemCacheCID, nsnull,
NS_GET_IID(nsINetDataCache),
getter_AddRefs(cache));
NS_ASSERTION(NS_SUCCEEDED(rv), "Couldn't create memory cache factory");
} else if (PL_strcasecmp(argv[1], "-f") == 0) {
nsCOMPtr<nsINetDataDiskCache> diskcache ;
rv = nsComponentManager::CreateInstance(kDiskCacheCID, nsnull,
NS_GET_IID(nsINetDataDiskCache),
getter_AddRefs(diskcache));
NS_ASSERTION(NS_SUCCEEDED(rv), "Couldn't create disk cache factory") ;
nsCOMPtr<nsIFileSpec> folder ;
NS_NewFileSpec(getter_AddRefs(folder)) ;
folder->SetUnixStyleFilePath("/tmp") ;
diskcache->SetDiskCacheFolder(folder) ;
cache = diskcache ;
} else {
printf(" %s -f to test filecache\n", argv[0]) ;
printf(" %s -m to test memcache\n", argv[0]) ;
return -1 ;
}
InitQueue();
PRUnichar* description;
rv = cache->GetDescription(&description);
NS_ASSERTION(NS_SUCCEEDED(rv), "Couldn't get cache description");
nsCAutoString descStr(description);
printf("Testing: %s\n", descStr.GetBuffer());
rv = cache->RemoveAll();
NS_ASSERTION(NS_SUCCEEDED(rv), "Couldn't clear cache");
PRUint32 startOccupancy;
rv = cache->GetStorageInUse(&startOccupancy);
NS_ASSERTION(NS_SUCCEEDED(rv), "Couldn't get cache occupancy");
PRUint32 numEntries = (PRUint32)-1;
rv = cache->GetNumEntries(&numEntries);
NS_ASSERTION(NS_SUCCEEDED(rv), "Couldn't get number of cache entries");
NS_ASSERTION(numEntries == 0, "Couldn't clear cache");
rv = FillCache(cache);
NS_ASSERTION(NS_SUCCEEDED(rv), "Couldn't fill cache with random test data");
rv = TestRead(cache);
NS_ASSERTION(NS_SUCCEEDED(rv), "Couldn't read random test data from cache");
rv = TestRecordID(cache);
NS_ASSERTION(NS_SUCCEEDED(rv), "Couldn't index records using record ID");
rv = TestEnumeration(cache);
NS_ASSERTION(NS_SUCCEEDED(rv), "Couldn't successfully enumerate records");
rv = TestTruncation(cache);
NS_ASSERTION(NS_SUCCEEDED(rv), "Couldn't successfully truncate records");
rv = TestOffsetWrites(cache);
NS_ASSERTION(NS_SUCCEEDED(rv), "Couldn't successfully write to records using non-zero offsets");
rv = cache->RemoveAll();
NS_ASSERTION(NS_SUCCEEDED(rv), "Couldn't clear cache");
rv = cache->GetNumEntries(&numEntries);
NS_ASSERTION(NS_SUCCEEDED(rv), "Couldn't get number of cache entries");
NS_ASSERTION(numEntries == 0, "Couldn't clear cache");
PRUint32 endOccupancy;
rv = cache->GetStorageInUse(&endOccupancy);
NS_ASSERTION(NS_SUCCEEDED(rv), "Couldn't get cache occupancy");
NS_ASSERTION(startOccupancy == endOccupancy, "Cache occupancy not correctly computed ?");
return 0;
}

View File

@@ -0,0 +1,82 @@
#!nmake
#
# The contents of this file are subject to the Netscape Public
# License Version 1.1 (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.mozilla.org/NPL/
#
# Software distributed under the License is distributed on an "AS
# IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or
# implied. See the License for the specific language governing
# rights and limitations under the License.
#
# The Original Code is mozilla.org code.
#
# The Initial Developer of the Original Code is Netscape
# Communications Corporation. Portions created by Netscape are
# Copyright (C) 1998 Netscape Communications Corporation. All
# Rights Reserved.
#
# Contributor(s):
DEPTH=..\..
MAKE_OBJ_TYPE = EXE
PROG1 = .\$(OBJDIR)\TestFileInput.exe
PROG2 = .\$(OBJDIR)\TestSocketInput.exe
PROG3 = .\$(OBJDIR)\TestSocketIO.exe
PROG4 = .\$(OBJDIR)\TestProtocols.exe
PROG5 = .\$(OBJDIR)\TestSocketTransport.exe
PROG6 = .\$(OBJDIR)\urltest.exe
PROG7 = .\$(OBJDIR)\TestFileInput2.exe
PROG8 = .\$(OBJDIR)\TestFileTransport.exe
PROG9 = .\$(OBJDIR)\TestRes.exe
PROGA = .\$(OBJDIR)\TestRawCache.exe
PROGB = .\$(OBJDIR)\TestCacheMgr.exe
PROGRAMS = \
#$(PROG1) $(PROG2) $(PROG3) $(PROG4) $(PROG5) $(PROG6) $(PROG7) $(PROG8) $(PROG9)\
$(PROGA) $(PROGB)
LCFLAGS=-DUSE_NSREG -GX
REQUIRES=libreg
INCS = $(INCS) \
-I$(DEPTH)\dist\include \
$(NULL)
LLIBS= \
$(DIST)\lib\xpcom.lib \
$(LIBNSPR) \
$(NULL)
include <$(DEPTH)\config\rules.mak>
install:: $(PROGRAMS)
-for %p in ($(PROGRAMS)) do $(MAKE_INSTALL) %p $(DIST)\bin
clobber::
-for %p in ($(PROGRAMS)) do $(RM) %p $(DIST)\bin\%p
$(PROG1): $(OBJDIR) TestFileInput.cpp
$(PROG2): $(OBJDIR) TestSocketInput.cpp
$(PROG3): $(OBJDIR) TestSocketIO.cpp
$(PROG4): $(OBJDIR) TestProtocols.cpp
$(PROG5): $(OBJDIR) TestSocketTransport.cpp
$(PROG6): $(OBJDIR) urltest.cpp
$(PROG7): $(OBJDIR) TestFileInput2.cpp
$(PROG8): $(OBJDIR) TestFileTransport.cpp
$(PROG9): $(OBJDIR) TestRes.cpp
$(PROGA): $(OBJDIR) TestRawCache.cpp
$(PROGB): $(OBJDIR) TestCacheMgr.cpp

File diff suppressed because it is too large Load Diff

View File

@@ -1,28 +0,0 @@
#
# 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.
#
DEPTH = ..
topsrcdir = @top_srcdir@
srcdir = @srcdir@
VPATH = @srcdir@
include $(DEPTH)/config/autoconf.mk
DIRS = public src
include $(topsrcdir)/config/rules.mk

View File

@@ -1,21 +0,0 @@
rem -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*-
rem
rem The contents of this file are subject to the Netscape Public License
rem Version 1.0 (the "NPL"); you may not use this file except in
rem compliance with the NPL. You may obtain a copy of the NPL at
rem http://www.mozilla.org/NPL/
rem
rem Software distributed under the NPL is distributed on an "AS IS" basis,
rem WITHOUT WARRANTY OF ANY KIND, either express or implied. See the NPL
rem for the specific language governing rights and limitations under the
rem NPL.
rem
rem The Initial Developer of this code under the NPL is Netscape
rem Communications Corporation. Portions created by Netscape are
rem Copyright (C) 1998 Netscape Communications Corporation. All Rights
rem Reserved.
rem
del s:\ns\raptor\ui\src\windows\win32_d.obj\%1.obj
del s:\ns\raptor\ui\tests\windows\win32_d.obj\winmain.obj
nmake -f makefile.win

View File

@@ -1,11 +0,0 @@
//
// Widget.Prefix
//
// Global prefix file for the Widget project.
//
#include "MacPrefix.h"
#include <Quickdraw.h>
#include <Events.h>
#include <MacWindows.h>

View File

@@ -1,11 +0,0 @@
//
// WidgetDebug.Prefix
//
// Global prefix file for the debug Widget project.
//
#include "MacPrefix_debug.h"
#include <Quickdraw.h>
#include <Events.h>
#include <MacWindows.h>

View File

@@ -1,22 +0,0 @@
/* -*- Mode: C++; tab-width: 2; 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.
*/
#define MAC_SHARED 1
#define _IMPL_NS_WIDGET 1
#include "WidgetDebug.prefix"

View File

@@ -1,22 +0,0 @@
/* -*- Mode: C++; tab-width: 2; 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.
*/
#define MAC_SHARED 1
#define _IMPL_NS_WIDGET 1
#include "Widget.prefix"

View File

@@ -1,21 +0,0 @@
/* -*- Mode: C++; tab-width: 2; 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.
*/
#define MAC_STATIC 1
#include "WidgetDebug.prefix"

View File

@@ -1,21 +0,0 @@
/* -*- Mode: C++; tab-width: 2; 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.
*/
#define MAC_STATIC 1
#include "Widget.prefix"

Binary file not shown.

View File

@@ -1,35 +0,0 @@
# target: widgetDebug.shlb
mozilla/widget/src/mac/nsAppShell.cpp
mozilla/widget/src/mac/nsButton.cpp
mozilla/widget/src/mac/nsCheckButton.cpp
mozilla/widget/src/mac/nsFileWidget.cpp
mozilla/widget/src/mac/nsLookAndFeel.cpp
mozilla/widget/src/mac/nsMacControl.cpp
mozilla/widget/src/mac/nsMacEventHandler.cpp
mozilla/widget/src/mac/nsMacMessagePump.cpp
mozilla/widget/src/mac/nsMacMessageSink.cpp
mozilla/widget/src/mac/nsMacWindow.cpp
mozilla/widget/src/mac/nsMenu.cpp
mozilla/widget/src/mac/nsMenuBar.cpp
mozilla/widget/src/mac/nsMenuItem.cpp
mozilla/widget/src/mac/nsRadioButton.cpp
mozilla/widget/src/mac/nsScrollbar.cpp
mozilla/widget/src/mac/nsTextAreaWidget.cpp
mozilla/widget/src/mac/nsTextWidget.cpp
mozilla/widget/src/mac/nsToolkit.cpp
mozilla/widget/src/mac/nsWidgetFactory.cpp
mozilla/widget/src/mac/nsWidgetSupport.cpp
mozilla/widget/src/mac/nsWindow.cpp
mozilla/widget/src/xpwidgets/nsBaseWidget.cpp
mozilla/widget/src/xpwidgets/nsHTColumn.cpp
mozilla/widget/src/xpwidgets/nsHTControlStripItem.cpp
mozilla/widget/src/xpwidgets/nsHTDataModel.cpp
mozilla/widget/src/xpwidgets/nsHTItem.cpp
mozilla/widget/src/xpwidgets/nsHTTreeDataModel.cpp
mozilla/widget/src/xpwidgets/nsHTTreeItem.cpp
mozilla/widget/src/xpwidgets/nsImageButton.cpp
mozilla/widget/src/xpwidgets/nsMenuButton.cpp
mozilla/widget/src/xpwidgets/nsToolbar.cpp
mozilla/widget/src/xpwidgets/nsToolbarItemHolder.cpp
mozilla/widget/src/xpwidgets/nsToolbarManager.cpp
mozilla/widget/src/xpwidgets/nsTreeView.cpp

View File

@@ -1,23 +0,0 @@
#!nmake
#
# 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.
DEPTH=..
DIRS=public timer src
include <$(DEPTH)\config\rules.mak>

View File

@@ -1,33 +0,0 @@
#
# This is a list of local files which get copied to the mozilla:dist:widget directory
#
nsIDragSessionMac.h
nsIWidget.h
nsIKBStateControl.h
nsIButton.h
nsICheckButton.h
nsIListWidget.h
nsIComboBox.h
nsITextWidget.h
nsITextAreaWidget.h
nsIComboBox.h
nsIListBox.h
nsIScrollbar.h
nsGUIEvent.h
nsIRadioButton.h
nsIMouseListener.h
nsIEventListener.h
nsIFileWidget.h
nsIMenuListener.h
nsWidgetsCID.h
nsILabel.h
nsILookAndFeel.h
nsWidgetSupport.h
nsIMenu.h
nsIMenuBar.h
nsIMenuItem.h
nsIPopUpMenu.h
nsIKeyBindMgr.h
nsStringUtil.h
nsIContextMenu.h

View File

@@ -1,16 +0,0 @@
#
# This is a list of local files which get copied to the mozilla:dist:idl directory
#
nsIAppShell.idl
nsIFilePicker.idl
nsIFileSpecWithUI.idl
nsISound.idl
nsIToolkit.idl
nsITransferable.idl
nsIDragSession.idl
nsIDragService.idl
nsIFormatConverter.idl
nsIClipboard.idl
nsIClipboardOwner.idl
nsIRollupListener.idl

View File

@@ -1,92 +0,0 @@
#
# The contents of this file are subject to the Netscape Public
# License Version 1.1 (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.mozilla.org/NPL/
#
# Software distributed under the License is distributed on an "AS
# IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or
# implied. See the License for the specific language governing
# rights and limitations under the License.
#
# The Original Code is mozilla.org code.
#
# The Initial Developer of the Original Code is Netscape
# Communications Corporation. Portions created by Netscape are
# Copyright (C) 1998 Netscape Communications Corporation. All
# Rights Reserved.
#
# Contributor(s):
#
DEPTH = ../..
topsrcdir = @top_srcdir@
srcdir = @srcdir@
VPATH = @srcdir@
include $(DEPTH)/config/autoconf.mk
MODULE = raptor
XPIDL_MODULE = widget
EXPORTS = \
nsIFontSizeIterator.h \
nsIFontNameIterator.h \
nsIFontRetrieverService.h \
nsIMenuBar.h \
nsIMenu.h \
nsIMenuItem.h \
nsIPopUpMenu.h \
nsIFileWidget.h \
nsStringUtil.h \
nsIKBStateControl.h \
nsIButton.h \
nsICheckButton.h \
nsIListWidget.h \
nsIComboBox.h \
nsITextWidget.h \
nsITextAreaWidget.h \
nsIComboBox.h \
nsIListBox.h \
nsIScrollbar.h \
nsGUIEvent.h \
nsIRadioButton.h \
nsIMouseListener.h \
nsIEventListener.h \
nsIMenuListener.h \
nsWidgetsCID.h \
nsILookAndFeel.h \
nsILabel.h \
nsIMenuBar.h \
nsIMenu.h \
nsIMenuItem.h \
nsIPopUpMenu.h \
nsIFontNameIterator.h \
nsIFontSizeIterator.h \
nsIFontRetrieverService.h \
nsIContextMenu.h \
$(NULL)
XPIDLSRCS = \
nsIAppShell.idl \
nsIFilePicker.idl \
nsIFileSpecWithUI.idl \
nsIToolkit.idl \
nsISound.idl \
nsITransferable.idl \
nsIDragSession.idl \
nsIDragService.idl \
nsIFormatConverter.idl \
nsIClipboard.idl \
nsIClipboardOwner.idl \
nsIRollupListener.idl \
nsIWidget.idl \
nsIWindow.idl \
$(NULL)
EXPORTS := $(addprefix $(srcdir)/, $(EXPORTS))
include $(topsrcdir)/config/rules.mk
DEFINES += -D_IMPL_NS_UI

View File

@@ -1,78 +0,0 @@
#!nmake
#
# The contents of this file are subject to the Netscape Public
# License Version 1.1 (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.mozilla.org/NPL/
#
# Software distributed under the License is distributed on an "AS
# IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or
# implied. See the License for the specific language governing
# rights and limitations under the License.
#
# The Original Code is mozilla.org code.
#
# The Initial Developer of the Original Code is Netscape
# Communications Corporation. Portions created by Netscape are
# Copyright (C) 1998 Netscape Communications Corporation. All
# Rights Reserved.
#
# Contributor(s):
DEPTH=..\..
DEFINES=-D_IMPL_NS_UI
MODULE=raptor
XPIDL_MODULE=widget
XPIDLSRCS = \
.\nsIAppShell.idl \
.\nsIFilePicker.idl \
.\nsIFileSpecWithUI.idl \
.\nsISound.idl \
.\nsIToolkit.idl \
.\nsITransferable.idl \
.\nsIDragSession.idl \
.\nsIDragService.idl \
.\nsIFormatConverter.idl \
.\nsIClipboard.idl \
.\nsIClipboardOwner.idl \
.\nsIRollupListener.idl \
$(NULL)
EXPORTS=\
nsIFontSizeIterator.h \
nsIFontNameIterator.h \
nsIFontRetrieverService.h \
nsIFileWidget.h \
nsIWidget.h \
nsIKBStateControl.h \
nsIButton.h \
nsICheckButton.h \
nsIListWidget.h \
nsIComboBox.h \
nsITextWidget.h \
nsITextAreaWidget.h \
nsIComboBox.h \
nsIListBox.h \
nsIScrollbar.h \
nsGUIEvent.h \
nsIRadioButton.h \
nsIMouseListener.h \
nsIEventListener.h \
nsIMenuListener.h \
nsWidgetsCID.h \
nsStringUtil.h \
nsILookAndFeel.h \
nsILabel.h \
nsIMenuBar.h \
nsIMenu.h \
nsIMenuItem.h \
nsIContextMenu.h \
nsIPopUpMenu.h \
$(NULL)
include <$(DEPTH)\config\rules.mak>

View File

@@ -1,509 +0,0 @@
/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*-
*
* The contents of this file are subject to the Netscape Public
* License Version 1.1 (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.mozilla.org/NPL/
*
* Software distributed under the License is distributed on an "AS
* IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or
* implied. See the License for the specific language governing
* rights and limitations under the License.
*
* The Original Code is mozilla.org code.
*
* The Initial Developer of the Original Code is Netscape
* Communications Corporation. Portions created by Netscape are
* Copyright (C) 1998 Netscape Communications Corporation. All
* Rights Reserved.
*
* Contributor(s):
*/
#ifndef nsGUIEvent_h__
#define nsGUIEvent_h__
#include "nsPoint.h"
#include "nsRect.h"
class nsIRenderingContext;
class nsIRegion;
class nsIWidget;
class nsIMenuItem;
/**
* Return status for event processors.
*/
enum nsEventStatus {
/// The event is ignored, do default processing
nsEventStatus_eIgnore,
/// The event is consumed, don't do default processing
nsEventStatus_eConsumeNoDefault,
/// The event is consumed, but do default processing
nsEventStatus_eConsumeDoDefault
};
/**
* General event
*/
struct nsEvent {
/// See event struct types
PRUint8 eventStructType;
/// See GUI MESSAGES,
PRUint32 message;
/// in widget relative coordinates, modified to be relative to current view in layout.
nsPoint point;
// in widget relative coordinates, not modified by layout code.
nsPoint refPoint;
/// elapsed time, in milliseconds, from the time the system was started to the time the message was created
PRUint32 time;
// flags to hold event flow stage and capture/bubble cancellation status
PRUint32 flags;
};
/**
* General graphic user interface event
*/
struct nsGUIEvent : public nsEvent {
/// Originator of the event
nsIWidget* widget;
/// Internal platform specific message.
void* nativeMsg;
};
/**
* Window resize event
*/
struct nsSizeEvent : public nsGUIEvent {
/// x,y width, height in pixels (client area)
nsRect *windowSize;
/// width of entire window (in pixels)
PRInt32 mWinWidth;
/// height of entire window (in pixels)
PRInt32 mWinHeight;
};
/**
* Window repaint event
*/
struct nsPaintEvent : public nsGUIEvent {
/// Context to paint in.
nsIRenderingContext *renderingContext;
/// area to paint (should be used instead of rect)
nsIRegion *region;
/// x,y, width, height in pixels of area to paint
nsRect *rect;
};
/**
* Scrollbar event
*/
struct nsScrollbarEvent : public nsGUIEvent {
/// ranges between scrollbar 0 and (maxRange - thumbSize). See nsIScrollbar
PRUint32 position;
};
struct nsInputEvent : public nsGUIEvent {
/// PR_TRUE indicates the shift key is down
PRBool isShift;
/// PR_TRUE indicates the control key is down
PRBool isControl;
/// PR_TRUE indicates the alt key is down
PRBool isAlt;
/// PR_TRUE indicates the meta key is down
/// (or, on Mac, the Command key)
PRBool isMeta;
};
/**
* Mouse event
*/
struct nsMouseEvent : public nsInputEvent {
/// The number of mouse clicks
PRUint32 clickCount;
/// Special return code for MOUSE_ACTIVATE to signal
/// if the target accepts activation (1), or denies it (0)
PRBool acceptActivation;
};
/**
* Keyboard event
*/
struct nsKeyEvent : public nsInputEvent {
/// see NS_VK codes
PRUint32 keyCode;
/// OS translated Unicode char
PRUint32 charCode;
// indicates whether the event signifies a printable character
PRBool isChar;
};
/**
* IME Related Events
*/
struct nsTextRange {
PRUint32 mStartOffset;
PRUint32 mEndOffset;
PRUint32 mRangeType;
};
typedef struct nsTextRange nsTextRange;
typedef nsTextRange* nsTextRangeArray;
struct nsTextEventReply {
nsPoint mCursorPosition;
PRBool mCursorIsCollapsed;
};
typedef struct nsTextEventReply nsTextEventReply;
struct nsTextEvent : public nsInputEvent {
PRUnichar* theText;
nsTextEventReply theReply;
PRUint32 rangeCount;
nsTextRangeArray rangeArray;
PRBool isChar;
};
struct nsCompositionEvent : public nsInputEvent {
PRUint32 compositionMessage;
nsTextEventReply theReply;
};
/**
* Tooltip event
*/
struct nsTooltipEvent : public nsGUIEvent {
/// Index of tooltip area which generated the event. @see SetTooltips in nsIWidget
PRUint32 tipIndex;
};
/**
* MenuItem event
*
* When this event occurs the widget field in nsGUIEvent holds the "target"
* for the event
*/
struct nsMenuEvent : public nsGUIEvent {
nsIMenuItem * mMenuItem;
PRUint32 mCommand;
};
/**
* Event status for D&D Event
*/
enum nsDragDropEventStatus {
/// The event is a enter
nsDragDropEventStatus_eDragEntered,
/// The event is exit
nsDragDropEventStatus_eDragExited,
/// The event is drop
nsDragDropEventStatus_eDrop
};
/**
* Event Struct Types
*/
#define NS_EVENT 1
#define NS_GUI_EVENT 2
#define NS_SIZE_EVENT 3
#define NS_PAINT_EVENT 4
#define NS_SCROLLBAR_EVENT 5
#define NS_INPUT_EVENT 6
#define NS_KEY_EVENT 7
#define NS_MOUSE_EVENT 8
#define NS_MENU_EVENT 10
#define NS_DRAGDROP_EVENT 11
#define NS_TEXT_EVENT 12
#define NS_COMPOSITION_START 13
#define NS_COMPOSITION_END 14
/**
* GUI MESSAGES
*/
//@{
#define NS_WINDOW_START 100
// Widget is being created
#define NS_CREATE (NS_WINDOW_START)
// Widget is being destroyed
#define NS_DESTROY (NS_WINDOW_START + 1)
// Widget was resized
#define NS_SIZE (NS_WINDOW_START + 2)
// Widget gained focus
#define NS_GOTFOCUS (NS_WINDOW_START + 3)
// Widget lost focus
#define NS_LOSTFOCUS (NS_WINDOW_START + 4)
// Widget got activated
#define NS_ACTIVATE (NS_WINDOW_START + 5)
// Widget got deactivated
#define NS_DEACTIVATE (NS_WINDOW_START + 6)
// Widget needs to be repainted
#define NS_PAINT (NS_WINDOW_START + 30)
// Key is pressed within a window
#define NS_KEY_PRESS (NS_WINDOW_START + 31)
// Key is released within a window
#define NS_KEY_UP (NS_WINDOW_START + 32)
// Key is pressed within a window
#define NS_KEY_DOWN (NS_WINDOW_START + 33)
// Window has been moved to a new location.
// The events point contains the x, y location in screen coordinates
#define NS_MOVE (NS_WINDOW_START + 34)
// Tab control's selected tab has changed
#define NS_TABCHANGE (NS_WINDOW_START + 35)
// Menu item selected
#define NS_MENU_SELECTED (NS_WINDOW_START + 38)
// Form control changed: currently == combo box selection changed
// but could be expanded to mean textbox, checkbox changed, etc.
// This is a GUI specific event that does not necessarily correspond
// directly to a mouse click or a key press.
#define NS_CONTROL_CHANGE (NS_WINDOW_START + 39)
// Indicates the display has changed depth
#define NS_DISPLAYCHANGED (NS_WINDOW_START + 40)
#define NS_MOUSE_MESSAGE_START 300
#define NS_MOUSE_MOVE (NS_MOUSE_MESSAGE_START)
#define NS_MOUSE_LEFT_BUTTON_UP (NS_MOUSE_MESSAGE_START + 1)
#define NS_MOUSE_LEFT_BUTTON_DOWN (NS_MOUSE_MESSAGE_START + 2)
#define NS_MOUSE_MIDDLE_BUTTON_UP (NS_MOUSE_MESSAGE_START + 10)
#define NS_MOUSE_MIDDLE_BUTTON_DOWN (NS_MOUSE_MESSAGE_START + 11)
#define NS_MOUSE_RIGHT_BUTTON_UP (NS_MOUSE_MESSAGE_START + 20)
#define NS_MOUSE_RIGHT_BUTTON_DOWN (NS_MOUSE_MESSAGE_START + 21)
#define NS_MOUSE_ENTER (NS_MOUSE_MESSAGE_START + 22)
#define NS_MOUSE_EXIT (NS_MOUSE_MESSAGE_START + 23)
#define NS_MOUSE_LEFT_DOUBLECLICK (NS_MOUSE_MESSAGE_START + 24)
#define NS_MOUSE_MIDDLE_DOUBLECLICK (NS_MOUSE_MESSAGE_START + 25)
#define NS_MOUSE_RIGHT_DOUBLECLICK (NS_MOUSE_MESSAGE_START + 26)
#define NS_MOUSE_LEFT_CLICK (NS_MOUSE_MESSAGE_START + 27)
#define NS_MOUSE_MIDDLE_CLICK (NS_MOUSE_MESSAGE_START + 28)
#define NS_MOUSE_RIGHT_CLICK (NS_MOUSE_MESSAGE_START + 29)
#define NS_MOUSE_ACTIVATE (NS_MOUSE_MESSAGE_START + 30)
#define NS_SCROLLBAR_MESSAGE_START 1000
#define NS_SCROLLBAR_POS (NS_SCROLLBAR_MESSAGE_START)
#define NS_SCROLLBAR_PAGE_NEXT (NS_SCROLLBAR_MESSAGE_START + 1)
#define NS_SCROLLBAR_PAGE_PREV (NS_SCROLLBAR_MESSAGE_START + 2)
#define NS_SCROLLBAR_LINE_NEXT (NS_SCROLLBAR_MESSAGE_START + 3)
#define NS_SCROLLBAR_LINE_PREV (NS_SCROLLBAR_MESSAGE_START + 4)
#define NS_STREAM_EVENT_START 1100
#define NS_PAGE_LOAD (NS_STREAM_EVENT_START)
#define NS_PAGE_UNLOAD (NS_STREAM_EVENT_START + 1)
#define NS_IMAGE_LOAD (NS_STREAM_EVENT_START + 2)
#define NS_IMAGE_ABORT (NS_STREAM_EVENT_START + 3)
#define NS_IMAGE_ERROR (NS_STREAM_EVENT_START + 4)
#define NS_FORM_EVENT_START 1200
#define NS_FORM_SUBMIT (NS_FORM_EVENT_START)
#define NS_FORM_RESET (NS_FORM_EVENT_START + 1)
#define NS_FORM_CHANGE (NS_FORM_EVENT_START + 2)
#define NS_FORM_SELECTED (NS_FORM_EVENT_START + 3)
#define NS_FORM_INPUT (NS_FORM_EVENT_START + 4)
//Need separate focus/blur notifications for non-native widgets
#define NS_FOCUS_EVENT_START 1300
#define NS_FOCUS_CONTENT (NS_FOCUS_EVENT_START)
#define NS_BLUR_CONTENT (NS_FOCUS_EVENT_START + 1)
#define NS_DRAGDROP_EVENT_START 1400
#define NS_DRAGDROP_ENTER (NS_DRAGDROP_EVENT_START)
#define NS_DRAGDROP_OVER (NS_DRAGDROP_EVENT_START + 1)
#define NS_DRAGDROP_EXIT (NS_DRAGDROP_EVENT_START + 2)
#define NS_DRAGDROP_DROP (NS_DRAGDROP_EVENT_START + 3)
#define NS_DRAGDROP_GESTURE (NS_DRAGDROP_EVENT_START + 4)
// Events for popups
#define NS_MENU_EVENT_START 1500
#define NS_MENU_CREATE (NS_MENU_EVENT_START)
#define NS_MENU_DESTROY (NS_MENU_EVENT_START+1)
#define NS_MENU_ACTION (NS_MENU_EVENT_START+2)
#define NS_XUL_BROADCAST (NS_MENU_EVENT_START+3)
#define NS_XUL_COMMAND_UPDATE (NS_MENU_EVENT_START+4)
//@}
#define NS_IS_MOUSE_EVENT(evnt) \
(((evnt)->message == NS_MOUSE_LEFT_BUTTON_DOWN) || \
((evnt)->message == NS_MOUSE_LEFT_BUTTON_UP) || \
((evnt)->message == NS_MOUSE_LEFT_CLICK) || \
((evnt)->message == NS_MOUSE_LEFT_DOUBLECLICK) || \
((evnt)->message == NS_MOUSE_MIDDLE_BUTTON_DOWN) || \
((evnt)->message == NS_MOUSE_MIDDLE_BUTTON_UP) || \
((evnt)->message == NS_MOUSE_MIDDLE_CLICK) || \
((evnt)->message == NS_MOUSE_MIDDLE_DOUBLECLICK) || \
((evnt)->message == NS_MOUSE_RIGHT_BUTTON_DOWN) || \
((evnt)->message == NS_MOUSE_RIGHT_BUTTON_UP) || \
((evnt)->message == NS_MOUSE_RIGHT_CLICK) || \
((evnt)->message == NS_MOUSE_RIGHT_DOUBLECLICK) || \
((evnt)->message == NS_MOUSE_ENTER) || \
((evnt)->message == NS_MOUSE_EXIT) || \
((evnt)->message == NS_MOUSE_MOVE))
#define NS_IS_KEY_EVENT(evnt) \
(((evnt)->message == NS_KEY_DOWN) || \
((evnt)->message == NS_KEY_PRESS) || \
((evnt)->message == NS_KEY_UP))
/*
* Virtual key bindings for keyboard events
* NOTE: These are repeated in nsIDOMEvent.h and must be kept in sync
*/
#define NS_VK_CANCEL 0x03
#define NS_VK_BACK 0x08
#define NS_VK_TAB 0x09
#define NS_VK_CLEAR 0x0C
#define NS_VK_RETURN 0x0D
#define NS_VK_ENTER 0x0E
#define NS_VK_SHIFT 0x10
#define NS_VK_CONTROL 0x11
#define NS_VK_ALT 0x12
#define NS_VK_PAUSE 0x13
#define NS_VK_CAPS_LOCK 0x14
#define NS_VK_ESCAPE 0x1B
#define NS_VK_SPACE 0x20
#define NS_VK_PAGE_UP 0x21
#define NS_VK_PAGE_DOWN 0x22
#define NS_VK_END 0x23
#define NS_VK_HOME 0x24
#define NS_VK_LEFT 0x25
#define NS_VK_UP 0x26
#define NS_VK_RIGHT 0x27
#define NS_VK_DOWN 0x28
#define NS_VK_PRINTSCREEN 0x2C
#define NS_VK_INSERT 0x2D
#define NS_VK_DELETE 0x2E
// NS_VK_0 - NS_VK_9 match their ascii values
#define NS_VK_0 0x30
#define NS_VK_1 0x31
#define NS_VK_2 0x32
#define NS_VK_3 0x33
#define NS_VK_4 0x34
#define NS_VK_5 0x35
#define NS_VK_6 0x36
#define NS_VK_7 0x37
#define NS_VK_8 0x38
#define NS_VK_9 0x39
#define NS_VK_SEMICOLON 0x3B
#define NS_VK_EQUALS 0x3D
// NS_VK_A - NS_VK_Z match their ascii values
#define NS_VK_A 0x41
#define NS_VK_B 0x42
#define NS_VK_C 0x43
#define NS_VK_D 0x44
#define NS_VK_E 0x45
#define NS_VK_F 0x46
#define NS_VK_G 0x47
#define NS_VK_H 0x48
#define NS_VK_I 0x49
#define NS_VK_J 0x4A
#define NS_VK_K 0x4B
#define NS_VK_L 0x4C
#define NS_VK_M 0x4D
#define NS_VK_N 0x4E
#define NS_VK_O 0x4F
#define NS_VK_P 0x50
#define NS_VK_Q 0x51
#define NS_VK_R 0x52
#define NS_VK_S 0x53
#define NS_VK_T 0x54
#define NS_VK_U 0x55
#define NS_VK_V 0x56
#define NS_VK_W 0x57
#define NS_VK_X 0x58
#define NS_VK_Y 0x59
#define NS_VK_Z 0x5A
#define NS_VK_NUMPAD0 0x60
#define NS_VK_NUMPAD1 0x61
#define NS_VK_NUMPAD2 0x62
#define NS_VK_NUMPAD3 0x63
#define NS_VK_NUMPAD4 0x64
#define NS_VK_NUMPAD5 0x65
#define NS_VK_NUMPAD6 0x66
#define NS_VK_NUMPAD7 0x67
#define NS_VK_NUMPAD8 0x68
#define NS_VK_NUMPAD9 0x69
#define NS_VK_MULTIPLY 0x6A
#define NS_VK_ADD 0x6B
#define NS_VK_SEPARATOR 0x6C
#define NS_VK_SUBTRACT 0x6D
#define NS_VK_DECIMAL 0x6E
#define NS_VK_DIVIDE 0x6F
#define NS_VK_F1 0x70
#define NS_VK_F2 0x71
#define NS_VK_F3 0x72
#define NS_VK_F4 0x73
#define NS_VK_F5 0x74
#define NS_VK_F6 0x75
#define NS_VK_F7 0x76
#define NS_VK_F8 0x77
#define NS_VK_F9 0x78
#define NS_VK_F10 0x79
#define NS_VK_F11 0x7A
#define NS_VK_F12 0x7B
#define NS_VK_F13 0x7C
#define NS_VK_F14 0x7D
#define NS_VK_F15 0x7E
#define NS_VK_F16 0x7F
#define NS_VK_F17 0x80
#define NS_VK_F18 0x81
#define NS_VK_F19 0x82
#define NS_VK_F20 0x83
#define NS_VK_F21 0x84
#define NS_VK_F22 0x85
#define NS_VK_F23 0x86
#define NS_VK_F24 0x87
#define NS_VK_NUM_LOCK 0x90
#define NS_VK_SCROLL_LOCK 0x91
#define NS_VK_COMMA 0xBC
#define NS_VK_PERIOD 0xBE
#define NS_VK_SLASH 0xBF
#define NS_VK_BACK_QUOTE 0xC0
#define NS_VK_OPEN_BRACKET 0xDB
#define NS_VK_BACK_SLASH 0xDC
#define NS_VK_CLOSE_BRACKET 0xDD
#define NS_VK_QUOTE 0xDE
#define NS_EVENT_FLAG_NONE 0x0000
#define NS_EVENT_FLAG_INIT 0x0001
#define NS_EVENT_FLAG_BUBBLE 0x0002
#define NS_EVENT_FLAG_CAPTURE 0x0004
#define NS_EVENT_FLAG_STOP_DISPATCH 0x0008
#define NS_EVENT_FLAG_NO_DEFAULT 0x0010
// IME Constants -- keep in synch with nsIDOMTextRange.h
#define NS_TEXTRANGE_CARETPOSITION 0x01
#define NS_TEXTRANGE_RAWINPUT 0X02
#define NS_TEXTRANGE_SELECTEDRAWTEXT 0x03
#define NS_TEXTRANGE_CONVERTEDTEXT 0x04
#define NS_TEXTRANGE_SELECTEDCONVERTEDTEXT 0x05
#endif // nsGUIEvent_h__

View File

@@ -1,122 +0,0 @@
/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*-
*
* The contents of this file are subject to the Mozilla Public
* License Version 1.1 (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.mozilla.org/MPL/
*
* Software distributed under the License is distributed on an "AS
* IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or
* implied. See the License for the specific language governing
* rights and limitations under the License.
*
* The Original Code is the Mozilla browser.
*
* The Initial Developer of the Original Code is Netscape
* Communications Corporation. Portions created by Netscape are
* Copyright (C) 1999 Netscape Communications Corporation. All
* Rights Reserved.
*
* Contributor(s):
* Stuart Parmenter <pavlov@netscape.com>
*/
#include "nsISupports.idl"
native int(int);
[ptr] native nsDispatchListener(nsDispatchListener);
[ptr] native nsIEventQueue(nsIEventQueue);
[ptr] native UndefinednsIWidget(nsIWidget);
[ref] native PRBoolRef(PRBool);
[ref] native voidStarRef(void *);
%{ C++
#include "nsIEventQueue.h"
/**
* Flags for the getNativeData function.
* See GetNativeData()
*/
#define NS_NATIVE_SHELL 0
/**
* During the nsIAppShell Run method notify this listener
* after each message dispatch.
* @see SetDispatchListener member function of nsIAppShell
*/
class nsDispatchListener {
public:
virtual void AfterDispatch() = 0;
};
class nsIWidget;
%}
[uuid(a0757c31-eeac-11d1-9ec1-00aa002fb821)]
interface nsIAppShell : nsISupports
{
/**
* Creates an application shell
*/
void Create(inout int argc, inout string argv);
/**
* Enter an event loop.
* Don't leave until application exits.
*/
void Run();
/**
* Prepare to process events.
*/
void Spinup();
/**
* Prepare to stop processing events.
*/
void Spindown();
/**
* An event queue has been created or destroyed. Hook or unhook it from
* your system, as necessary.
* @param aQueue the queue in question
* @param aListen PR_TRUE for a new queue wanting hooking up. PR_FALSE
* for a queue wanting to be unhooked.
*/
void ListenToEventQueue(in nsIEventQueue aQueue, in PRBool aListen);
/**
* After event dispatch execute app specific code
*/
void GetNativeEvent(in PRBoolRef aRealEvent, in voidStarRef aEvent);
/**
* After event dispatch execute app specific code
*/
void DispatchNativeEvent(in PRBool aRealEvent, in voidStar aEvent);
/**
* After event dispatch execute app specific code
*/
void SetDispatchListener(in nsDispatchListener aDispatchListener);
/**
* Exit the handle event loop
*/
void Exit();
};
#endif // nsIAppShell_h__

View File

@@ -1,63 +0,0 @@
/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*-
*
* The contents of this file are subject to the Netscape Public
* License Version 1.1 (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.mozilla.org/NPL/
*
* Software distributed under the License is distributed on an "AS
* IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or
* implied. See the License for the specific language governing
* rights and limitations under the License.
*
* The Original Code is mozilla.org code.
*
* The Initial Developer of the Original Code is Netscape
* Communications Corporation. Portions created by Netscape are
* Copyright (C) 1998 Netscape Communications Corporation. All
* Rights Reserved.
*
* Contributor(s):
*/
#ifndef nsIButton_h__
#define nsIButton_h__
#include "nsIWidget.h"
#include "nsString.h"
// {18032AD0-B265-11d1-AA2A-000000000000}
#define NS_IBUTTON_IID \
{ 0x18032ad0, 0xb265, 0x11d1, \
{ 0xaa, 0x2a, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0 } }
/**
* Push button widget.
* Automatically shows itself as depressed when clicked on.
*/
class nsIButton : public nsISupports {
public:
NS_DEFINE_STATIC_IID_ACCESSOR(NS_IBUTTON_IID)
/**
* Set the label
*
* @param Set the label to aText
* @result NS_Ok if no errors
*/
NS_IMETHOD SetLabel(const nsString &aText) = 0;
/**
* Get the button label
*
* @param aBuffer contains label upon return
* @result NS_Ok if no errors
*/
NS_IMETHOD GetLabel(nsString &aBuffer) = 0;
};
#endif

View File

@@ -1,81 +0,0 @@
/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*-
*
* The contents of this file are subject to the Netscape Public
* License Version 1.1 (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.mozilla.org/NPL/
*
* Software distributed under the License is distributed on an "AS
* IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or
* implied. See the License for the specific language governing
* rights and limitations under the License.
*
* The Original Code is mozilla.org code.
*
* The Initial Developer of the Original Code is Netscape
* Communications Corporation. Portions created by Netscape are
* Copyright (C) 1998 Netscape Communications Corporation. All
* Rights Reserved.
*
* Contributor(s):
*/
#ifndef nsICheckButton_h__
#define nsICheckButton_h__
// {961085F5-BD28-11d1-97EF-00609703C14E}
#define NS_ICHECKBUTTON_IID \
{ 0x961085f5, 0xbd28, 0x11d1, { 0x97, 0xef, 0x0, 0x60, 0x97, 0x3, 0xc1, 0x4e } }
#include "nsISupports.h"
#include "nsIWidget.h"
/**
* Checkbox widget.
* Can show itself in a checked or unchecked state.
* The checkbox widget does not automatically show itself checked or unchecked when clicked on.
*/
class nsICheckButton : public nsISupports {
public:
NS_DEFINE_STATIC_IID_ACCESSOR(NS_ICHECKBUTTON_IID)
/**
* Set the button label
*
* @param aText button label
* @result set to NS_OK if method successful
*/
NS_IMETHOD SetLabel(const nsString &aText) = 0;
/**
* Get the button label
*
* @param aBuffer contains label upon return
* @result set to NS_OK if method successful
*/
NS_IMETHOD GetLabel(nsString &aBuffer) = 0;
/**
* Set the check state.
* @param aState PR_TRUE show as checked. PR_FALSE show unchecked.
* @result set to NS_OK if method successful
*/
NS_IMETHOD SetState(const PRBool aState) = 0;
/**
* Get the check state.
* @param aState PR_TRUE if checked. PR_FALSE if unchecked.
* @result set to NS_OK if method successful
*/
NS_IMETHOD GetState(PRBool& aState) = 0;
};
#endif // nsICheckButton_h__

View File

@@ -1,88 +0,0 @@
/* -*- Mode: IDL; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*-
*
* The contents of this file are subject to the Mozilla Public
* License Version 1.1 (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.mozilla.org/MPL/
*
* Software distributed under the License is distributed on an "AS
* IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or
* implied. See the License for the specific language governing
* rights and limitations under the License.
*
* The Original Code is Mozilla Communicator.
*
* The Initial Developer of the Original Code is Netscape Communications
* Corp. Portions created by Netscape are Copyright (C) 1999 Netscape
* Communications Corp. All Rights Reserved.
*
* Contributor(s):
* Mike Pinkerton
*/
#include "nsISupports.idl"
#include "nsISupportsArray.idl"
#include "nsITransferable.idl"
#include "nsIClipboardOwner.idl"
[scriptable, uuid(8B5314BA-DB01-11d2-96CE-0060B0FB9956)]
interface nsIClipboard : nsISupports
{
/**
* Given a transferable, set the data on the native clipboard
*
* @param aTransferable The transferable
* @param anOwner The owner of the transferable
* @result NS_Ok if no errors
*/
void setData ( in nsITransferable aTransferable, in nsIClipboardOwner anOwner) ;
/**
* Given a transferable, get the clipboard data.
*
* @param aTransferable The transferable
* @result NS_Ok if no errors
*/
void getData ( in nsITransferable aTransferable ) ;
/**
* This empties the clipboard and notifies the clipboard owner.
* This empties the "logical" clipboard. It does not clear the native clipboard.
*
* @result NS_OK if successful.
*/
void emptyClipboard ( ) ;
/**
* Some platforms support deferred notification for putting data on the clipboard
* This method forces the data onto the clipboard in its various formats
* This may be used if the application going away.
*
* @result NS_OK if successful.
*/
void forceDataToClipboard ( ) ;
/**
* This provides a way to give correct UI feedback about, for instance, a paste
* should be allowed. It does _NOT_ actually retreive the data and should be a very
* inexpensive call. All it does is check if there is data on the clipboard matching
* any of the flavors in the given list.
*
* @aFlavorList - nsISupportsString's in a nsISupportsArray (for JavaScript).
* @outResult - if data is present matching one of
* @result NS_OK if successful.
*/
boolean hasDataMatchingFlavors ( in nsISupportsArray aFlavorList ) ;
};
%{ C++
%}

View File

@@ -1,45 +0,0 @@
/* -*- Mode: IDL; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*-
*
* The contents of this file are subject to the Mozilla Public
* License Version 1.1 (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.mozilla.org/MPL/
*
* Software distributed under the License is distributed on an "AS
* IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or
* implied. See the License for the specific language governing
* rights and limitations under the License.
*
* The Original Code is Mozilla Communicator.
*
* The Initial Developer of the Original Code is Netscape Communications
* Corp. Portions created by Netscape are Copyright (C) 1999 Netscape
* Communications Corp. All Rights Reserved.
*
* Contributor(s):
* Mike Pinkerton
*/
#include "nsISupports.idl"
#include "nsITransferable.idl"
[scriptable, uuid(5A31C7A1-E122-11d2-9A57-000064657374)]
interface nsIClipboardOwner : nsISupports
{
/**
* Notifies the owner of the clipboard transferable that the
* transferable is being removed from the clipboard
*
* @param aTransferable The transferable
* @result NS_Ok if no errors
*/
void LosingOwnership ( in nsITransferable aTransferable ) ;
};
%{ C++
%}

View File

@@ -1,141 +0,0 @@
/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*-
*
* The contents of this file are subject to the Netscape Public
* License Version 1.1 (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.mozilla.org/NPL/
*
* Software distributed under the License is distributed on an "AS
* IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or
* implied. See the License for the specific language governing
* rights and limitations under the License.
*
* The Original Code is mozilla.org code.
*
* The Initial Developer of the Original Code is Netscape
* Communications Corporation. Portions created by Netscape are
* Copyright (C) 1998 Netscape Communications Corporation. All
* Rights Reserved.
*
* Contributor(s):
*/
#ifndef nsIComboBox_h__
#define nsIComboBox_h__
#include "nsIListWidget.h"
#include "nsString.h"
// {961085F6-BD28-11d1-97EF-00609703C14E}
#define NS_ICOMBOBOX_IID \
{ 0x961085f6, 0xbd28, 0x11d1, { 0x97, 0xef, 0x0, 0x60, 0x97, 0x3, 0xc1, 0x4e } }
/**
* Initialize combobox data
*/
struct nsComboBoxInitData : public nsWidgetInitData {
nsComboBoxInitData()
: mDropDownHeight(0)
{
}
PRUint32 mDropDownHeight; // in pixels
};
/**
* Single selection drop down list. See nsIListWidget for capabilities
*/
class nsIComboBox : public nsISupports {
public:
NS_DEFINE_STATIC_IID_ACCESSOR(NS_ICOMBOBOX_IID);
/**
* Set an item at the specific position
*
* @param aItem the item name. The item has to be null terminated
* @param aPosition the position the item should be inserted at
* 0 is at the top of the list
* -1 is at the end of the list
*/
NS_IMETHOD AddItemAt(nsString &aItem, PRInt32 aPosition) = 0;
/**
* Finds the first occurrence of the specified item
*
* @param aItem the string to be filled
* @param aStartPos the starting position (index)
* @return PR_TRUE if successful, PR_FALSE otherwise
*
*/
virtual PRInt32 FindItem(nsString &aItem, PRInt32 aStartPos) = 0;
/**
* Returns the number of items in the list
*
* @return the number of items
*
*/
virtual PRInt32 GetItemCount() = 0;
/**
* Remove the first occurrence of the specified item
*
* @param aPosition the item position
* 0 is at the top of the list
* -1 is at the end of the list
*
* @return PR_TRUE if successful, PR_FALSE otherwise
*
*/
virtual PRBool RemoveItemAt(PRInt32 aPosition) = 0;
/**
* Gets an item at a specific location
*
* @param anItem on return contains the string of the item at that position
* @param aPosition the Position of the item
*
*/
virtual PRBool GetItemAt(nsString& anItem, PRInt32 aPosition) = 0;
/**
* Gets the selected item for a single selection list
*
* @param aItem on return contains the string of the selected item
*
*/
NS_IMETHOD GetSelectedItem(nsString &aItem) = 0;
/**
* Returns with the index of the selected item
*
* @return PRInt32, index of selected item
*
*/
virtual PRInt32 GetSelectedIndex() = 0;
/**
* Select the item at the specified position
*
* @param PRInt32, the item position
* 0 is at the top of the list
* -1 is at the end of the list
*
*/
NS_IMETHOD SelectItem(PRInt32 aPosition) = 0;
/**
* Deselects all the items in the list
*
*/
NS_IMETHOD Deselect() = 0;
};
#endif // nsIComboBox_h__

View File

@@ -1,148 +0,0 @@
/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*-
*
* The contents of this file are subject to the Netscape Public
* License Version 1.1 (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.mozilla.org/NPL/
*
* Software distributed under the License is distributed on an "AS
* IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or
* implied. See the License for the specific language governing
* rights and limitations under the License.
*
* The Original Code is mozilla.org code.
*
* The Initial Developer of the Original Code is Netscape
* Communications Corporation. Portions created by Netscape are
* Copyright (C) 1998 Netscape Communications Corporation. All
* Rights Reserved.
*
* Contributor(s):
*/
#ifndef nsIContextMenu_h__
#define nsIContextMenu_h__
#include "nsISupports.h"
#include "nsString.h"
#include "nsIDOMNode.h"
#include "nsIDOMElement.h"
#include "nsIWebShell.h"
class nsIMenuBar;
class nsIMenu;
class nsIMenuItem;
class nsIMenuListener;
//Generate this!
// {35A3DEC1-4992-11d2-8DBA-00609703C14E}
#define NS_ICONTEXTMENU_IID \
{ 0x35a3dec1, 0x4992, 0x11d2, \
{ 0x8d, 0xba, 0x0, 0x60, 0x97, 0x3, 0xc1, 0x4e } }
/**
* Menu widget
*/
class nsIContextMenu : public nsISupports {
public:
NS_DEFINE_STATIC_IID_ACCESSOR(NS_ICONTEXTMENU_IID)
/**
* Creates the context menu
*
*/
NS_IMETHOD Create(nsISupports * aParent, const nsString& anAlignment, const nsString& anAnchorAlignment) = 0;
/**
* Get the context menu's Parent
*
*/
NS_IMETHOD GetParent(nsISupports *&aParent) = 0;
/**
* Adds a context menu Item
*
*/
NS_IMETHOD AddItem(nsISupports* aItem) = 0;
/**
* Adds a separator
*
*/
NS_IMETHOD AddSeparator() = 0;
/**
* Returns the number of context menu items
* This does count separators as items
*/
NS_IMETHOD GetItemCount(PRUint32 &aCount) = 0;
/**
* Returns a Menu or Menu Item at a specified Index
*
*/
NS_IMETHOD GetItemAt(const PRUint32 aPos, nsISupports *& aMenuItem) = 0;
/**
* Inserts a Menu Item at a specified Index
*
*/
NS_IMETHOD InsertItemAt(const PRUint32 aPos, nsISupports * aMenuItem) = 0;
/**
* Removes an Menu Item from a specified Index
*
*/
NS_IMETHOD RemoveItem(const PRUint32 aPos) = 0;
/**
* Removes all the Menu Items
*
*/
NS_IMETHOD RemoveAll() = 0;
/**
* Gets Native MenuHandle
*
*/
NS_IMETHOD GetNativeData(void** aData) = 0;
/**
* Adds menu listener for dynamic construction
*
*/
NS_IMETHOD AddMenuListener(nsIMenuListener * aMenuListener) = 0;
/**
* Removes menu listener for dynamic construction
*
*/
NS_IMETHOD RemoveMenuListener(nsIMenuListener * aMenuListener) = 0;
/**
* Set location
*
*/
NS_IMETHOD SetLocation(PRInt32 aX, PRInt32 aY) = 0;
/**
* Set DOMNode
*
*/
NS_IMETHOD SetDOMNode(nsIDOMNode * aMenuNode) = 0;
/**
* Set DOMElement
*
*/
NS_IMETHOD SetDOMElement(nsIDOMElement * aMenuElement) = 0;
/**
* Set WebShell
*
*/
NS_IMETHOD SetWebShell(nsIWebShell * aWebShell) = 0;
};
#endif

View File

@@ -1,70 +0,0 @@
/* -*- Mode: IDL; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*-
*
* The contents of this file are subject to the Mozilla Public
* License Version 1.1 (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.mozilla.org/MPL/
*
* Software distributed under the License is distributed on an "AS
* IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or
* implied. See the License for the specific language governing
* rights and limitations under the License.
*
* The Original Code is Mozilla Communicator.
*
* The Initial Developer of the Original Code is Netscape Communications
* Corp. Portions created by Netscape are Copyright (C) 1999 Netscape
* Communications Corp. All Rights Reserved.
*
* Contributor(s):
* Mike Pinkerton
*/
#include "nsISupports.idl"
#include "nsISupportsArray.idl"
#include "nsIDragSession.idl"
#include "nsIScriptableRegion.idl"
[scriptable, uuid(8B5314BB-DB01-11d2-96CE-0060B0FB9956)]
interface nsIDragService : nsISupports
{
const long DRAGDROP_ACTION_NONE = 0;
const long DRAGDROP_ACTION_COPY = 1;
const long DRAGDROP_ACTION_MOVE = 2;
const long DRAGDROP_ACTION_LINK = 4;
/**
* Starts a modal drag session with an array of transaferables
*
* @param aTransferables - an array of transferables to be dragged
* @param aRegion - a region containing rectangles for cursor feedback,
* in window coordinates.
* @param aActionType - specified which of copy/move/link are allowed
*/
void invokeDragSession ( in nsISupportsArray aTransferables,
in nsIScriptableRegion aRegion, in unsigned long aActionType );
/**
* Returns the current Drag Session
*/
nsIDragSession getCurrentSession ( ) ;
/**
* Tells the Drag Service to start a drag session. This is called when
* an external drag occurs
*/
void startDragSession ( ) ;
/**
* Tells the Drag Service to end a drag session. This is called when
* an external drag occurs
*/
void endDragSession ( ) ;
};
%{ C++
%}

View File

@@ -1,80 +0,0 @@
/* -*- Mode: IDL; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*-
*
* The contents of this file are subject to the Mozilla Public
* License Version 1.1 (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.mozilla.org/MPL/
*
* Software distributed under the License is distributed on an "AS
* IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or
* implied. See the License for the specific language governing
* rights and limitations under the License.
*
* The Original Code is Mozilla Communicator.
*
* The Initial Developer of the Original Code is Netscape Communications
* Corp. Portions created by Netscape are Copyright (C) 1999 Netscape
* Communications Corp. All Rights Reserved.
*
* Contributor(s):
* Mike Pinkerton
*/
#include "nsISupports.idl"
#include "nsISupportsArray.idl"
#include "nsITransferable.idl"
%{ C++
#include "nsSize.h"
%}
native nsSize (nsSize);
[scriptable, uuid(CBA22C53-FCCE-11d2-96D4-0060B0FB9956)]
interface nsIDragSession : nsISupports
{
/**
* Set the current state of the drag whether it can be dropped or not.
* usually the target "frame" sets this so the native system can render the correct feedback
*/
attribute boolean canDrop;
/**
* Sets the action (copy, move, link, et.c) for the current drag
*/
attribute unsigned long dragAction;
/**
* Sets the current width and height if the drag target area.
* It will contain the current size of the Frame that the drag is currently in
*/
attribute nsSize targetSize;
/**
* Get the number items that were dropped
*/
readonly attribute unsigned long numDropItems;
/**
* Get data from a Drag&Drop. Can be called while the drag is in process
* or after the drop has completed.
*
* @param aTransferable the transferable for the data to be put into
* @param aItemIndex which of multiple drag items, zero-based
*/
void getData ( in nsITransferable aTransferable, in unsigned long aItemIndex ) ;
/**
* Check to set if ant of the native data on the clipboard matches this data flavor
*
* @result NS_OK if if the data flavor is supported and, NS_ERROR_FAILURE is it is not
*/
boolean isDataFlavorSupported ( in string aDataFlavor ) ;
};
%{ C++
%}

View File

@@ -1,51 +0,0 @@
/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*-
*
* The contents of this file are subject to the Netscape Public
* License Version 1.1 (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.mozilla.org/NPL/
*
* Software distributed under the License is distributed on an "AS
* IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or
* implied. See the License for the specific language governing
* rights and limitations under the License.
*
* The Original Code is mozilla.org code.
*
* The Initial Developer of the Original Code is Netscape
* Communications Corporation. Portions created by Netscape are
* Copyright (C) 1998 Netscape Communications Corporation. All
* Rights Reserved.
*
* Contributor(s):
*/
#ifndef nsIDragSessionMac_h__
#define nsIDragSessionMac_h__
#include "nsISupports.h"
#include <Drag.h>
#define NS_IDRAGSESSIONMAC_IID \
{ 0x36c4c380, 0x09e2, 0x11d3, { 0xb0, 0x33, 0xa4, 0x20, 0xf4, 0x2c, 0xfd, 0x7c } };
class nsIDragSessionMac : public nsISupports {
public:
NS_DEFINE_STATIC_IID_ACCESSOR(NS_IDRAGSESSIONMAC_IID)
/**
* Since the drag may originate in an external application, we need some way of
* communicating the DragManager's DragRef to the session so it can use it
* when filling in data requests.
*
* @param aDragRef the MacOS DragManager's ref number for the current drag
*/
NS_IMETHOD SetDragReference ( DragReference aDragRef ) = 0;
};
#endif

View File

@@ -1,52 +0,0 @@
/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*-
*
* The contents of this file are subject to the Netscape Public
* License Version 1.1 (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.mozilla.org/NPL/
*
* Software distributed under the License is distributed on an "AS
* IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or
* implied. See the License for the specific language governing
* rights and limitations under the License.
*
* The Original Code is mozilla.org code.
*
* The Initial Developer of the Original Code is Netscape
* Communications Corporation. Portions created by Netscape are
* Copyright (C) 1998 Netscape Communications Corporation. All
* Rights Reserved.
*
* Contributor(s):
*/
#ifndef nsIEventListener_h__
#define nsIEventListener_h__
#include "nsISupports.h"
#include "nsGUIEvent.h"
/**
* Event listener interface.
* Alternative to a callback for recieving events.
*/
// {c83f6b80-d7ce-11d2-8360-c4c894c4917c}
#define NS_IEVENTLISTENER_IID \
{ 0xc83f6b80, 0xd7ce, 0x11d2, { 0x83, 0x60, 0xc4, 0xc8, 0x94, 0xc4, 0x91, 0x7c } }
class nsIEventListener : public nsISupports {
public:
NS_DEFINE_STATIC_IID_ACCESSOR(NS_IEVENTLISTENER_IID)
/**
* Processes all events.
* If a mouse listener is registered this method will not process mouse events.
* @param anEvent the event to process. See nsGUIEvent.h for event types.
*/
virtual nsEventStatus ProcessEvent(const nsGUIEvent & anEvent) = 0;
};
#endif // nsIEventListener_h__

View File

@@ -1,75 +0,0 @@
/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*-
*
* The contents of this file are subject to the Netscape Public
* License Version 1.1 (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.mozilla.org/NPL/
*
* Software distributed under the License is distributed on an "AS
* IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or
* implied. See the License for the specific language governing
* rights and limitations under the License.
*
* The Original Code is mozilla.org code.
*
* The Initial Developer of the Original Code is Netscape
* Communications Corporation. Portions created by Netscape are
* Copyright (C) 1999 Netscape Communications Corporation. All
* Rights Reserved.
*
* Contributor(s):
*/
#ifndef nsIFileDialogsMgr_h__
#define nsIFileDialogsMgr_h__
#include "nsISupports.h"
#include "nsFileSpec.h"
// {0ef98781-e34b-11d2-b345-00a0cc3c1cde}
#define NS_IFILEDIALOGSMGR_IID \
{ 0xef98781, 0xe34b, 0x11d2, { 0xb3, 0x45, 0x0, 0xa0, 0xcc, 0x3c, 0x1c, 0xde } }
#define NS_FILEDIALOGSMGR_CID \
{ 0xef98784, 0xe34b, 0x11d2, { 0xb3, 0x45, 0x0, 0xa0, 0xcc, 0x3c, 0x1c, 0xde } }
enum nsFileDlgResults {
nsFileDlgResults_Cancel, // User hit cancel, ignore selection
nsFileDlgResults_OK, // User hit Ok, process selection
nsFileDlgResults_Replace // User acknowledged file already exists so ok to replace, process selection
};
/**
* (native) File Dialogs utility.
* Provides an XP wrapper to platform native file dialogs:
* GetFile - Presents a file browser and returns an nsFileSpec for the selected file
* GetFolder - Presents a folder/path selection dialog and returns an nsFileSpec
* PutFile - Presents a file save dialog to the user and returns an nsFileSpec with
* the name and path to save the file
*
*/
class nsIFileDialogsMgr : public nsISupports
{
public:
NS_DEFINE_STATIC_IID_ACCESSOR(NS_IFILEDIALOGSMGR_IID)
NS_IMETHOD GetFile(
nsFileSpec & theFileSpec, // Populate with initial path for file dialog
nsFileDlgResults & theResult, // Result from the file selection dialog prompt
const nsString * promptString, // Window title for file selection dialog
void * filterList) = 0;
NS_IMETHOD GetFolder(
nsFileSpec & theFileSpec, // Populate with initial path for file dialog
nsFileDlgResults & theResult, // Result from the folder selection dialog prompt
const nsString * promptString) = 0; // Window title for folder selection dialog
NS_IMETHOD PutFile(
nsFileSpec & theFileSpec, // Populate with initial path for file dialog
nsFileDlgResults & theResult, // Result from the file save dialog prompt
const nsString * promptString) = 0; // Window title for file save dialog
};
#endif // nsIFileDialogsMgr_h__

View File

@@ -1,96 +0,0 @@
/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*-
*
* The contents of this file are subject to the Mozilla Public
* License Version 1.1 (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.mozilla.org/MPL/
*
* Software distributed under the License is distributed on an "AS
* IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or
* implied. See the License for the specific language governing
* rights and limitations under the License.
*
* The Original Code is the Mozilla browser.
*
* The Initial Developer of the Original Code is Netscape
* Communications Corporation. Portions created by Netscape are
* Copyright (C) 1999 Netscape Communications Corporation. All
* Rights Reserved.
*
* Contributor(s):
* Stuart Parmenter <pavlov@netscape.com>
*/
#include "nsISupports.idl"
#include "nsIFileSpec.idl"
interface nsIDOMWindow;
[scriptable, uuid(c47de916-1dd1-11b2-8141-82507fa02b21)]
interface nsIFilePicker : nsISupports
{
const short modeLoad = 0; // Load a file or directory
const short modeSave = 1; // Save a file or directory
const short modeGetFolder = 2; // Select a fodler/directory
const short returnOK = 0; // User hit cancel, ignore selection
const short returnCancel = 1; // User hit Ok, process selection
const short returnReplace = 2; // User acknowledged file already exists so ok to replace, process selection
/**
* Create the file widget.
*
* @param parent nsIDOMWindow parent. This dialog should be dependant on this parent.
* @param title The title for the file widget
* @param mode load, save, or get folder
*
*/
void create(in nsIDOMWindow parent, in wstring title, in short mode);
/**
* Set the list of file filters
*
* @param titles array of filter titles
* @param filters array of filters to associate with titles
* @param numberOfFilters number of filters.
*
*/
void setFilterList(in long numberOfFilters,
[array, size_is(numberOfFilters)] in wstring titles,
[array, size_is(numberOfFilters)] in wstring filters);
/**
* Get the index into the filter list for the type of file the user wants to save
*
* @param selectedFilter the index of the selected item in the filter list
*
*/
readonly attribute long selectedFilter;
/* what is this? */
attribute wstring defaultString;
/**
* Set the directory that the file open/save dialog initially displays
*
* @param displayDirectory the name of the directory
*
*/
attribute nsIFileSpec displayDirectory;
/**
* Get the nsFileSpec for the file or directory.
*
* @return Returns the file currently selected
*/
readonly attribute nsIFileSpec file;
/**
* Show File Dialog. The dialog is displayed modally.
*
* @return returnOK if the user selects OK, returnCancel if the user selects cancel
*
*/
short show();
};

View File

@@ -1,112 +0,0 @@
/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*-
*
* The contents of this file are subject to the Netscape Public
* License Version 1.1 (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.mozilla.org/NPL/
*
* Software distributed under the License is distributed on an "AS
* IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or
* implied. See the License for the specific language governing
* rights and limitations under the License.
*
* The Original Code is mozilla.org code.
*
* The Initial Developer of the Original Code is Netscape
* Communications Corporation. Portions created by Netscape are
* Copyright (C) 1998 Netscape Communications Corporation. All
* Rights Reserved.
*
* Contributor(s):
*/
// This is the only correct cross-platform way to specify a file.
// Strings are not such a way. If you grew up on windows or unix, you
// may think they are. Welcome to reality.
#include "nsIFileSpec.idl"
%{C++
#include "nscore.h" // for NS_WIDGET
#include "nsIComponentManager.h"
%}
native StandardFilterMask(nsIFileSpecWithUI::StandardFilterMask);
[scriptable, uuid(8ddf7681-139a-11d3-915f-dc1f8c138b7c)]
interface nsIFileSpecWithUI : nsIFileSpec
{
%{C++
//
// The "choose" functions present the file picker UI in order to set the
// value of the file spec.
%}
%{C++
// The mask for standard filters is given as follows:
enum StandardFilterMask
{
eAllReadable = (1<<0)
, eHTMLFiles = (1<<1)
, eXMLFiles = (1<<2)
, eImageFiles = (1<<3)
, eMailFiles = (1<<4)
, eTextFiles = (1<<5)
, eAllFiles = (1<<6)
// Mask containing all the above default filters
, eAllStandardFilters = (
eAllReadable
| eHTMLFiles
| eXMLFiles
| eImageFiles
| eMailFiles
| eTextFiles
| eAllFiles)
, eAllMailOutputFilters = (
eHTMLFiles
| eMailFiles
| eTextFiles)
// The "extra filter" bit should be set if the "extra filter"
// is passed in to chooseInputFile.
, eExtraFilter = (1<<31)
};
enum { kNumStandardFilters = 7, kNumMailFilters = 3 };
%}
[noscript] void chooseInputFile(
in string title
, in StandardFilterMask standardFilterMask
, in string extraFilterTitle
, in string extraFilter
);
[noscript] void chooseOutputFile(in string windowTitle,
in string suggestedLeafName,
in StandardFilterMask standardFilterMask);
string chooseFile(in string title);
string chooseDirectory(in string title);
};
%{C++
// Define Progid and CID
// {e3326a80-2816-11d3-a7e5-98cb48c74f3c}
#define NS_FILESPECWITHUI_CID \
{ 0xe3326a80, 0x2816, 0x11d3, { 0xa7, 0xe5, 0x98, 0xcb, 0x48, 0xc7, 0x4f, 0x3c } }
#define NS_FILESPECWITHUI_PROGID "component://netscape/filespecwithui"
#define NS_FILESPECWITHUI_CLASSNAME "nsIFileSpecWithUI"
// Factory methods
inline nsIFileSpecWithUI* NS_CreateFileSpecWithUI()
{
nsIFileSpecWithUI* spec = nsnull;
nsresult rv = nsComponentManager::CreateInstance(
(const char*)NS_FILESPECWITHUI_PROGID,
(nsISupports*)nsnull,
(const nsID&)nsIFileSpecWithUI::GetIID(),
(void**)&spec);
NS_ASSERTION(NS_SUCCEEDED(rv), "ERROR: Could not make a file spec.");
return spec;
}
%}

View File

@@ -1,178 +0,0 @@
/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*-
*
* The contents of this file are subject to the Netscape Public
* License Version 1.1 (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.mozilla.org/NPL/
*
* Software distributed under the License is distributed on an "AS
* IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or
* implied. See the License for the specific language governing
* rights and limitations under the License.
*
* The Original Code is mozilla.org code.
*
* The Initial Developer of the Original Code is Netscape
* Communications Corporation. Portions created by Netscape are
* Copyright (C) 1998 Netscape Communications Corporation. All
* Rights Reserved.
*
* Contributor(s):
*/
#ifndef nsIFileWidget_h__
#define nsIFileWidget_h__
#include "nsString.h"
#include "nsFileSpec.h"
class nsIWidget;
class nsIDeviceContext;
class nsIAppShell;
class nsIToolkit;
// {F8030015-C342-11d1-97F0-00609703C14E}
#define NS_IFILEWIDGET_IID \
{ 0xf8030015, 0xc342, 0x11d1, { 0x97, 0xf0, 0x0, 0x60, 0x97, 0x3, 0xc1, 0x4e } }
/**
* File selector mode
*/
enum nsFileDlgMode {
/// Load a file or directory
eMode_load,
/// Save a file or directory
eMode_save,
/// Select a fodler/directory
eMode_getfolder
};
enum nsFileDlgResults {
nsFileDlgResults_Cancel, // User hit cancel, ignore selection
nsFileDlgResults_OK, // User hit Ok, process selection
nsFileDlgResults_Replace // User acknowledged file already exists so ok to replace, process selection
};
/**
* File selector widget.
* Modally selects files for loading or saving from a list.
*/
class nsIFileWidget : public nsISupports
{
public:
NS_DEFINE_STATIC_IID_ACCESSOR(NS_IFILEWIDGET_IID)
/**
* Create the file filter. This differs from the standard
* widget Create method because it passes in the mode
*
* @param aParent the parent to place this widget into
* @param aTitle The title for the file widget
* @param aMode load or save
* @return void
*
*/
NS_IMETHOD Create(nsIWidget *aParent,
const nsString& aTitle,
nsFileDlgMode aMode,
nsIDeviceContext *aContext = nsnull,
nsIAppShell *aAppShell = nsnull,
nsIToolkit *aToolkit = nsnull,
void *aInitData = nsnull) = 0;
/**
* Set the list of file filters
*
* @param aNumberOfFilter number of filters.
* @param aTitle array of filter titles
* @param aFilter array of filters to associate with titles
* @return void
*
*/
NS_IMETHOD SetFilterList(PRUint32 aNumberOfFilters,const nsString aTitles[],const nsString aFilters[]) = 0;
/**
* Get the index into the filter list for the type of file the user wants to save
*
* @param theType the index into the filter list
* @return void
*
*/
NS_IMETHOD GetSelectedType(PRInt16& theType) = 0;
/**
* Show File Dialog. The dialog is displayed modally.
*
* @return PR_TRUE if user selects OK, PR_FALSE if user selects CANCEL
*
*/
virtual PRBool Show() = 0;
/**
* Get the nsFileSpec for the file or directory.
*
* @param aFile on exit it contains the file or directory selected
*/
NS_IMETHOD GetFile(nsFileSpec& aFile) = 0;
/**
* Set the default string that appears in file open/save dialog
*
* @param aString the name of the file
* @return void
*
*/
NS_IMETHOD SetDefaultString(const nsString& aString) = 0;
/**
* Set the directory that the file open/save dialog initially displays
*
* @param aDirectory the name of the directory
* @return void
*
*/
NS_IMETHOD SetDisplayDirectory(const nsFileSpec& aDirectory) = 0;
/**
* Get the directory that the file open/save dialog was last displaying
*
* @param aDirectory the name of the directory
* @return void
*
*/
NS_IMETHOD GetDisplayDirectory(nsFileSpec& aDirectory) = 0;
virtual nsFileDlgResults GetFile(
nsIWidget * aParent,
const nsString & promptString, // Window title for the dialog
nsFileSpec & theFileSpec) = 0; // Populate with initial path for file dialog
virtual nsFileDlgResults GetFolder(
nsIWidget * aParent,
const nsString & promptString, // Window title for the dialog
nsFileSpec & theFileSpec) = 0; // Populate with initial path for file dialog
virtual nsFileDlgResults PutFile(
nsIWidget * aParent,
const nsString & promptString, // Window title for the dialog
nsFileSpec & theFileSpec) = 0; // Populate with initial path for file dialog
};
#endif // nsIFileWidget_h__

View File

@@ -1,51 +0,0 @@
/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*-
*
* The contents of this file are subject to the Netscape Public
* License Version 1.1 (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.mozilla.org/NPL/
*
* Software distributed under the License is distributed on an "AS
* IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or
* implied. See the License for the specific language governing
* rights and limitations under the License.
*
* The Original Code is mozilla.org code.
*
* The Initial Developer of the Original Code is Netscape
* Communications Corporation. Portions created by Netscape are
* Copyright (C) 1998 Netscape Communications Corporation. All
* Rights Reserved.
*
* Contributor(s):
*/
#ifndef nsIFontNameIterator_h__
#define nsIFontNameIterator_h__
#include "nsISupports.h"
class nsString;
// {CEEB39D1-0949-11d3-9A87-0050046CDA96}
#define NS_IFONTNAMEITERATOR_IID \
{ 0xceeb39d1, 0x949, 0x11d3, { 0x9a, 0x87, 0x0, 0x50, 0x4, 0x6c, 0xda, 0x96 } };
class nsIFontNameIterator : public nsISupports
// Fonts are identified by strings, |Get| and |Advance| are distinct to facility wrapping
// with C++ objects as standard iterators.
{
public:
NS_DEFINE_STATIC_IID_ACCESSOR(NS_IFONTNAMEITERATOR_IID)
NS_IMETHOD Reset() = 0;
// does not need to be called initially, returns iterator to initial state
NS_IMETHOD Get( nsString* aFontName ) = 0;
// returns an error when no more names are available
NS_IMETHOD Advance() = 0;
// returns an error when no more names are available
};
#endif

View File

@@ -1,50 +0,0 @@
/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*-
*
* The contents of this file are subject to the Netscape Public
* License Version 1.1 (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.mozilla.org/NPL/
*
* Software distributed under the License is distributed on an "AS
* IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or
* implied. See the License for the specific language governing
* rights and limitations under the License.
*
* The Original Code is mozilla.org code.
*
* The Initial Developer of the Original Code is Netscape
* Communications Corporation. Portions created by Netscape are
* Copyright (C) 1998 Netscape Communications Corporation. All
* Rights Reserved.
*
* Contributor(s):
*/
#ifndef nsIFontRetrieverService_h__
#define nsIFontRetrieverService_h__
#include "nsISupports.h"
class nsIFontNameIterator;
class nsIFontSizeIterator;
class nsString;
// {285EF9B2-094A-11d3-9A87-0050046CDA96}
#define NS_IFONTRETRIEVERSERVICE_IID \
{ 0x285ef9b2, 0x94a, 0x11d3, { 0x9a, 0x87, 0x0, 0x50, 0x4, 0x6c, 0xda, 0x96 } };
class nsIFontRetrieverService : public nsISupports
// This (singleton) service exists soley as a factory to manufacture iterators
{
public:
NS_DEFINE_STATIC_IID_ACCESSOR(NS_IFONTRETRIEVERSERVICE_IID)
NS_IMETHOD CreateFontNameIterator( nsIFontNameIterator** aIterator ) = 0;
NS_IMETHOD CreateFontSizeIterator( const nsString &aFontName, nsIFontSizeIterator** aIterator ) = 0;
NS_IMETHOD IsFontScalable( const nsString &aFontName, PRBool* aResult ) = 0;
};
#endif

View File

@@ -1,51 +0,0 @@
/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*-
*
* The contents of this file are subject to the Netscape Public
* License Version 1.1 (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.mozilla.org/NPL/
*
* Software distributed under the License is distributed on an "AS
* IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or
* implied. See the License for the specific language governing
* rights and limitations under the License.
*
* The Original Code is mozilla.org code.
*
* The Initial Developer of the Original Code is Netscape
* Communications Corporation. Portions created by Netscape are
* Copyright (C) 1998 Netscape Communications Corporation. All
* Rights Reserved.
*
* Contributor(s):
*/
#ifndef nsIFontSizeIterator_h__
#define nsIFontSizeIterator_h__
#include "nsISupports.h"
class nsString;
// {285EF9B1-094A-11d3-9A87-0050046CDA96}
#define NS_IFONTSIZEITERATOR_IID \
{ 0x285ef9b1, 0x94a, 0x11d3, { 0x9a, 0x87, 0x0, 0x50, 0x4, 0x6c, 0xda, 0x96 } };
class nsIFontSizeIterator : public nsISupports
// Font sizes are identified with doubles (e.g., for the possibility of fractional sizes from MM, etc.).
// |Get| and |Advance| are distinct to facility wrapping with C++ objects as standard iterators.
{
public:
NS_DEFINE_STATIC_IID_ACCESSOR(NS_IFONTSIZEITERATOR_IID)
NS_IMETHOD Reset() = 0;
// does not need to be called initially, returns iterator to initial state
NS_IMETHOD Get( double* aFontSize ) = 0;
// returns an error when no more sizes are available
NS_IMETHOD Advance() = 0;
// returns an error when no more sizes are available
};
#endif

View File

@@ -1,69 +0,0 @@
/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*-
*
* The contents of this file are subject to the Netscape Public
* License Version 1.1 (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.mozilla.org/NPL/
*
* Software distributed under the License is distributed on an "AS
* IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or
* implied. See the License for the specific language governing
* rights and limitations under the License.
*
* The Original Code is mozilla.org code.
*
* The Initial Developer of the Original Code is Netscape
* Communications Corporation. Portions created by Netscape are
* Copyright (C) 1998 Netscape Communications Corporation. All
* Rights Reserved.
*
* Contributor(s):
*/
#include "nsISupports.idl"
#include "nsISupportsArray.idl"
[scriptable, uuid(948A0023-E3A7-11d2-96CF-0060B0FB9956)]
interface nsIFormatConverter : nsISupports
{
/**
* Get the list of the "input" data flavors (mime types as nsISupportsString),
* in otherwords, the flavors that this converter can convert "from" (the
* incoming data to the converter).
*/
nsISupportsArray getInputDataFlavors ( ) ;
/**
* Get the list of the "output" data flavors (mime types as nsISupportsString),
* in otherwords, the flavors that this converter can convert "to" (the
* outgoing data to the converter).
*
* @param aDataFlavorList fills list with supported flavors
*/
nsISupportsArray getOutputDataFlavors ( ) ;
/**
* Determines whether a converion from one flavor to another is supported
*
* @param aFromFormatConverter flavor to convert from
* @param aFromFormatConverter flavor to convert to
*/
boolean canConvert ( in string aFromDataFlavor, in string aToDataFlavor ) ;
/**
* Converts from one flavor to another.
*
* @param aFromFormatConverter flavor to convert from
* @param aFromFormatConverter flavor to convert to (destination own the memory)
* @returns returns NS_OK if it was converted
*/
void convert ( in string aFromDataFlavor, in nsISupports aFromData, in unsigned long aDataLen,
in string aToDataFlavor, out nsISupports aToData, out unsigned long aDataToLen ) ;
};
%{ C++
%}

View File

@@ -1,60 +0,0 @@
/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*-
*
* The contents of this file are subject to the Netscape Public
* License Version 1.1 (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.mozilla.org/NPL/
*
* Software distributed under the License is distributed on an "AS
* IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or
* implied. See the License for the specific language governing
* rights and limitations under the License.
*
* The Original Code is mozilla.org code.
*
* The Initial Developer of the Original Code is Netscape
* Communications Corporation. Portions created by Netscape are
* Copyright (C) 1999 Netscape Communications Corporation. All
* Rights Reserved.
*
* Contributor(s):
*/
#ifndef nsIKeyBindMgr_h__
#define nsIKeyBindMgr_h__
#include "nsISupports.h"
#include "nsIDOMNode.h"
#include "nsGUIEvent.h"
#include "nsIWebShell.h"
#include "nsIContent.h"
// {a91c0821-de58-11d2-b345-00a0cc3c1cde}
#define NS_IKEYBINDMGR_IID \
{ 0xa91c0821, 0xde58, 0x11d2, \
{ 0xb3, 0x45, 0x0, 0xa0, 0xcc, 0x3c, 0x1c, 0xde } }
// {8B5314BD-DB01-11d2-96CE-0060B0FB9977}
#define NS_KEYBINDMGR_CID \
{ 0x8b5314bd, 0xdb01, 0x11d2, { 0x96, 0xce, 0x0, 0x60, 0xb0, 0xfb, 0x99, 0x77 } }
/**
* Keyboard Binding utility.
* Given a key event and a DOM node to search executes any 'key' command
* that matches the event
*/
class nsIKeyBindMgr : public nsISupports
{
public:
NS_DEFINE_STATIC_IID_ACCESSOR(NS_IKEYBINDMGR_IID)
NS_IMETHOD ProcessKeyEvent(
nsIDOMDocument * domDoc,
const nsKeyEvent & theEvent,
nsIWebShell * webShell,
nsEventStatus & theStatus) = 0;
};
#endif // nsIKeyBindMgr_h__

View File

@@ -1,91 +0,0 @@
/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*-
*
* The contents of this file are subject to the Netscape Public
* License Version 1.1 (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.mozilla.org/NPL/
*
* Software distributed under the License is distributed on an "AS
* IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or
* implied. See the License for the specific language governing
* rights and limitations under the License.
*
* The Original Code is mozilla.org code.
*
* The Initial Developer of the Original Code is Netscape
* Communications Corporation. Portions created by Netscape are
* Copyright (C) 1998 Netscape Communications Corporation. All
* Rights Reserved.
*
* Contributor(s):
*/
#ifndef nsILabel_h__
#define nsILabel_h__
#include "nsIWidget.h"
#include "nsString.h"
/* F3131891-3DC7-11d2-8DB8-00609703C14E */
#define NS_ILABEL_IID \
{ 0xf3131891, 0x3dc7, 0x11d2, \
{ 0x8d, 0xb8, 0x0, 0x60, 0x97, 0x3, 0xc1, 0x4e } }
/**
* Label Alignments
*/
enum nsLabelAlignment {
eAlign_Right,
eAlign_Left,
eAlign_Center
};
struct nsLabelInitData : public nsWidgetInitData {
nsLabelInitData()
: mAlignment(eAlign_Left)
{
}
nsLabelAlignment mAlignment;
};
/**
* Label widget.
* Automatically shows itself as depressed when clicked on.
*/
class nsILabel : public nsISupports {
public:
NS_DEFINE_STATIC_IID_ACCESSOR(NS_ILABEL_IID)
/**
* Set the label
*
* @param Set the label to aText
* @result NS_Ok if no errors
*/
NS_IMETHOD SetLabel(const nsString &aText) = 0;
/**
* Get the button label
*
* @param aBuffer contains label upon return
* @result NS_Ok if no errors
*/
NS_IMETHOD GetLabel(nsString &aBuffer) = 0;
/**
* Set the Label Alignemnt for creation
*
* @param aAlignment the alignment
* @result NS_Ok if no errors
*/
NS_IMETHOD SetAlignment(nsLabelAlignment aAlignment) = 0;
};
#endif

View File

@@ -1,183 +0,0 @@
/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*-
*
* The contents of this file are subject to the Netscape Public
* License Version 1.1 (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.mozilla.org/NPL/
*
* Software distributed under the License is distributed on an "AS
* IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or
* implied. See the License for the specific language governing
* rights and limitations under the License.
*
* The Original Code is mozilla.org code.
*
* The Initial Developer of the Original Code is Netscape
* Communications Corporation. Portions created by Netscape are
* Copyright (C) 1998 Netscape Communications Corporation. All
* Rights Reserved.
*
* Contributor(s):
*/
#ifndef nsIListBox_h__
#define nsIListBox_h__
#include "nsIListWidget.h"
#include "nsString.h"
// {F8030014-C342-11d1-97F0-00609703C14E}
#define NS_ILISTBOX_IID \
{ 0xf8030014, 0xc342, 0x11d1, { 0x97, 0xf0, 0x0, 0x60, 0x97, 0x3, 0xc1, 0x4e } }
/**
* Initialize list box data
*/
struct nsListBoxInitData : public nsWidgetInitData {
nsListBoxInitData()
: mMultiSelect(PR_FALSE)
{
}
PRBool mMultiSelect;
};
/**
* Single or multi selection list of items.
* Unlike a nsIWidget, The the list widget must automatically clear
* itself to the background color when paint messages are generated.
* The listbox always has a vertical scrollbar. It never has a
* horizontal scrollbar.
*/
class nsIListBox : public nsISupports {
public:
NS_DEFINE_STATIC_IID_ACCESSOR(NS_ILISTBOX_IID)
/**
* Set an item at the specific position
*
* @param aItem the item name. The item has to be null terminated
* @param aPosition the position the item should be inserted at
* 0 is at the top of the list
* -1 is at the end of the list
*/
NS_IMETHOD AddItemAt(nsString &aItem, PRInt32 aPosition) = 0;
/**
* Finds the first occurrence of the specified item
*
* @param aItem the string to be filled
* @param aStartPos the starting position (index)
* @return PR_TRUE if successful, PR_FALSE otherwise
*
*/
virtual PRInt32 FindItem(nsString &aItem, PRInt32 aStartPos) = 0;
/**
* Returns the number of items in the list
*
* @return the number of items
*
*/
virtual PRInt32 GetItemCount() = 0;
/**
* Remove the first occurrence of the specified item
*
* @param aPosition the item position
* 0 is at the top of the list
* -1 is at the end of the list
*
* @return PR_TRUE if successful, PR_FALSE otherwise
*
*/
virtual PRBool RemoveItemAt(PRInt32 aPosition) = 0;
/**
* Gets an item at a specific location
*
* @param anItem on return contains the string of the item at that position
* @param aPosition the Position of the item
*
*/
virtual PRBool GetItemAt(nsString& anItem, PRInt32 aPosition) = 0;
/**
* Gets the selected item for a single selection list
*
* @param aItem on return contains the string of the selected item
*
*/
NS_IMETHOD GetSelectedItem(nsString &aItem) = 0;
/**
* Returns with the index of the selected item
*
* @return PRInt32, index of selected item
*
*/
virtual PRInt32 GetSelectedIndex() = 0;
/**
* Select the item at the specified position
*
* @param PRInt32, the item position
* 0 is at the top of the list
* -1 is at the end of the list
*
*/
NS_IMETHOD SelectItem(PRInt32 aPosition) = 0;
/**
* Deselects all the items in the list
*
*/
NS_IMETHOD Deselect() = 0;
/**
* Set the listbox to be multi-select.
* @param aMultiple PR_TRUE can have multiple selections. PR_FALSE single
* selections only.
* @return void
*
*/
NS_IMETHOD SetMultipleSelection(PRBool aMultipleSelections) = 0;
/**
* Return the number of selected items. For single selection list box this
* @return the number of selected items
* can be 1 or 0.
*
*/
virtual PRInt32 GetSelectedCount() = 0;
/**
* Retrieves the indices of the selected items.
* @param aIndices Array to hold the selected items. Use GetSelectedCount to
* determine how large the array needs to be.
* @param aSize Size of the aIndices array
*
*/
NS_IMETHOD GetSelectedIndices(PRInt32 aIndices[], PRInt32 aSize) = 0;
/**
* Sets the indices of the selected items.
* @param aIndices Array to hold the selected items. Use GetSelectedCount to
* determine how large the array needs to be.
* @param aSize Size of the aIndices array
*
*/
NS_IMETHOD SetSelectedIndices(PRInt32 aIndices[], PRInt32 aSize) = 0;
};
#endif // nsIListBox_h__

View File

@@ -1,130 +0,0 @@
/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*-
*
* The contents of this file are subject to the Netscape Public
* License Version 1.1 (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.mozilla.org/NPL/
*
* Software distributed under the License is distributed on an "AS
* IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or
* implied. See the License for the specific language governing
* rights and limitations under the License.
*
* The Original Code is mozilla.org code.
*
* The Initial Developer of the Original Code is Netscape
* Communications Corporation. Portions created by Netscape are
* Copyright (C) 1998 Netscape Communications Corporation. All
* Rights Reserved.
*
* Contributor(s):
*/
#ifndef nsIListWidget_h__
#define nsIListWidget_h__
#include "nsIWidget.h"
#include "nsString.h"
// {F8030013-C342-11d1-97F0-00609703C14E}
#define NS_ILISTWIDGET_IID \
{ 0xf8030013, 0xc342, 0x11d1, { 0x97, 0xf0, 0x0, 0x60, 0x97, 0x3, 0xc1, 0x4e } }
/**
*
* Base class for nsIListBox and nsIComboBox
*
*/
class nsIListWidget : public nsISupports {
public:
NS_DEFINE_STATIC_IID_ACCESSOR(NS_ILISTWIDGET_IID)
/**
* Set an item at the specific position
*
* @param aItem the item name. The item has to be null terminated
* @param aPosition the position the item should be inserted at
* 0 is at the top of the list
* -1 is at the end of the list
*/
NS_IMETHOD AddItemAt(nsString &aItem, PRInt32 aPosition) = 0;
/**
* Finds the first occurrence of the specified item
*
* @param aItem the string to be filled
* @param aStartPos the starting position (index)
* @return PR_TRUE if successful, PR_FALSE otherwise
*
*/
virtual PRInt32 FindItem(nsString &aItem, PRInt32 aStartPos) = 0;
/**
* Returns the number of items in the list
*
* @return the number of items
*
*/
virtual PRInt32 GetItemCount() = 0;
/**
* Remove the first occurrence of the specified item
*
* @param aPosition the item position
* 0 is at the top of the list
* -1 is at the end of the list
*
* @return PR_TRUE if successful, PR_FALSE otherwise
*
*/
virtual PRBool RemoveItemAt(PRInt32 aPosition) = 0;
/**
* Gets an item at a specific location
*
* @param anItem on return contains the string of the item at that position
* @param aPosition the Position of the item
*
*/
virtual PRBool GetItemAt(nsString& anItem, PRInt32 aPosition) = 0;
/**
* Gets the selected item for a single selection list
*
* @param aItem on return contains the string of the selected item
*
*/
NS_IMETHOD GetSelectedItem(nsString &aItem) = 0;
/**
* Returns with the index of the selected item
*
* @return PRInt32, index of selected item
*
*/
virtual PRInt32 GetSelectedIndex() = 0;
/**
* Select the item at the specified position
*
* @param PRInt32, the item position
* 0 is at the top of the list
* -1 is at the end of the list
*
*/
NS_IMETHOD SelectItem(PRInt32 aPosition) = 0;
/**
* Deselects all the items in the list
*
*/
NS_IMETHOD Deselect() = 0;
};
#endif // nsIListWidget_h__

View File

@@ -1,161 +0,0 @@
/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*-
*
* The contents of this file are subject to the Netscape Public
* License Version 1.1 (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.mozilla.org/NPL/
*
* Software distributed under the License is distributed on an "AS
* IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or
* implied. See the License for the specific language governing
* rights and limitations under the License.
*
* The Original Code is mozilla.org code.
*
* The Initial Developer of the Original Code is Netscape
* Communications Corporation. Portions created by Netscape are
* Copyright (C) 1998 Netscape Communications Corporation. All
* Rights Reserved.
*
* Contributor(s):
*/
#ifndef __nsILookAndFeel
#define __nsILookAndFeel
#include "nsISupports.h"
#include "nsColor.h"
#include "nsFont.h"
#ifdef NS_DEBUG
#include "nsSize.h"
#endif
// {21B51DE1-21A3-11d2-B6E0-00805F8A2676}
#define NS_ILOOKANDFEEL_IID \
{ 0x21b51de1, 0x21a3, 0x11d2, \
{ 0xb6, 0xe0, 0x0, 0x80, 0x5f, 0x8a, 0x26, 0x76 } }
class nsILookAndFeel: public nsISupports {
public:
NS_DEFINE_STATIC_IID_ACCESSOR(NS_ILOOKANDFEEL_IID)
typedef enum {
eColor_WindowBackground,
eColor_WindowForeground,
eColor_WidgetBackground,
eColor_WidgetForeground,
eColor_WidgetSelectBackground,
eColor_WidgetSelectForeground,
eColor_Widget3DHighlight,
eColor_Widget3DShadow,
eColor_TextBackground,
eColor_TextForeground,
eColor_TextSelectBackground,
eColor_TextSelectForeground,
// New CSS 2 color definitions
eColor_activeborder,
eColor_activecaption,
eColor_appworkspace,
eColor_background,
eColor_buttonface,
eColor_buttonhighlight,
eColor_buttonshadow,
eColor_buttontext,
eColor_captiontext,
eColor_graytext,
eColor_highlight,
eColor_highlighttext,
eColor_inactiveborder,
eColor_inactivecaption,
eColor_inactivecaptiontext,
eColor_infobackground,
eColor_infotext,
eColor_menu,
eColor_menutext,
eColor_scrollbar,
eColor_threeddarkshadow,
eColor_threedface,
eColor_threedhighlight,
eColor_threedlightshadow,
eColor_threedshadow,
eColor_window,
eColor_windowframe,
eColor_windowtext
} nsColorID;
typedef enum {
eMetric_WindowTitleHeight,
eMetric_WindowBorderWidth,
eMetric_WindowBorderHeight,
eMetric_Widget3DBorder,
eMetric_TextFieldBorder, // Native border size
eMetric_TextFieldHeight,
eMetric_TextVerticalInsidePadding, // needed only because of GTK
eMetric_TextShouldUseVerticalInsidePadding, // needed only because of GTK
eMetric_TextHorizontalInsideMinimumPadding,
eMetric_TextShouldUseHorizontalInsideMinimumPadding, // needed only because of GTK
eMetric_ButtonHorizontalInsidePaddingNavQuirks,
eMetric_ButtonHorizontalInsidePaddingOffsetNavQuirks,
eMetric_CheckboxSize,
eMetric_RadioboxSize,
eMetric_ListShouldUseHorizontalInsideMinimumPadding, // needed only because of GTK
eMetric_ListHorizontalInsideMinimumPadding,
eMetric_ListShouldUseVerticalInsidePadding, // needed only because of GTK
eMetric_ListVerticalInsidePadding, // needed only because of GTK
eMetric_CaretBlinkTime, // default, may be overriden by OS
eMetric_CaretWidthTwips
} nsMetricID;
typedef enum {
eMetricFloat_TextFieldVerticalInsidePadding,
eMetricFloat_TextFieldHorizontalInsidePadding,
eMetricFloat_TextAreaVerticalInsidePadding,
eMetricFloat_TextAreaHorizontalInsidePadding,
eMetricFloat_ListVerticalInsidePadding,
eMetricFloat_ListHorizontalInsidePadding,
eMetricFloat_ButtonVerticalInsidePadding,
eMetricFloat_ButtonHorizontalInsidePadding
} nsMetricFloatID;
NS_IMETHOD GetColor(const nsColorID aID, nscolor &aColor) = 0;
NS_IMETHOD GetMetric(const nsMetricID aID, PRInt32 & aMetric) = 0;
NS_IMETHOD GetMetric(const nsMetricFloatID aID, float & aMetric) = 0;
#ifdef NS_DEBUG
typedef enum {
eMetricSize_TextField = 0,
eMetricSize_TextArea = 1,
eMetricSize_ListBox = 2,
eMetricSize_ComboBox = 3,
eMetricSize_Radio = 4,
eMetricSize_CheckBox = 5,
eMetricSize_Button = 6
} nsMetricNavWidgetID;
typedef enum {
eMetricSize_Courier = 0,
eMetricSize_SansSerif = 1
} nsMetricNavFontID;
// This method returns the actual (or nearest estimate)
// of the Navigator size for a given form control for a given font
// and font size. This is used in NavQuirks mode to see how closely
// we match its size
NS_IMETHOD GetNavSize(const nsMetricNavWidgetID aWidgetID,
const nsMetricNavFontID aFontID,
const PRInt32 aFontSize,
nsSize &aSize) = 0;
#endif
};
#define nsLAF nsILookAndFeel
#endif /* __nsILookAndFeel */

View File

@@ -1,190 +0,0 @@
/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*-
*
* The contents of this file are subject to the Netscape Public
* License Version 1.1 (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.mozilla.org/NPL/
*
* Software distributed under the License is distributed on an "AS
* IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or
* implied. See the License for the specific language governing
* rights and limitations under the License.
*
* The Original Code is mozilla.org code.
*
* The Initial Developer of the Original Code is Netscape
* Communications Corporation. Portions created by Netscape are
* Copyright (C) 1998 Netscape Communications Corporation. All
* Rights Reserved.
*
* Contributor(s):
*/
#ifndef nsIMenu_h__
#define nsIMenu_h__
#include "nsISupports.h"
#include "nsString.h"
#include "nsIDOMNode.h"
#include "nsIDOMElement.h"
#include "nsIWebShell.h"
class nsIMenuBar;
class nsIMenu;
class nsIMenuItem;
class nsIMenuListener;
// {35A3DEC1-4992-11d2-8DBA-00609703C14E}
#define NS_IMENU_IID \
{ 0x35a3dec1, 0x4992, 0x11d2, \
{ 0x8d, 0xba, 0x0, 0x60, 0x97, 0x3, 0xc1, 0x4e } }
/**
* Menu widget
*/
class nsIMenu : public nsISupports {
public:
NS_DEFINE_STATIC_IID_ACCESSOR(NS_IMENU_IID)
/**
* Creates the Menu
*
*/
NS_IMETHOD Create(nsISupports * aParent, const nsString &aLabel) = 0;
/**
* Get the Menu's Parent
*
*/
NS_IMETHOD GetParent(nsISupports *&aParent) = 0;
/**
* Get the Menu label
*
*/
NS_IMETHOD GetLabel(nsString &aText) = 0;
/**
* Set the Menu label
*
*/
NS_IMETHOD SetLabel(const nsString &aText) = 0;
/**
* Get the Menu Access Key
*
*/
NS_IMETHOD GetAccessKey(nsString &aText) = 0;
/**
* Set the Menu Access Key
*
*/
NS_IMETHOD SetAccessKey(const nsString &aText) = 0;
/**
* Set the Menu enabled state
*
*/
NS_IMETHOD SetEnabled(PRBool aIsEnabled) = 0;
/**
* Get the Menu enabled state
*
*/
NS_IMETHOD GetEnabled(PRBool* aIsEnabled) = 0;
/**
* Query if this is the help menu. Mostly for MacOS voodoo.
*
*/
NS_IMETHOD IsHelpMenu(PRBool* aIsHelpMenu) = 0;
/**
* Adds a Menu Item
*
*/
NS_IMETHOD AddItem(nsISupports* aItem) = 0;
/**
* Adds a separator
*
*/
NS_IMETHOD AddSeparator() = 0;
/**
* Returns the number of menu items
* This does count separators as items
*/
NS_IMETHOD GetItemCount(PRUint32 &aCount) = 0;
/**
* Returns a Menu or Menu Item at a specified Index
*
*/
NS_IMETHOD GetItemAt(const PRUint32 aPos, nsISupports *& aMenuItem) = 0;
/**
* Inserts a Menu Item at a specified Index
*
*/
NS_IMETHOD InsertItemAt(const PRUint32 aPos, nsISupports * aMenuItem) = 0;
/**
* Removes an Menu Item from a specified Index
*
*/
NS_IMETHOD RemoveItem(const PRUint32 aPos) = 0;
/**
* Removes all the Menu Items
*
*/
NS_IMETHOD RemoveAll() = 0;
/**
* Gets Native MenuHandle
*
*/
NS_IMETHOD GetNativeData(void** aData) = 0;
/**
* Sets Native MenuHandle
*
*/
NS_IMETHOD SetNativeData(void* aData) = 0;
/**
* Adds menu listener for dynamic construction
*
*/
NS_IMETHOD AddMenuListener(nsIMenuListener * aMenuListener) = 0;
/**
* Removes menu listener for dynamic construction
*
*/
NS_IMETHOD RemoveMenuListener(nsIMenuListener * aMenuListener) = 0;
/**
* Set DOMNode
*
*/
NS_IMETHOD SetDOMNode(nsIDOMNode * aMenuNode) = 0;
/**
* Set DOMElement
*
*/
NS_IMETHOD SetDOMElement(nsIDOMElement * aMenuElement) = 0;
/**
* Set WebShell
*
*/
NS_IMETHOD SetWebShell(nsIWebShell * aWebShell) = 0;
};
#endif

View File

@@ -1,120 +0,0 @@
/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*-
*
* The contents of this file are subject to the Netscape Public
* License Version 1.1 (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.mozilla.org/NPL/
*
* Software distributed under the License is distributed on an "AS
* IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or
* implied. See the License for the specific language governing
* rights and limitations under the License.
*
* The Original Code is mozilla.org code.
*
* The Initial Developer of the Original Code is Netscape
* Communications Corporation. Portions created by Netscape are
* Copyright (C) 1998 Netscape Communications Corporation. All
* Rights Reserved.
*
* Contributor(s):
*/
#ifndef nsIMenuBar_h__
#define nsIMenuBar_h__
#include "nsISupports.h"
#include "nsString.h"
#include "nsIMenu.h"
#include "nsIWebShell.h"
class nsIWidget;
// {BC658C81-4BEB-11d2-8DBB-00609703C14E}
#define NS_IMENUBAR_IID \
{ 0xbc658c81, 0x4beb, 0x11d2, \
{ 0x8d, 0xbb, 0x0, 0x60, 0x97, 0x3, 0xc1, 0x4e } }
/**
* MenuBar widget
*/
class nsIMenuBar : public nsISupports {
public:
NS_DEFINE_STATIC_IID_ACCESSOR(NS_IMENUBAR_IID)
/**
* Creates the MenuBar
*
*/
NS_IMETHOD Create(nsIWidget * aParent) = 0;
/**
* Get the MenuBar's Parent
*
*/
NS_IMETHOD GetParent(nsIWidget *&aParent) = 0;
/**
* Set the MenuBar's Parent
*
*/
NS_IMETHOD SetParent(nsIWidget *aParent) = 0;
/**
* Adds the Menu
*
*/
NS_IMETHOD AddMenu(nsIMenu * aMenu) = 0;
/**
* Returns the number of menus
*
*/
NS_IMETHOD GetMenuCount(PRUint32 &aCount) = 0;
/**
* Returns a Menu Item at a specified Index
*
*/
NS_IMETHOD GetMenuAt(const PRUint32 aCount, nsIMenu *& aMenu) = 0;
/**
* Inserts a Menu at a specified Index
*
*/
NS_IMETHOD InsertMenuAt(const PRUint32 aCount, nsIMenu *& aMenu) = 0;
/**
* Removes an Menu from a specified Index
*
*/
NS_IMETHOD RemoveMenu(const PRUint32 aCount) = 0;
/**
* Removes all the Menus
*
*/
NS_IMETHOD RemoveAll() = 0;
/**
* Gets Native MenuHandle
*
*/
NS_IMETHOD GetNativeData(void*& aData) = 0;
/**
* Sets Native MenuHandle. Temporary hack for mac until
* nsMenuBar does it's own construction
*/
NS_IMETHOD SetNativeData(void* aData) = 0;
/**
* Draw the menubar
*
*/
NS_IMETHOD Paint() = 0;
};
#endif

View File

@@ -1,189 +0,0 @@
/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*-
*
* The contents of this file are subject to the Netscape Public
* License Version 1.1 (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.mozilla.org/NPL/
*
* Software distributed under the License is distributed on an "AS
* IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or
* implied. See the License for the specific language governing
* rights and limitations under the License.
*
* The Original Code is mozilla.org code.
*
* The Initial Developer of the Original Code is Netscape
* Communications Corporation. Portions created by Netscape are
* Copyright (C) 1998 Netscape Communications Corporation. All
* Rights Reserved.
*
* Contributor(s):
*/
#ifndef nsIMenuItem_h__
#define nsIMenuItem_h__
#include "prtypes.h"
#include "nsISupports.h"
#include "nsString.h"
#include "nsIWebShell.h"
#include "nsIDOMElement.h"
// {7F045771-4BEB-11d2-8DBB-00609703C14E}
#define NS_IMENUITEM_IID \
{ 0x7f045771, 0x4beb, 0x11d2, \
{ 0x8d, 0xbb, 0x0, 0x60, 0x97, 0x3, 0xc1, 0x4e } }
class nsIMenu;
class nsIPopUpMenu;
class nsIWidget;
class nsIMenuListener;
enum {
knsMenuItemNoModifier = 0,
knsMenuItemShiftModifier = (1 << 0),
knsMenuItemAltModifier = (1 << 1),
knsMenuItemControlModifier = (1 << 2),
knsMenuItemCommandModifier = (1 << 3)
};
/**
* MenuItem widget
*/
class nsIMenuItem : public nsISupports {
public:
NS_DEFINE_STATIC_IID_ACCESSOR(NS_IMENUITEM_IID)
/**
* Creates the MenuItem
*
*/
NS_IMETHOD Create(nsISupports * aParent,
const nsString & aLabel,
PRBool isSeparator) = 0;
/**
* Get the MenuItem label
*
*/
NS_IMETHOD GetLabel(nsString &aText) = 0;
/**
* Get the MenuItem label
*
*/
NS_IMETHOD SetLabel(nsString &aText) = 0;
/**
* Set the Menu shortcut char
*
*/
NS_IMETHOD SetShortcutChar(const nsString &aText) = 0;
/**
* Get the Menu shortcut char
*
*/
NS_IMETHOD GetShortcutChar(nsString &aText) = 0;
/**
* Sets whether the item is enabled or disabled
*
*/
NS_IMETHOD SetEnabled(PRBool aIsEnabled) = 0;
/**
* Gets whether the item is enabled or disabled
*
*/
NS_IMETHOD GetEnabled(PRBool *aIsEnabled) = 0;
/**
* Sets whether the item is checked or not
*
*/
NS_IMETHOD SetChecked(PRBool aIsEnabled) = 0;
/**
* Gets whether the item is checked or not
*
*/
NS_IMETHOD GetChecked(PRBool *aIsEnabled) = 0;
/**
* Sets whether the item is a checkbox type
*
*/
NS_IMETHOD SetCheckboxType(PRBool aIsCheckbox) = 0;
/**
* Gets whether the item is a checkbox type
*
*/
NS_IMETHOD GetCheckboxType(PRBool *aIsCheckbox) = 0;
/**
* Gets the MenuItem Command identifier
*
*/
NS_IMETHOD GetCommand(PRUint32 & aCommand) = 0;
/**
* Gets the target for MenuItem
*
*/
NS_IMETHOD GetTarget(nsIWidget *& aTarget) = 0;
/**
* Gets Native Menu Handle
*
*/
NS_IMETHOD GetNativeData(void*& aData) = 0;
/**
* Adds menu listener
*
*/
NS_IMETHOD AddMenuListener(nsIMenuListener * aMenuListener) = 0;
/**
* Removes menu listener
*
*/
NS_IMETHOD RemoveMenuListener(nsIMenuListener * aMenuListener) = 0;
/**
* Indicates whether it is a separator
*
*/
NS_IMETHOD IsSeparator(PRBool & aIsSep) = 0;
/**
* Sets the JavaScript Command to be invoked when a "gui" event occurs on a source widget
* @param aStrCmd the JS command to be cached for later execution
* @return NS_OK
*/
NS_IMETHOD SetCommand(const nsString & aStrCmd) = 0;
/**
* Executes the "cached" JavaScript Command
* @return NS_OK if the command was executed properly, otherwise an error code
*/
NS_IMETHOD DoCommand() = 0;
NS_IMETHOD SetDOMNode(nsIDOMNode * aDOMNode) = 0;
NS_IMETHOD GetDOMNode(nsIDOMNode ** aDOMNode) = 0;
NS_IMETHOD SetDOMElement(nsIDOMElement * aDOMElement) = 0;
NS_IMETHOD GetDOMElement(nsIDOMElement ** aDOMElement) = 0;
NS_IMETHOD SetWebShell(nsIWebShell * aWebShell) = 0;
/**
*
*/
NS_IMETHOD SetModifiers(PRUint8 aModifiers) = 0;
NS_IMETHOD GetModifiers(PRUint8 * aModifiers) = 0;
};
#endif

View File

@@ -1,85 +0,0 @@
/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*-
*
* The contents of this file are subject to the Netscape Public
* License Version 1.1 (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.mozilla.org/NPL/
*
* Software distributed under the License is distributed on an "AS
* IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or
* implied. See the License for the specific language governing
* rights and limitations under the License.
*
* The Original Code is mozilla.org code.
*
* The Initial Developer of the Original Code is Netscape
* Communications Corporation. Portions created by Netscape are
* Copyright (C) 1998 Netscape Communications Corporation. All
* Rights Reserved.
*
* Contributor(s):
*/
#ifndef nsIMenuListener_h__
#define nsIMenuListener_h__
#include "nsGUIEvent.h"
#include "nsISupports.h"
// TODO: This needs to be generated!
// {BC658C81-4BEB-11d2-8DBB-00609703C14E}
#define NS_IMENULISTENER_IID \
{ 0xbc658c81, 0x4beb, 0x11d2, \
{ 0x8d, 0xbb, 0x0, 0x60, 0x97, 0x3, 0xc1, 0x9e } }
static NS_DEFINE_IID(kIMenuListenerIID, NS_IMENULISTENER_IID);
/**
*
* Menu event listener
* This interface should only be implemented by the menu manager
* These are registered with nsWindows to recieve menu events
*/
class nsIMenuListener : public nsISupports {
public:
NS_DEFINE_STATIC_IID_ACCESSOR(NS_IMENULISTENER_IID)
/**
* Processes a menu item selected event
* @param aMenuEvent See nsGUIEvent.h
* @return whether the event was consumed or ignored. See nsEventStatus
*/
virtual nsEventStatus MenuItemSelected(const nsMenuEvent & aMenuEvent) = 0;
/**
* Processes a menu selected event
* @param aMenuEvent See nsGUIEvent.h
* @return whether the event was consumed or ignored. See nsEventStatus
*/
virtual nsEventStatus MenuSelected(const nsMenuEvent & aMenuEvent) = 0;
/**
* Processes a menu deselect event
* @param aMenuEvent See nsGUIEvent.h
* @return whether the event was consumed or ignored. See nsEventStatus
*/
virtual nsEventStatus MenuDeselected(const nsMenuEvent & aMenuEvent) = 0;
virtual nsEventStatus MenuConstruct(
const nsMenuEvent & aMenuEvent,
nsIWidget * aParentWindow,
void * menubarNode,
void * aWebShell) = 0;
virtual nsEventStatus MenuDestruct(const nsMenuEvent & aMenuEvent) = 0;
};
#endif // nsIMenuListener_h__

Some files were not shown because too many files have changed in this diff Show More