123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263 |
- // Copyright (c) 2013 GitHub, Inc.
- // Use of this source code is governed by the MIT license that can be
- // found in the LICENSE file.
- #include "atom/browser/api/atom_api_app.h"
- #import <Cocoa/Cocoa.h>
- #include "base/strings/sys_string_conversions.h"
- namespace atom {
- namespace api {
- // Callback passed to js which will stop accessing the given bookmark.
- void OnStopAccessingSecurityScopedResource(NSURL* bookmarkUrl) {
- [bookmarkUrl stopAccessingSecurityScopedResource];
- [bookmarkUrl release];
- }
- // Get base64 encoded NSData, create a bookmark for it and start accessing it.
- base::Callback<void()> App::StartAccessingSecurityScopedResource(
- mate::Arguments* args) {
- std::string data;
- args->GetNext(&data);
- NSString* base64str = base::SysUTF8ToNSString(data);
- NSData* bookmarkData =
- [[NSData alloc] initWithBase64EncodedString:base64str options:0];
- // Create bookmarkUrl from NSData.
- BOOL isStale = false;
- NSError* error = nil;
- NSURL* bookmarkUrl =
- [NSURL URLByResolvingBookmarkData:bookmarkData
- options:NSURLBookmarkResolutionWithSecurityScope
- relativeToURL:nil
- bookmarkDataIsStale:&isStale
- error:&error];
- if (error != nil) {
- NSString* err =
- [NSString stringWithFormat:@"NSError: %@ %@", error, [error userInfo]];
- args->ThrowError(base::SysNSStringToUTF8(err));
- }
- if (isStale) {
- args->ThrowError("bookmarkDataIsStale - try recreating the bookmark");
- }
- if (error == nil && isStale == false) {
- [bookmarkUrl startAccessingSecurityScopedResource];
- }
- // Stop the NSURL from being GC'd.
- [bookmarkUrl retain];
- // Return a js callback which will close the bookmark.
- return base::Bind(&OnStopAccessingSecurityScopedResource, bookmarkUrl);
- }
- } // namespace atom
- } // namespace api
|